Skip to content

Commit 6a5b348

Browse files
committed
test: test rescanning encrypted wallets
1 parent 493b813 commit 6a5b348

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

test/functional/wallet_importdescriptors.py

+28
Original file line numberDiff line numberDiff line change
@@ -667,5 +667,33 @@ def run_test(self):
667667
success=True,
668668
warnings=["Unknown output type, cannot set descriptor to active."])
669669

670+
self.log.info("Test importing a descriptor to an encrypted wallet")
671+
672+
descriptor = {"desc": descsum_create("pkh(" + xpriv + "/1h/*h)"),
673+
"timestamp": "now",
674+
"active": True,
675+
"range": [0,4000],
676+
"next_index": 4000}
677+
678+
self.nodes[0].createwallet("temp_wallet", blank=True, descriptors=True)
679+
temp_wallet = self.nodes[0].get_wallet_rpc("temp_wallet")
680+
temp_wallet.importdescriptors([descriptor])
681+
self.generatetoaddress(self.nodes[0], COINBASE_MATURITY + 1, temp_wallet.getnewaddress())
682+
self.generatetoaddress(self.nodes[0], COINBASE_MATURITY + 1, temp_wallet.getnewaddress())
683+
684+
self.nodes[0].createwallet("encrypted_wallet", blank=True, descriptors=True, passphrase="passphrase")
685+
encrypted_wallet = self.nodes[0].get_wallet_rpc("encrypted_wallet")
686+
687+
descriptor["timestamp"] = 0
688+
descriptor["next_index"] = 0
689+
690+
batch = []
691+
batch.append(encrypted_wallet.walletpassphrase.get_request("passphrase", 3))
692+
batch.append(encrypted_wallet.importdescriptors.get_request([descriptor]))
693+
694+
encrypted_wallet.batch(batch)
695+
696+
assert_equal(temp_wallet.getbalance(), encrypted_wallet.getbalance())
697+
670698
if __name__ == '__main__':
671699
ImportDescriptorsTest().main()

test/functional/wallet_transactiontime_rescan.py

+39
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
assert_raises_rpc_error,
1515
set_node_times,
1616
)
17+
from test_framework.wallet_util import (
18+
get_generate_key,
19+
)
1720

1821

1922
class TransactionTimeRescanTest(BitcoinTestFramework):
@@ -23,6 +26,10 @@ def add_options(self, parser):
2326
def set_test_params(self):
2427
self.setup_clean_chain = False
2528
self.num_nodes = 3
29+
self.extra_args = [["-keypool=400"],
30+
["-keypool=400"],
31+
[]
32+
]
2633

2734
def skip_test_if_missing_module(self):
2835
self.skip_if_no_wallet()
@@ -167,6 +174,38 @@ def run_test(self):
167174
assert_raises_rpc_error(-8, "Invalid stop_height", restorewo_wallet.rescanblockchain, 1, -1)
168175
assert_raises_rpc_error(-8, "stop_height must be greater than start_height", restorewo_wallet.rescanblockchain, 20, 10)
169176

177+
self.log.info("Test `rescanblockchain` fails when wallet is encrypted and locked")
178+
usernode.createwallet(wallet_name="enc_wallet", passphrase="passphrase")
179+
enc_wallet = usernode.get_wallet_rpc("enc_wallet")
180+
assert_raises_rpc_error(-13, "Error: Please enter the wallet passphrase with walletpassphrase first.", enc_wallet.rescanblockchain)
181+
182+
if not self.options.descriptors:
183+
self.log.info("Test rescanning an encrypted wallet")
184+
hd_seed = get_generate_key().privkey
185+
186+
usernode.createwallet(wallet_name="temp_wallet", blank=True, descriptors=False)
187+
temp_wallet = usernode.get_wallet_rpc("temp_wallet")
188+
temp_wallet.sethdseed(seed=hd_seed)
189+
190+
for i in range(399):
191+
temp_wallet.getnewaddress()
192+
193+
self.generatetoaddress(usernode, COINBASE_MATURITY + 1, temp_wallet.getnewaddress())
194+
self.generatetoaddress(usernode, COINBASE_MATURITY + 1, temp_wallet.getnewaddress())
195+
196+
minernode.createwallet("encrypted_wallet", blank=True, passphrase="passphrase", descriptors=False)
197+
encrypted_wallet = minernode.get_wallet_rpc("encrypted_wallet")
198+
199+
encrypted_wallet.walletpassphrase("passphrase", 1)
200+
encrypted_wallet.sethdseed(seed=hd_seed)
201+
202+
batch = []
203+
batch.append(encrypted_wallet.walletpassphrase.get_request("passphrase", 3))
204+
batch.append(encrypted_wallet.rescanblockchain.get_request())
205+
206+
encrypted_wallet.batch(batch)
207+
208+
assert_equal(encrypted_wallet.getbalance(), temp_wallet.getbalance())
170209

171210
if __name__ == '__main__':
172211
TransactionTimeRescanTest().main()

0 commit comments

Comments
 (0)