1414 assert_raises_rpc_error ,
1515 set_node_times ,
1616)
17+ from test_framework .wallet_util import (
18+ get_generate_key ,
19+ )
1720
1821
1922class 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
171210if __name__ == '__main__' :
172211 TransactionTimeRescanTest ().main ()
0 commit comments