0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-03 09:56:38 -05:00
bitcoin-bitcoin-core/test/functional/test_framework
Samuel Dobson 24abd8312e
Merge bitcoin/bitcoin#22949: fee: Round up fee calculation to avoid a lower than expected feerate
80dc829be7 tests: Calculate fees more similarly to CFeeRate::GetFee (Andrew Chow)
ce2cc44afd tests: Test for assertion when feerate is rounded down (Andrew Chow)
0fbaef9676 fees: Always round up fee calculated from a feerate (Andrew Chow)

Pull request description:

  When calculating the fee for a feerate, it is possible that the final calculation will have fractional satoshis. Currently those are ignored via truncation which results in the absolute fee being rounded down. Rounding down is problematic because it results in a feerate that is slightly lower than the feerate represented by the `CFeeRate` object. A slightly lower feerate particularly causes issues for coin selection as it can trigger an assertion error. To avoid potentially underpaying the feerate (and the assertion), always round up the calculated fee.

  A test is added for the assertion, along with a comment explaining what happens.

  It is unlikely that a user can trigger this as it requires a very specific set of rounding errors to occur as well as the transaction not needing any change and being right on the lower bound of the exact match window. However I was able to trigger the assertion while running coin selection simulations, albeit after thousands of transactions and with some weird feerates.

ACKs for top commit:
  ryanofsky:
    Code review ACK 80dc829be7
  promag:
    Tested ACK 80dc829be7.
  lsilva01:
    tACK 80dc829
  meshcollider:
    utACK 80dc829be7

Tree-SHA512: fe26684c60f236cab48ea6a4600c141ce766dbe59504ec77595dcbd7fd0b34559acc617007f4f499c9155d8fda0a336954413410ba862b19c765c0cfac79d642
2021-11-05 00:08:00 +13:00
..
__init__.py Rename rpc-tests directory to functional 2017-03-20 10:40:31 -04:00
address.py test: refactor: remove hex_str_to_bytes helper 2021-08-01 19:26:51 +02:00
authproxy.py test: Remove Windows workaround in authproxy 2021-09-25 09:33:16 +02:00
bdb.py test: refactor: remove binascii from test_framework 2021-08-04 19:59:13 +01:00
bip340_test_vectors.csv tests: add BIP340 Schnorr signature support to test framework 2020-10-12 17:18:47 -07:00
blocktools.py test: add script_util helper for creating bare multisig scripts 2021-10-26 14:51:18 +02:00
coverage.py test: add type annotations to util.get_rpc_proxy 2021-07-27 11:26:14 +08:00
descriptors.py Output a descriptor in createmultisig and addmultisigaddress 2020-01-30 23:55:36 -05:00
key.py test: remove unused function xor_bytes 2021-02-09 17:58:21 +01:00
messages.py refactor: replace remaining binascii method calls 2021-08-16 19:30:56 +01:00
muhash.py test: Change MuHash Python implementation to match cpp version again 2020-12-22 01:48:34 +01:00
netutil.py test: refactor: remove binascii from test_framework 2021-08-04 19:59:13 +01:00
p2p.py test: use test_framework.p2p P2P_SERVICES in functional tests 2021-09-19 14:20:48 +02:00
script.py Correction for VerifyTaprootCommitment comments 2021-03-01 09:01:48 -05:00
script_util.py test: add script_util helper for creating bare multisig scripts 2021-10-26 14:51:18 +02:00
segwit_addr.py Use Bech32m encoding for v1+ segwit addresses 2021-03-16 10:48:36 -07:00
siphash.py Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
socks5.py scripted-diff: Update copyright in ./test 2019-03-02 10:58:35 -05:00
test_framework.py Make explicit the node param in init_wallet() 2021-10-20 00:30:28 -03:00
test_node.py test: Delete generate* calls from TestNode 2021-10-06 13:41:08 +02:00
test_shell.py TestShell: Return self from setup() 2019-11-05 12:55:52 +01:00
util.py tests: Calculate fees more similarly to CFeeRate::GetFee 2021-10-11 12:29:33 -04:00
wallet.py test: MiniWallet: more deterministic coin selection for coinbase UTXOs (oldest first) 2021-10-27 17:49:53 +02:00
wallet_util.py test: add script_util helper for creating bare multisig scripts 2021-10-26 14:51:18 +02:00