Skip to content

Commit fcc4575

Browse files
committed
test: Replace importprivkey with wallet_importprivkey
importprivkey was a legacy wallet only RPC which had a helper for descriptor wallets in tests. Add wallet_importprivkey helper and use it wherever importprivkey is used (other than backward compatibility tests)
1 parent 94c87bb commit fcc4575

File tree

10 files changed

+33
-26
lines changed

10 files changed

+33
-26
lines changed

test/functional/rpc_getblockstats.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from test_framework.util import (
1313
assert_equal,
1414
assert_raises_rpc_error,
15+
wallet_importprivkey,
1516
)
1617
import json
1718
import os
@@ -45,7 +46,7 @@ def generate_test_data(self, filename):
4546
self.nodes[0].setmocktime(mocktime)
4647
self.nodes[0].createwallet(wallet_name='test')
4748
privkey = self.nodes[0].get_deterministic_priv_key().key
48-
self.nodes[0].importprivkey(privkey)
49+
wallet_importprivkey(self.nodes[0], privkey, 0)
4950

5051
self.generate(self.nodes[0], COINBASE_MATURITY + 1)
5152

test/functional/rpc_psbt.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
assert_greater_than_or_equal,
4545
assert_raises_rpc_error,
4646
find_vout_for_address,
47+
wallet_importprivkey,
4748
)
4849
from test_framework.wallet_util import (
4950
calculate_input_weight,
@@ -622,7 +623,7 @@ def run_test(self):
622623
self.nodes[2].createwallet(wallet_name="wallet{}".format(i))
623624
wrpc = self.nodes[2].get_wallet_rpc("wallet{}".format(i))
624625
for key in signer['privkeys']:
625-
wrpc.importprivkey(key)
626+
wallet_importprivkey(wrpc, key, "now")
626627
signed_tx = wrpc.walletprocesspsbt(signer['psbt'], True, "ALL")['psbt']
627628
assert_equal(signed_tx, signer['result'])
628629

@@ -878,7 +879,7 @@ def test_psbt_input_keys(psbt_input, keys):
878879
addr = self.nodes[0].deriveaddresses(desc)[0]
879880
self.nodes[0].sendtoaddress(addr, 10)
880881
self.generate(self.nodes[0], 1)
881-
self.nodes[0].importprivkey(privkey)
882+
wallet_importprivkey(self.nodes[0], privkey, "now")
882883

883884
psbt = watchonly.sendall([wallet.getnewaddress()])["psbt"]
884885
signed_tx = self.nodes[0].walletprocesspsbt(psbt)

test/functional/test_framework/test_framework.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
initialize_datadir,
3636
p2p_port,
3737
wait_until_helper_internal,
38+
wallet_importprivkey,
3839
)
3940

4041

@@ -485,7 +486,7 @@ def init_wallet(self, *, node):
485486
n = self.nodes[node]
486487
if wallet_name is not None:
487488
n.createwallet(wallet_name=wallet_name, load_on_startup=True)
488-
n.importprivkey(privkey=n.get_deterministic_priv_key().key, label='coinbase', rescan=True)
489+
wallet_importprivkey(n.get_wallet_rpc(wallet_name), n.get_deterministic_priv_key().key, 0, label="coinbase")
489490

490491
def run_test(self):
491492
"""Tests must override this method to define test logic"""

test/functional/test_framework/test_node.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -931,20 +931,6 @@ def __init__(self, rpc):
931931
def __getattr__(self, name):
932932
return getattr(self.rpc, name)
933933

934-
def importprivkey(self, privkey, *, label=None, rescan=None):
935-
wallet_info = self.getwalletinfo()
936-
if 'descriptors' not in wallet_info or ('descriptors' in wallet_info and not wallet_info['descriptors']):
937-
return self.__getattr__('importprivkey')(privkey, label, rescan)
938-
desc = descsum_create('combo(' + privkey + ')')
939-
req = [{
940-
'desc': desc,
941-
'timestamp': 0 if rescan else 'now',
942-
'label': label if label else '',
943-
}]
944-
import_res = self.importdescriptors(req)
945-
if not import_res[0]['success']:
946-
raise JSONRPCException(import_res[0]['error'])
947-
948934
def addmultisigaddress(self, nrequired, keys, *, label=None, address_type=None):
949935
wallet_info = self.getwalletinfo()
950936
if 'descriptors' not in wallet_info or ('descriptors' in wallet_info and not wallet_info['descriptors']):

test/functional/test_framework/util.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
from . import coverage
2222
from .authproxy import AuthServiceProxy, JSONRPCException
23+
from .descriptors import descsum_create
2324
from collections.abc import Callable
2425
from typing import Optional, Union
2526

@@ -609,3 +610,13 @@ def sync_txindex(test_framework, node):
609610
sync_start = int(time.time())
610611
test_framework.wait_until(lambda: node.getindexinfo("txindex")["txindex"]["synced"])
611612
test_framework.log.debug(f"Synced in {time.time() - sync_start} seconds")
613+
614+
def wallet_importprivkey(wallet_rpc, privkey, timestamp, *, label=""):
615+
desc = descsum_create("combo(" + privkey + ")")
616+
req = [{
617+
"desc": desc,
618+
"timestamp": timestamp,
619+
"label": label,
620+
}]
621+
import_res = wallet_rpc.importdescriptors(req)
622+
assert_equal(import_res[0]["success"], True)

test/functional/tool_signet_miner.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414
from test_framework.key import ECKey
1515
from test_framework.script_util import key_to_p2wpkh_script
1616
from test_framework.test_framework import BitcoinTestFramework
17-
from test_framework.util import assert_equal
17+
from test_framework.util import (
18+
assert_equal,
19+
wallet_importprivkey,
20+
)
1821
from test_framework.wallet_util import bytes_to_wif
1922

2023

@@ -42,7 +45,7 @@ def skip_test_if_missing_module(self):
4245
def run_test(self):
4346
node = self.nodes[0]
4447
# import private key needed for signing block
45-
node.importprivkey(bytes_to_wif(CHALLENGE_PRIVATE_KEY))
48+
wallet_importprivkey(node, bytes_to_wif(CHALLENGE_PRIVATE_KEY), "now")
4649

4750
# generate block with signet miner tool
4851
base_dir = self.config["environment"]["SRCDIR"]

test/functional/wallet_createwallet.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from test_framework.util import (
1111
assert_equal,
1212
assert_raises_rpc_error,
13+
wallet_importprivkey,
1314
)
1415
from test_framework.wallet_util import generate_keypair, WalletUnlock
1516

@@ -65,7 +66,7 @@ def run_test(self):
6566
assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w3.getnewaddress)
6667
assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w3.getrawchangeaddress)
6768
# Import private key
68-
w3.importprivkey(generate_keypair(wif=True)[0])
69+
wallet_importprivkey(w3, generate_keypair(wif=True)[0], "now")
6970
# Imported private keys are currently ignored by the keypool
7071
assert_equal(w3.getwalletinfo()['keypoolsize'], 0)
7172
assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w3.getnewaddress)

test/functional/wallet_hd.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from test_framework.test_framework import BitcoinTestFramework
1111
from test_framework.util import (
1212
assert_equal,
13+
wallet_importprivkey,
1314
)
1415

1516

@@ -39,7 +40,7 @@ def run_test(self):
3940
# Import a non-HD private key in the HD wallet
4041
non_hd_add = 'bcrt1qmevj8zfx0wdvp05cqwkmr6mxkfx60yezwjksmt'
4142
non_hd_key = 'cS9umN9w6cDMuRVYdbkfE4c7YUFLJRoXMfhQ569uY4odiQbVN8Rt'
42-
self.nodes[1].importprivkey(non_hd_key)
43+
wallet_importprivkey(self.nodes[1], non_hd_key, "now")
4344

4445
# This should be enough to keep the master key and the non-HD key
4546
self.nodes[1].backupwallet(self.nodes[1].datadir_path / "hd.bak")

test/functional/wallet_importprunedfunds.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from test_framework.util import (
1616
assert_equal,
1717
assert_raises_rpc_error,
18+
wallet_importprivkey,
1819
)
1920
from test_framework.wallet_util import generate_keypair
2021

@@ -38,7 +39,7 @@ def run_test(self):
3839
# privkey
3940
address3_privkey, address3_pubkey = generate_keypair(wif=True)
4041
address3 = key_to_p2wpkh(address3_pubkey)
41-
self.nodes[0].importprivkey(address3_privkey)
42+
wallet_importprivkey(self.nodes[0], address3_privkey, "now")
4243

4344
# Check only one address
4445
address_info = self.nodes[0].getaddressinfo(address1)
@@ -95,7 +96,7 @@ def run_test(self):
9596

9697
# Import with private key with no rescan
9798
w1 = self.nodes[1].get_wallet_rpc(self.default_wallet_name)
98-
w1.importprivkey(privkey=address3_privkey, rescan=False)
99+
wallet_importprivkey(w1, address3_privkey, "now")
99100
w1.importprunedfunds(rawtxn3, proof3)
100101
assert [tx for tx in w1.listtransactions() if tx['txid'] == txnid3]
101102
balance3 = w1.getbalance()

test/functional/wallet_listsinceblock.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
assert_array_result,
1414
assert_equal,
1515
assert_raises_rpc_error,
16+
wallet_importprivkey,
1617
)
1718
from test_framework.wallet_util import generate_keypair
1819

@@ -227,10 +228,10 @@ def test_double_spend(self):
227228
address = key_to_p2wpkh(pubkey)
228229
self.nodes[2].sendtoaddress(address, 10)
229230
self.generate(self.nodes[2], 6)
230-
self.nodes[2].importprivkey(privkey)
231+
wallet_importprivkey(self.nodes[2], privkey, "now")
231232
utxos = self.nodes[2].listunspent()
232233
utxo = [u for u in utxos if u["address"] == address][0]
233-
self.nodes[1].importprivkey(privkey)
234+
wallet_importprivkey(self.nodes[1], privkey, "now")
234235

235236
# Split network into two
236237
self.split_network()

0 commit comments

Comments
 (0)