@@ -79,7 +79,6 @@ def run_test(self):
79
79
# RPC importdescriptors -----------------------------------------------
80
80
81
81
# # Test import fails if no descriptor present
82
- key = get_generate_key ()
83
82
self .log .info ("Import should fail if a descriptor is not provided" )
84
83
self .test_importdesc ({"timestamp" : "now" },
85
84
success = False ,
@@ -103,11 +102,12 @@ def run_test(self):
103
102
self .log .info ("Test can import same descriptor with public key twice" )
104
103
self .test_importdesc (import_request , success = True )
105
104
105
+ self .log .info ("Test can update descriptor label" )
106
+ self .test_importdesc ({** import_request , "label" : "Updated label" }, success = True )
107
+ test_address (w1 , key .p2pkh_addr , solvable = True , ismine = True , labels = ["Updated label" ])
108
+
106
109
self .log .info ("Internal addresses cannot have labels" )
107
- self .test_importdesc ({"desc" : descsum_create ("pkh(" + key .pubkey + ")" ),
108
- "timestamp" : "now" ,
109
- "internal" : True ,
110
- "label" : "Descriptor import test" },
110
+ self .test_importdesc ({** import_request , "internal" : True },
111
111
success = False ,
112
112
error_code = - 8 ,
113
113
error_message = "Internal addresses should not have a label" )
@@ -255,6 +255,39 @@ def run_test(self):
255
255
self .test_importdesc ({"desc" : descsum_create (desc ), "timestamp" : "now" , "range" : [0 , 1000001 ]},
256
256
success = False , error_code = - 8 , error_message = 'Range is too large' )
257
257
258
+ self .log .info ("Verify we can only extend descriptor's range" )
259
+ range_request = {"desc" : descsum_create (desc ), "timestamp" : "now" , "range" : [5 , 10 ], 'active' : True }
260
+ self .test_importdesc (range_request , wallet = wpriv , success = True )
261
+ assert_equal (wpriv .getwalletinfo ()['keypoolsize' ], 6 )
262
+ self .test_importdesc ({** range_request , "range" : [0 , 10 ]}, wallet = wpriv , success = True )
263
+ assert_equal (wpriv .getwalletinfo ()['keypoolsize' ], 11 )
264
+ self .test_importdesc ({** range_request , "range" : [0 , 20 ]}, wallet = wpriv , success = True )
265
+ assert_equal (wpriv .getwalletinfo ()['keypoolsize' ], 21 )
266
+ # Can keep range the same
267
+ self .test_importdesc ({** range_request , "range" : [0 , 20 ]}, wallet = wpriv , success = True )
268
+ assert_equal (wpriv .getwalletinfo ()['keypoolsize' ], 21 )
269
+
270
+ self .test_importdesc ({** range_request , "range" : [5 , 10 ]}, wallet = wpriv , success = False ,
271
+ error_code = - 8 , error_message = 'new range must include current range = [0,20]' )
272
+ self .test_importdesc ({** range_request , "range" : [0 , 10 ]}, wallet = wpriv , success = False ,
273
+ error_code = - 8 , error_message = 'new range must include current range = [0,20]' )
274
+ self .test_importdesc ({** range_request , "range" : [5 , 20 ]}, wallet = wpriv , success = False ,
275
+ error_code = - 8 , error_message = 'new range must include current range = [0,20]' )
276
+ assert_equal (wpriv .getwalletinfo ()['keypoolsize' ], 21 )
277
+
278
+ self .log .info ("Check we can change descriptor internal flag" )
279
+ self .test_importdesc ({** range_request , "range" : [0 , 20 ], "internal" : True }, wallet = wpriv , success = True )
280
+ assert_equal (wpriv .getwalletinfo ()['keypoolsize' ], 0 )
281
+ assert_raises_rpc_error (- 4 , 'This wallet has no available keys' , wpriv .getnewaddress , '' , 'p2sh-segwit' )
282
+ assert_equal (wpriv .getwalletinfo ()['keypoolsize_hd_internal' ], 21 )
283
+ wpriv .getrawchangeaddress ('p2sh-segwit' )
284
+
285
+ self .test_importdesc ({** range_request , "range" : [0 , 20 ], "internal" : False }, wallet = wpriv , success = True )
286
+ assert_equal (wpriv .getwalletinfo ()['keypoolsize' ], 21 )
287
+ wpriv .getnewaddress ('' , 'p2sh-segwit' )
288
+ assert_equal (wpriv .getwalletinfo ()['keypoolsize_hd_internal' ], 0 )
289
+ assert_raises_rpc_error (- 4 , 'This wallet has no available keys' , wpriv .getrawchangeaddress , 'p2sh-segwit' )
290
+
258
291
# Make sure ranged imports import keys in order
259
292
w1 = self .nodes [1 ].get_wallet_rpc ('w1' )
260
293
self .log .info ('Key ranges should be imported in order' )
@@ -306,6 +339,18 @@ def run_test(self):
306
339
w1 .keypoolrefill ()
307
340
assert_equal (w1 .getwalletinfo ()['keypoolsize' ], 5 * 3 )
308
341
342
+ self .log .info ("Check we can change next_index" )
343
+ # go back and forth with next_index
344
+ for i in [4 , 0 , 2 , 1 , 3 ]:
345
+ self .test_importdesc ({'desc' : descsum_create ('wpkh([80002067/0h/0h]' + xpub + '/*)' ),
346
+ 'active' : True ,
347
+ 'range' : [0 , 9 ],
348
+ 'next_index' : i ,
349
+ 'timestamp' : 'now'
350
+ },
351
+ success = True )
352
+ assert_equal (w1 .getnewaddress ('' , 'bech32' ), addresses [i ])
353
+
309
354
# Check active=False default
310
355
self .log .info ('Check imported descriptors are not active by default' )
311
356
self .test_importdesc ({'desc' : descsum_create ('pkh([12345678/1h]' + xpub + '/*)' ),
@@ -316,6 +361,17 @@ def run_test(self):
316
361
success = True )
317
362
assert_raises_rpc_error (- 4 , 'This wallet has no available keys' , w1 .getrawchangeaddress , 'legacy' )
318
363
364
+ self .log .info ('Check can activate inactive descriptor' )
365
+ self .test_importdesc ({'desc' : descsum_create ('pkh([12345678]' + xpub + '/*)' ),
366
+ 'range' : [0 , 5 ],
367
+ 'active' : True ,
368
+ 'timestamp' : 'now' ,
369
+ 'internal' : True
370
+ },
371
+ success = True )
372
+ address = w1 .getrawchangeaddress ('legacy' )
373
+ assert_equal (address , "mpA2Wh9dvZT7yfELq1UnrUmAoc5qCkMetg" )
374
+
319
375
# # Test importing a descriptor containing a WIF private key
320
376
wif_priv = "cTe1f5rdT8A8DFgVWTjyPwACsDPJM9ff4QngFxUixCSvvbg1x6sh"
321
377
address = "2MuhcG52uHPknxDgmGPsV18jSHFBnnRgjPg"
0 commit comments