6
6
7
7
Test various backwards compatibility scenarios. Download the previous node binaries:
8
8
9
- contrib/devtools/previous_release.sh -b v0.19.0.1 v0.18.1 v0.17.1
9
+ contrib/devtools/previous_release.sh -b v0.19.1 v0.18.1 v0.17.1 v0.16.3 v0.15.2
10
+
11
+ v0.15.2 is not required by this test, but it is used in wallet_upgradewallet.py.
12
+ Due to a hardfork in regtest, it can't be used to sync nodes.
13
+
10
14
11
15
Due to RPC changes introduced in various versions the below tests
12
16
won't work for older versions without some patches or workarounds.
22
26
from test_framework .descriptors import descsum_create
23
27
24
28
from test_framework .util import (
29
+ adjust_bitcoin_conf_for_pre_17 ,
25
30
assert_equal ,
26
31
sync_blocks ,
27
32
sync_mempools ,
31
36
class BackwardsCompatibilityTest (BitcoinTestFramework ):
32
37
def set_test_params (self ):
33
38
self .setup_clean_chain = True
34
- self .num_nodes = 5
39
+ self .num_nodes = 6
35
40
# Add new version after each release:
36
41
self .extra_args = [
37
42
["-addresstype=bech32" ], # Pre-release: use to mine blocks
38
43
["-nowallet" , "-walletrbf=1" , "-addresstype=bech32" ], # Pre-release: use to receive coins, swap wallets, etc
39
- ["-nowallet" , "-walletrbf=1" , "-addresstype=bech32" ], # v0.19.0. 1
44
+ ["-nowallet" , "-walletrbf=1" , "-addresstype=bech32" ], # v0.19.1
40
45
["-nowallet" , "-walletrbf=1" , "-addresstype=bech32" ], # v0.18.1
41
- ["-nowallet" , "-walletrbf=1" , "-addresstype=bech32" ] # v0.17.1
46
+ ["-nowallet" , "-walletrbf=1" , "-addresstype=bech32" ], # v0.17.1
47
+ ["-nowallet" , "-walletrbf=1" , "-addresstype=bech32" ], # v0.16.3
42
48
]
43
49
44
50
def skip_test_if_missing_module (self ):
@@ -49,10 +55,13 @@ def setup_nodes(self):
49
55
self .add_nodes (self .num_nodes , extra_args = self .extra_args , versions = [
50
56
None ,
51
57
None ,
52
- 190001 ,
58
+ 190100 ,
53
59
180100 ,
54
60
170100 ,
61
+ 160300 ,
55
62
])
63
+ # adapt bitcoin.conf, because older bitcoind's don't recognize config sections
64
+ adjust_bitcoin_conf_for_pre_17 (self .nodes [5 ].bitcoinconf )
56
65
57
66
self .start_nodes ()
58
67
@@ -65,10 +74,11 @@ def run_test(self):
65
74
res = self .nodes [self .num_nodes - 1 ].getblockchaininfo ()
66
75
assert_equal (res ['blocks' ], 101 )
67
76
68
- node_master = self .nodes [self .num_nodes - 4 ]
69
- node_v19 = self .nodes [self .num_nodes - 3 ]
70
- node_v18 = self .nodes [self .num_nodes - 2 ]
71
- node_v17 = self .nodes [self .num_nodes - 1 ]
77
+ node_master = self .nodes [self .num_nodes - 5 ]
78
+ node_v19 = self .nodes [self .num_nodes - 4 ]
79
+ node_v18 = self .nodes [self .num_nodes - 3 ]
80
+ node_v17 = self .nodes [self .num_nodes - 2 ]
81
+ node_v16 = self .nodes [self .num_nodes - 1 ]
72
82
73
83
self .log .info ("Test wallet backwards compatibility..." )
74
84
# Create a number of wallets and open them in older versions:
@@ -167,13 +177,21 @@ def run_test(self):
167
177
node_v19_wallets_dir = os .path .join (node_v19 .datadir , "regtest/wallets" )
168
178
node_v18_wallets_dir = os .path .join (node_v18 .datadir , "regtest/wallets" )
169
179
node_v17_wallets_dir = os .path .join (node_v17 .datadir , "regtest/wallets" )
180
+ node_v16_wallets_dir = os .path .join (node_v16 .datadir , "regtest" )
170
181
node_master .unloadwallet ("w1" )
171
182
node_master .unloadwallet ("w2" )
172
183
node_v19 .unloadwallet ("w1_v19" )
173
184
node_v19 .unloadwallet ("w2_v19" )
174
185
node_v18 .unloadwallet ("w1_v18" )
175
186
node_v18 .unloadwallet ("w2_v18" )
176
187
188
+ # Copy wallets to v0.16
189
+ for wallet in os .listdir (node_master_wallets_dir ):
190
+ shutil .copytree (
191
+ os .path .join (node_master_wallets_dir , wallet ),
192
+ os .path .join (node_v16_wallets_dir , wallet )
193
+ )
194
+
177
195
# Copy wallets to v0.17
178
196
for wallet in os .listdir (node_master_wallets_dir ):
179
197
shutil .copytree (
@@ -292,10 +310,17 @@ def run_test(self):
292
310
# assert_raises_rpc_error(-4, "Wallet loading failed.", node_v17.loadwallet, 'w3_v18')
293
311
294
312
# Instead, we stop node and try to launch it with the wallet:
295
- self .stop_node (self . num_nodes - 1 )
313
+ self .stop_node (4 )
296
314
node_v17 .assert_start_raises_init_error (["-wallet=w3_v18" ], "Error: Error loading w3_v18: Wallet requires newer version of Bitcoin Core" )
297
315
node_v17 .assert_start_raises_init_error (["-wallet=w3" ], "Error: Error loading w3: Wallet requires newer version of Bitcoin Core" )
298
- self .start_node (self .num_nodes - 1 )
316
+ self .start_node (4 )
317
+
318
+ # Open most recent wallet in v0.16 (no loadwallet RPC)
319
+ self .stop_node (5 )
320
+ self .start_node (5 , extra_args = ["-wallet=w2" ])
321
+ wallet = node_v16 .get_wallet_rpc ("w2" )
322
+ info = wallet .getwalletinfo ()
323
+ assert info ['keypoolsize' ] == 1
299
324
300
325
self .log .info ("Test wallet upgrade path..." )
301
326
# u1: regular wallet, created with v0.17
0 commit comments