diff options
author | fanquake <fanquake@gmail.com> | 2020-01-04 16:13:30 +0800 |
---|---|---|
committer | fanquake <fanquake@gmail.com> | 2020-01-04 17:09:52 +0800 |
commit | 310b29f9c326a14060c3c0b0561cd59af7d3c1e5 (patch) | |
tree | cb1eaeb2746db10c41c4dd907e01dd0d0d9708f9 | |
parent | a284bbbee805cd03664fd27656795a9f7d3eeca7 (diff) | |
parent | bd8c6f12e805115b5f8f7b608061008027f4a793 (diff) | |
download | bitcoin-310b29f9c326a14060c3c0b0561cd59af7d3c1e5.tar.xz |
Merge #17859: [0.19] Fix origfee return for bumpfee with feerate arg
bd8c6f12e805115b5f8f7b608061008027f4a793 Fix origfee return for bumpfee with feerate arg (Gregory Sanders)
Pull request description:
Backport of Github-Pull: #17643
Rebased-From: 02afb0c550dc8529918460c845d1da3adf236eed
ACKs for top commit:
fanquake:
ACK bd8c6f12e805115b5f8f7b608061008027f4a793 - the appveyor failure is unrelated.
instagibbs:
utACK https://github.com/bitcoin/bitcoin/pull/17859/commits/bd8c6f12e805115b5f8f7b608061008027f4a793
Tree-SHA512: 7e420a3fe02503194b6fc8eae5277c46289cd6abe131b2513ad80422819e6bafbc7768e7be344d4132ebdbc24846d459ba2a271be184725d818dff77510fa4de
-rw-r--r-- | src/wallet/feebumper.cpp | 7 | ||||
-rwxr-xr-x | test/functional/wallet_bumpfee.py | 3 |
2 files changed, 6 insertions, 4 deletions
diff --git a/src/wallet/feebumper.cpp b/src/wallet/feebumper.cpp index b87231293f..cb2fe37fc9 100644 --- a/src/wallet/feebumper.cpp +++ b/src/wallet/feebumper.cpp @@ -109,12 +109,11 @@ static feebumper::Result CheckFeeRate(const CWallet* wallet, const CWalletTx& wt return feebumper::Result::OK; } -static CFeeRate EstimateFeeRate(CWallet* wallet, const CWalletTx& wtx, CCoinControl& coin_control, CAmount& old_fee) +static CFeeRate EstimateFeeRate(CWallet* wallet, const CWalletTx& wtx, const CAmount old_fee, CCoinControl& coin_control) { // Get the fee rate of the original transaction. This is calculated from // the tx fee/vsize, so it may have been rounded down. Add 1 satoshi to the // result. - old_fee = wtx.GetDebit(ISMINE_SPENDABLE) - wtx.tx->GetValueOut(); int64_t txSize = GetVirtualTransactionSize(*(wtx.tx)); CFeeRate feerate(old_fee, txSize); feerate += CFeeRate(1); @@ -310,6 +309,8 @@ Result CreateRateBumpTransaction(CWallet* wallet, const uint256& txid, const CCo } } + old_fee = wtx.GetDebit(ISMINE_SPENDABLE) - wtx.tx->GetValueOut(); + if (coin_control.m_feerate) { // The user provided a feeRate argument. // We calculate this here to avoid compiler warning on the cs_wallet lock @@ -320,7 +321,7 @@ Result CreateRateBumpTransaction(CWallet* wallet, const uint256& txid, const CCo } } else { // The user did not provide a feeRate argument - new_coin_control.m_feerate = EstimateFeeRate(wallet, wtx, new_coin_control, old_fee); + new_coin_control.m_feerate = EstimateFeeRate(wallet, wtx, old_fee, new_coin_control); } // Fill in required inputs we are double-spending(all of them) diff --git a/test/functional/wallet_bumpfee.py b/test/functional/wallet_bumpfee.py index 89838ff058..c11305ebaf 100755 --- a/test/functional/wallet_bumpfee.py +++ b/test/functional/wallet_bumpfee.py @@ -100,7 +100,8 @@ def test_simple_bumpfee_succeeds(self, mode, rbf_node, peer_node, dest_address): else: bumped_tx = rbf_node.bumpfee(rbfid) assert_equal(bumped_tx["errors"], []) - assert bumped_tx["fee"] - abs(rbftx["fee"]) > 0 + assert bumped_tx["fee"] > -rbftx["fee"] + assert_equal(bumped_tx["origfee"], -rbftx["fee"]) # check that bumped_tx propagates, original tx was evicted and has a wallet conflict self.sync_mempools((rbf_node, peer_node)) assert bumped_tx["txid"] in rbf_node.getrawmempool() |