Skip to content

Commit 431071c

Browse files
committed
Hide bumpfee's psbt creation behavior behind -deprecatedrpc
With psbtbumpfee, we can deprecate bumpfee's psbt creation behavior. So put that behind a -deprecatedrpc
1 parent 4638224 commit 431071c

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

src/wallet/rpcwallet.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3306,6 +3306,9 @@ static UniValue bumpfee(const JSONRPCRequest& request)
33063306
CWallet* const pwallet = wallet.get();
33073307

33083308
if (pwallet->IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS) && !want_psbt) {
3309+
if (!pwallet->chain().rpcEnableDeprecated("bumpfee")) {
3310+
throw JSONRPCError(RPC_METHOD_DEPRECATED, "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");
3311+
}
33093312
want_psbt = true;
33103313
}
33113314

test/functional/rpc_deprecated.py

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
55
"""Test deprecation of RPC calls."""
66
from test_framework.test_framework import BitcoinTestFramework
7-
# from test_framework.util import assert_raises_rpc_error
7+
from test_framework.util import assert_raises_rpc_error, find_vout_for_address
88

99
class DeprecatedRpcTest(BitcoinTestFramework):
1010
def set_test_params(self):
1111
self.num_nodes = 2
1212
self.setup_clean_chain = True
13-
self.extra_args = [[], []]
13+
self.extra_args = [[], ['-deprecatedrpc=bumpfee']]
1414

1515
def run_test(self):
1616
# This test should be used to verify correct behaviour of deprecated
@@ -23,7 +23,38 @@ def run_test(self):
2323
# self.log.info("Test generate RPC")
2424
# assert_raises_rpc_error(-32, 'The wallet generate rpc method is deprecated', self.nodes[0].rpc.generate, 1)
2525
# self.nodes[1].generate(1)
26-
self.log.info("No tested deprecated RPC methods")
26+
27+
if self.is_wallet_compiled():
28+
self.log.info("Test bumpfee RPC")
29+
self.nodes[0].generate(101)
30+
self.nodes[0].createwallet(wallet_name='nopriv', disable_private_keys=True)
31+
noprivs0 = self.nodes[0].get_wallet_rpc('nopriv')
32+
w0 = self.nodes[0].get_wallet_rpc('')
33+
self.nodes[1].createwallet(wallet_name='nopriv', disable_private_keys=True)
34+
noprivs1 = self.nodes[1].get_wallet_rpc('nopriv')
35+
36+
address = w0.getnewaddress()
37+
desc = w0.getaddressinfo(address)['desc']
38+
change_addr = w0.getrawchangeaddress()
39+
change_desc = w0.getaddressinfo(change_addr)['desc']
40+
txid = w0.sendtoaddress(address=address, amount=10)
41+
vout = find_vout_for_address(w0, txid, address)
42+
self.nodes[0].generate(1)
43+
rawtx = w0.createrawtransaction([{'txid': txid, 'vout': vout}], {w0.getnewaddress(): 5}, 0, True)
44+
rawtx = w0.fundrawtransaction(rawtx, {'changeAddress': change_addr})
45+
signed_tx = w0.signrawtransactionwithwallet(rawtx['hex'])['hex']
46+
47+
noprivs0.importmulti([{'desc': desc, 'timestamp': 0}, {'desc': change_desc, 'timestamp': 0, 'internal': True}])
48+
noprivs1.importmulti([{'desc': desc, 'timestamp': 0}, {'desc': change_desc, 'timestamp': 0, 'internal': True}])
49+
50+
txid = w0.sendrawtransaction(signed_tx)
51+
self.sync_all()
52+
53+
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)
54+
bumped_psbt = noprivs1.bumpfee(txid)
55+
assert 'psbt' in bumped_psbt
56+
else:
57+
self.log.info("No tested deprecated RPC methods")
2758

2859
if __name__ == '__main__':
2960
DeprecatedRpcTest().main()

0 commit comments

Comments
 (0)