mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 23:18:14 +01:00
Merge #18654: rpc: separate bumpfee's psbt creation function into psbtbumpfee
79d6332e9emoveonly: Fix indentation in bumpfee RPC (Andrew Chow)431071c28aHide bumpfee's psbt creation behavior behind -deprecatedrpc (Andrew Chow)4638224f64Add psbtbumpfee RPC (Andrew Chow) Pull request description: Adds a new RPC `psbtbumpfee` which always creates a psbt. `bumpfee` will then only be able to create and broadcast fee bumping transactions instead of changing its behavior based on `IsWalletSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS)`. Split from #18627 ACKs for top commit: Sjors: re-utACK79d6332meshcollider: utACK79d6332e9efjahr: Code review ACK79d6332e9eTree-SHA512: 1c92c4b4461bb30e78be3ee73165f624398ef33996ce36043b61a8931be667030d0fca12fd0b30097b78c56e4e9092c69582b237cbdac51d56f6be23d8c0f1bb
This commit is contained in:
@@ -4,13 +4,13 @@
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
"""Test deprecation of RPC calls."""
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
# from test_framework.util import assert_raises_rpc_error
|
||||
from test_framework.util import assert_raises_rpc_error, find_vout_for_address
|
||||
|
||||
class DeprecatedRpcTest(BitcoinTestFramework):
|
||||
def set_test_params(self):
|
||||
self.num_nodes = 2
|
||||
self.setup_clean_chain = True
|
||||
self.extra_args = [[], []]
|
||||
self.extra_args = [[], ['-deprecatedrpc=bumpfee']]
|
||||
|
||||
def run_test(self):
|
||||
# This test should be used to verify correct behaviour of deprecated
|
||||
@@ -23,7 +23,38 @@ class DeprecatedRpcTest(BitcoinTestFramework):
|
||||
# self.log.info("Test generate RPC")
|
||||
# assert_raises_rpc_error(-32, 'The wallet generate rpc method is deprecated', self.nodes[0].rpc.generate, 1)
|
||||
# self.nodes[1].generate(1)
|
||||
self.log.info("No tested deprecated RPC methods")
|
||||
|
||||
if self.is_wallet_compiled():
|
||||
self.log.info("Test bumpfee RPC")
|
||||
self.nodes[0].generate(101)
|
||||
self.nodes[0].createwallet(wallet_name='nopriv', disable_private_keys=True)
|
||||
noprivs0 = self.nodes[0].get_wallet_rpc('nopriv')
|
||||
w0 = self.nodes[0].get_wallet_rpc('')
|
||||
self.nodes[1].createwallet(wallet_name='nopriv', disable_private_keys=True)
|
||||
noprivs1 = self.nodes[1].get_wallet_rpc('nopriv')
|
||||
|
||||
address = w0.getnewaddress()
|
||||
desc = w0.getaddressinfo(address)['desc']
|
||||
change_addr = w0.getrawchangeaddress()
|
||||
change_desc = w0.getaddressinfo(change_addr)['desc']
|
||||
txid = w0.sendtoaddress(address=address, amount=10)
|
||||
vout = find_vout_for_address(w0, txid, address)
|
||||
self.nodes[0].generate(1)
|
||||
rawtx = w0.createrawtransaction([{'txid': txid, 'vout': vout}], {w0.getnewaddress(): 5}, 0, True)
|
||||
rawtx = w0.fundrawtransaction(rawtx, {'changeAddress': change_addr})
|
||||
signed_tx = w0.signrawtransactionwithwallet(rawtx['hex'])['hex']
|
||||
|
||||
noprivs0.importmulti([{'desc': desc, 'timestamp': 0}, {'desc': change_desc, 'timestamp': 0, 'internal': True}])
|
||||
noprivs1.importmulti([{'desc': desc, 'timestamp': 0}, {'desc': change_desc, 'timestamp': 0, 'internal': True}])
|
||||
|
||||
txid = w0.sendrawtransaction(signed_tx)
|
||||
self.sync_all()
|
||||
|
||||
assert_raises_rpc_error(-32, 'Using bumpfee with wallets that have private keys disabled is deprecated. Use psbtbumpfee instead or restart bitcoind with -deprecatedrpc=bumpfee. This functionality will be removed in 0.22', noprivs0.bumpfee, txid)
|
||||
bumped_psbt = noprivs1.bumpfee(txid)
|
||||
assert 'psbt' in bumped_psbt
|
||||
else:
|
||||
self.log.info("No tested deprecated RPC methods")
|
||||
|
||||
if __name__ == '__main__':
|
||||
DeprecatedRpcTest().main()
|
||||
|
||||
@@ -123,13 +123,19 @@ def test_simple_bumpfee_succeeds(self, mode, rbf_node, peer_node, dest_address):
|
||||
self.sync_mempools((rbf_node, peer_node))
|
||||
assert rbfid in rbf_node.getrawmempool() and rbfid in peer_node.getrawmempool()
|
||||
if mode == "fee_rate":
|
||||
bumped_psbt = rbf_node.psbtbumpfee(rbfid, {"fee_rate": NORMAL})
|
||||
bumped_tx = rbf_node.bumpfee(rbfid, {"fee_rate": NORMAL})
|
||||
else:
|
||||
bumped_psbt = rbf_node.psbtbumpfee(rbfid)
|
||||
bumped_tx = rbf_node.bumpfee(rbfid)
|
||||
assert_equal(bumped_tx["errors"], [])
|
||||
assert bumped_tx["fee"] > -rbftx["fee"]
|
||||
assert_equal(bumped_tx["origfee"], -rbftx["fee"])
|
||||
assert "psbt" not in bumped_tx
|
||||
assert_equal(bumped_psbt["errors"], [])
|
||||
assert bumped_psbt["fee"] > -rbftx["fee"]
|
||||
assert_equal(bumped_psbt["origfee"], -rbftx["fee"])
|
||||
assert "psbt" in bumped_psbt
|
||||
# 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()
|
||||
@@ -391,7 +397,7 @@ def test_watchonly_psbt(self, peer_node, rbf_node, dest_address):
|
||||
assert_equal(len(watcher.decodepsbt(psbt)["tx"]["vin"]), 1)
|
||||
|
||||
# Bump fee, obnoxiously high to add additional watchonly input
|
||||
bumped_psbt = watcher.bumpfee(original_txid, {"fee_rate": HIGH})
|
||||
bumped_psbt = watcher.psbtbumpfee(original_txid, {"fee_rate": HIGH})
|
||||
assert_greater_than(len(watcher.decodepsbt(bumped_psbt['psbt'])["tx"]["vin"]), 1)
|
||||
assert "txid" not in bumped_psbt
|
||||
assert_equal(bumped_psbt["origfee"], -watcher.gettransaction(original_txid)["fee"])
|
||||
|
||||
Reference in New Issue
Block a user