14
14
assert_raises_rpc_error ,
15
15
set_node_times ,
16
16
)
17
+ from test_framework .wallet_util import (
18
+ get_generate_key ,
19
+ )
17
20
18
21
19
22
class TransactionTimeRescanTest (BitcoinTestFramework ):
@@ -23,6 +26,10 @@ def add_options(self, parser):
23
26
def set_test_params (self ):
24
27
self .setup_clean_chain = False
25
28
self .num_nodes = 3
29
+ self .extra_args = [["-keypool=400" ],
30
+ ["-keypool=400" ],
31
+ []
32
+ ]
26
33
27
34
def skip_test_if_missing_module (self ):
28
35
self .skip_if_no_wallet ()
@@ -167,6 +174,38 @@ def run_test(self):
167
174
assert_raises_rpc_error (- 8 , "Invalid stop_height" , restorewo_wallet .rescanblockchain , 1 , - 1 )
168
175
assert_raises_rpc_error (- 8 , "stop_height must be greater than start_height" , restorewo_wallet .rescanblockchain , 20 , 10 )
169
176
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 ())
170
209
171
210
if __name__ == '__main__' :
172
211
TransactionTimeRescanTest ().main ()
0 commit comments