27
27
28
28
from test_framework .util import (
29
29
assert_equal ,
30
+ assert_raises_rpc_error ,
30
31
)
31
32
32
33
@@ -82,7 +83,7 @@ def run_test(self):
82
83
83
84
# w1: regular wallet, created on master: update this test when default
84
85
# wallets can no longer be opened by older versions.
85
- node_master .rpc . createwallet (wallet_name = "w1" )
86
+ node_master .createwallet (wallet_name = "w1" )
86
87
wallet = node_master .get_wallet_rpc ("w1" )
87
88
info = wallet .getwalletinfo ()
88
89
assert info ['private_keys_enabled' ]
@@ -127,7 +128,7 @@ def run_test(self):
127
128
# w2: wallet with private keys disabled, created on master: update this
128
129
# test when default wallets private keys disabled can no longer be
129
130
# opened by older versions.
130
- node_master .rpc . createwallet (wallet_name = "w2" , disable_private_keys = True )
131
+ node_master .createwallet (wallet_name = "w2" , disable_private_keys = True )
131
132
wallet = node_master .get_wallet_rpc ("w2" )
132
133
info = wallet .getwalletinfo ()
133
134
assert info ['private_keys_enabled' ] == False
@@ -149,7 +150,7 @@ def run_test(self):
149
150
150
151
# w3: blank wallet, created on master: update this
151
152
# test when default blank wallets can no longer be opened by older versions.
152
- node_master .rpc . createwallet (wallet_name = "w3" , blank = True )
153
+ node_master .createwallet (wallet_name = "w3" , blank = True )
153
154
wallet = node_master .get_wallet_rpc ("w3" )
154
155
info = wallet .getwalletinfo ()
155
156
assert info ['private_keys_enabled' ]
@@ -215,67 +216,89 @@ def run_test(self):
215
216
os .path .join (node_v19_wallets_dir , wallet )
216
217
)
217
218
218
- # Open the wallets in v0.19
219
- node_v19 .loadwallet ("w1" )
220
- wallet = node_v19 .get_wallet_rpc ("w1" )
221
- info = wallet .getwalletinfo ()
222
- assert info ['private_keys_enabled' ]
223
- assert info ['keypoolsize' ] > 0
224
- txs = wallet .listtransactions ()
225
- assert_equal (len (txs ), 5 )
226
- assert_equal (txs [1 ]["txid" ], tx1_id )
227
- assert_equal (txs [2 ]["walletconflicts" ], [tx1_id ])
228
- assert_equal (txs [1 ]["replaced_by_txid" ], tx2_id )
229
- assert not (txs [1 ]["abandoned" ])
230
- assert_equal (txs [1 ]["confirmations" ], - 1 )
231
- assert_equal (txs [2 ]["blockindex" ], 1 )
232
- assert txs [3 ]["abandoned" ]
233
- assert_equal (txs [4 ]["walletconflicts" ], [tx3_id ])
234
- assert_equal (txs [3 ]["replaced_by_txid" ], tx4_id )
235
- assert not (hasattr (txs [3 ], "blockindex" ))
236
-
237
- node_v19 .loadwallet ("w2" )
238
- wallet = node_v19 .get_wallet_rpc ("w2" )
239
- info = wallet .getwalletinfo ()
240
- assert info ['private_keys_enabled' ] == False
241
- assert info ['keypoolsize' ] == 0
242
-
243
- node_v19 .loadwallet ("w3" )
244
- wallet = node_v19 .get_wallet_rpc ("w3" )
245
- info = wallet .getwalletinfo ()
246
- assert info ['private_keys_enabled' ]
247
- assert info ['keypoolsize' ] == 0
248
-
249
- # Open the wallets in v0.18
250
- node_v18 .loadwallet ("w1" )
251
- wallet = node_v18 .get_wallet_rpc ("w1" )
252
- info = wallet .getwalletinfo ()
253
- assert info ['private_keys_enabled' ]
254
- assert info ['keypoolsize' ] > 0
255
- txs = wallet .listtransactions ()
256
- assert_equal (len (txs ), 5 )
257
- assert_equal (txs [1 ]["txid" ], tx1_id )
258
- assert_equal (txs [2 ]["walletconflicts" ], [tx1_id ])
259
- assert_equal (txs [1 ]["replaced_by_txid" ], tx2_id )
260
- assert not (txs [1 ]["abandoned" ])
261
- assert_equal (txs [1 ]["confirmations" ], - 1 )
262
- assert_equal (txs [2 ]["blockindex" ], 1 )
263
- assert txs [3 ]["abandoned" ]
264
- assert_equal (txs [4 ]["walletconflicts" ], [tx3_id ])
265
- assert_equal (txs [3 ]["replaced_by_txid" ], tx4_id )
266
- assert not (hasattr (txs [3 ], "blockindex" ))
267
-
268
- node_v18 .loadwallet ("w2" )
269
- wallet = node_v18 .get_wallet_rpc ("w2" )
270
- info = wallet .getwalletinfo ()
271
- assert info ['private_keys_enabled' ] == False
272
- assert info ['keypoolsize' ] == 0
273
-
274
- node_v18 .loadwallet ("w3" )
275
- wallet = node_v18 .get_wallet_rpc ("w3" )
276
- info = wallet .getwalletinfo ()
277
- assert info ['private_keys_enabled' ]
278
- assert info ['keypoolsize' ] == 0
219
+ if not self .options .descriptors :
220
+ # Descriptor wallets break compatibility, only run this test for legacy wallet
221
+ # Open the wallets in v0.19
222
+ node_v19 .loadwallet ("w1" )
223
+ wallet = node_v19 .get_wallet_rpc ("w1" )
224
+ info = wallet .getwalletinfo ()
225
+ assert info ['private_keys_enabled' ]
226
+ assert info ['keypoolsize' ] > 0
227
+ txs = wallet .listtransactions ()
228
+ assert_equal (len (txs ), 5 )
229
+ assert_equal (txs [1 ]["txid" ], tx1_id )
230
+ assert_equal (txs [2 ]["walletconflicts" ], [tx1_id ])
231
+ assert_equal (txs [1 ]["replaced_by_txid" ], tx2_id )
232
+ assert not (txs [1 ]["abandoned" ])
233
+ assert_equal (txs [1 ]["confirmations" ], - 1 )
234
+ assert_equal (txs [2 ]["blockindex" ], 1 )
235
+ assert txs [3 ]["abandoned" ]
236
+ assert_equal (txs [4 ]["walletconflicts" ], [tx3_id ])
237
+ assert_equal (txs [3 ]["replaced_by_txid" ], tx4_id )
238
+ assert not (hasattr (txs [3 ], "blockindex" ))
239
+
240
+ node_v19 .loadwallet ("w2" )
241
+ wallet = node_v19 .get_wallet_rpc ("w2" )
242
+ info = wallet .getwalletinfo ()
243
+ assert info ['private_keys_enabled' ] == False
244
+ assert info ['keypoolsize' ] == 0
245
+
246
+ node_v19 .loadwallet ("w3" )
247
+ wallet = node_v19 .get_wallet_rpc ("w3" )
248
+ info = wallet .getwalletinfo ()
249
+ assert info ['private_keys_enabled' ]
250
+ assert info ['keypoolsize' ] == 0
251
+
252
+ # Open the wallets in v0.18
253
+ node_v18 .loadwallet ("w1" )
254
+ wallet = node_v18 .get_wallet_rpc ("w1" )
255
+ info = wallet .getwalletinfo ()
256
+ assert info ['private_keys_enabled' ]
257
+ assert info ['keypoolsize' ] > 0
258
+ txs = wallet .listtransactions ()
259
+ assert_equal (len (txs ), 5 )
260
+ assert_equal (txs [1 ]["txid" ], tx1_id )
261
+ assert_equal (txs [2 ]["walletconflicts" ], [tx1_id ])
262
+ assert_equal (txs [1 ]["replaced_by_txid" ], tx2_id )
263
+ assert not (txs [1 ]["abandoned" ])
264
+ assert_equal (txs [1 ]["confirmations" ], - 1 )
265
+ assert_equal (txs [2 ]["blockindex" ], 1 )
266
+ assert txs [3 ]["abandoned" ]
267
+ assert_equal (txs [4 ]["walletconflicts" ], [tx3_id ])
268
+ assert_equal (txs [3 ]["replaced_by_txid" ], tx4_id )
269
+ assert not (hasattr (txs [3 ], "blockindex" ))
270
+
271
+ node_v18 .loadwallet ("w2" )
272
+ wallet = node_v18 .get_wallet_rpc ("w2" )
273
+ info = wallet .getwalletinfo ()
274
+ assert info ['private_keys_enabled' ] == False
275
+ assert info ['keypoolsize' ] == 0
276
+
277
+ node_v18 .loadwallet ("w3" )
278
+ wallet = node_v18 .get_wallet_rpc ("w3" )
279
+ info = wallet .getwalletinfo ()
280
+ assert info ['private_keys_enabled' ]
281
+ assert info ['keypoolsize' ] == 0
282
+
283
+ node_v17 .loadwallet ("w1" )
284
+ wallet = node_v17 .get_wallet_rpc ("w1" )
285
+ info = wallet .getwalletinfo ()
286
+ assert info ['private_keys_enabled' ]
287
+ assert info ['keypoolsize' ] > 0
288
+
289
+ node_v17 .loadwallet ("w2" )
290
+ wallet = node_v17 .get_wallet_rpc ("w2" )
291
+ info = wallet .getwalletinfo ()
292
+ assert info ['private_keys_enabled' ] == False
293
+ assert info ['keypoolsize' ] == 0
294
+ else :
295
+ # Descriptor wallets appear to be corrupted wallets to old software
296
+ assert_raises_rpc_error (- 4 , "Wallet file verification failed: wallet.dat corrupt, salvage failed" , node_v19 .loadwallet , "w1" )
297
+ assert_raises_rpc_error (- 4 , "Wallet file verification failed: wallet.dat corrupt, salvage failed" , node_v19 .loadwallet , "w2" )
298
+ assert_raises_rpc_error (- 4 , "Wallet file verification failed: wallet.dat corrupt, salvage failed" , node_v19 .loadwallet , "w3" )
299
+ assert_raises_rpc_error (- 4 , "Wallet file verification failed: wallet.dat corrupt, salvage failed" , node_v18 .loadwallet , "w1" )
300
+ assert_raises_rpc_error (- 4 , "Wallet file verification failed: wallet.dat corrupt, salvage failed" , node_v18 .loadwallet , "w2" )
301
+ assert_raises_rpc_error (- 4 , "Wallet file verification failed: wallet.dat corrupt, salvage failed" , node_v18 .loadwallet , "w3" )
279
302
280
303
# Open the wallets in v0.17
281
304
node_v17 .loadwallet ("w1_v18" )
@@ -284,39 +307,35 @@ def run_test(self):
284
307
assert info ['private_keys_enabled' ]
285
308
assert info ['keypoolsize' ] > 0
286
309
287
- node_v17 .loadwallet ("w1" )
288
- wallet = node_v17 .get_wallet_rpc ("w1" )
289
- info = wallet .getwalletinfo ()
290
- assert info ['private_keys_enabled' ]
291
- assert info ['keypoolsize' ] > 0
292
-
293
310
node_v17 .loadwallet ("w2_v18" )
294
311
wallet = node_v17 .get_wallet_rpc ("w2_v18" )
295
312
info = wallet .getwalletinfo ()
296
313
assert info ['private_keys_enabled' ] == False
297
314
assert info ['keypoolsize' ] == 0
298
315
299
- node_v17 .loadwallet ("w2" )
300
- wallet = node_v17 .get_wallet_rpc ("w2" )
301
- info = wallet .getwalletinfo ()
302
- assert info ['private_keys_enabled' ] == False
303
- assert info ['keypoolsize' ] == 0
304
-
305
316
# RPC loadwallet failure causes bitcoind to exit, in addition to the RPC
306
317
# call failure, so the following test won't work:
307
318
# assert_raises_rpc_error(-4, "Wallet loading failed.", node_v17.loadwallet, 'w3_v18')
308
319
309
320
# Instead, we stop node and try to launch it with the wallet:
310
321
self .stop_node (4 )
311
322
node_v17 .assert_start_raises_init_error (["-wallet=w3_v18" ], "Error: Error loading w3_v18: Wallet requires newer version of Bitcoin Core" )
312
- node_v17 .assert_start_raises_init_error (["-wallet=w3" ], "Error: Error loading w3: Wallet requires newer version of Bitcoin Core" )
323
+ if self .options .descriptors :
324
+ # Descriptor wallets appear to be corrupted wallets to old software
325
+ node_v17 .assert_start_raises_init_error (["-wallet=w1" ], "Error: wallet.dat corrupt, salvage failed" )
326
+ node_v17 .assert_start_raises_init_error (["-wallet=w2" ], "Error: wallet.dat corrupt, salvage failed" )
327
+ node_v17 .assert_start_raises_init_error (["-wallet=w3" ], "Error: wallet.dat corrupt, salvage failed" )
328
+ else :
329
+ node_v17 .assert_start_raises_init_error (["-wallet=w3" ], "Error: Error loading w3: Wallet requires newer version of Bitcoin Core" )
313
330
self .start_node (4 )
314
331
315
- # Open most recent wallet in v0.16 (no loadwallet RPC)
316
- self .restart_node (5 , extra_args = ["-wallet=w2" ])
317
- wallet = node_v16 .get_wallet_rpc ("w2" )
318
- info = wallet .getwalletinfo ()
319
- assert info ['keypoolsize' ] == 1
332
+ if not self .options .descriptors :
333
+ # Descriptor wallets break compatibility, only run this test for legacy wallets
334
+ # Open most recent wallet in v0.16 (no loadwallet RPC)
335
+ self .restart_node (5 , extra_args = ["-wallet=w2" ])
336
+ wallet = node_v16 .get_wallet_rpc ("w2" )
337
+ info = wallet .getwalletinfo ()
338
+ assert info ['keypoolsize' ] == 1
320
339
321
340
# Create upgrade wallet in v0.16
322
341
self .restart_node (- 1 , extra_args = ["-wallet=u1_v16" ])
0 commit comments