@@ -32,6 +32,13 @@ const TRANSFER_MULTIPLIER: u64 = 1000;
32
32
const APPROVE_MULTIPLIER : u64 = 100 ;
33
33
const TRANSFER_FROM_MULTIPLIER : u64 = 10 ;
34
34
const BURN_MULTIPLIER : u64 = 1 ;
35
+ #[ cfg( not( feature = "u256-tokens" ) ) ]
36
+ // Corresponds to ic_icrc1_ledger::LEDGER_VERSION where allowances are migrated to
37
+ // stable structures
38
+ const LEDGER_VERSION_1 : u64 = 1 ;
39
+ // Corresponds to ic_icrc1_ledger::LEDGER_VERSION where allowances and balances are
40
+ // migrated to stable structures
41
+ const LEDGER_VERSION_2 : u64 = 2 ;
35
42
36
43
#[ cfg( not( feature = "u256-tokens" ) ) ]
37
44
type Tokens = ic_icrc1_tokens_u64:: U64 ;
@@ -51,6 +58,7 @@ lazy_static! {
51
58
Wasm :: from_bytes( load_wasm_using_env_var(
52
59
"CKBTC_IC_ICRC1_ARCHIVE_DEPLOYED_VERSION_WASM_PATH" ,
53
60
) ) ,
61
+ LEDGER_VERSION_2 ,
54
62
None ,
55
63
) ;
56
64
pub static ref MAINNET_SNS_WASMS : Wasms = Wasms :: new(
@@ -63,6 +71,7 @@ lazy_static! {
63
71
Wasm :: from_bytes( load_wasm_using_env_var(
64
72
"IC_ICRC1_ARCHIVE_DEPLOYED_VERSION_WASM_PATH" ,
65
73
) ) ,
74
+ LEDGER_VERSION_1 ,
66
75
Some ( Wasm :: from_bytes( load_wasm_using_env_var(
67
76
"IC_ICRC1_LEDGER_DEPLOYED_VERSION_2_WASM_PATH"
68
77
) ) ) ,
@@ -71,8 +80,13 @@ lazy_static! {
71
80
Wasm :: from_bytes( index_ng_wasm( ) ) ,
72
81
Wasm :: from_bytes( ledger_wasm( ) ) ,
73
82
Wasm :: from_bytes( archive_wasm( ) ) ,
83
+ ic_icrc1_ledger:: LEDGER_VERSION ,
74
84
None ,
75
85
) ;
86
+ // Corresponds to https://github.com/dfinity/ic/releases/tag/ledger-suite-icrc-2025-01-07
87
+ // This shall be the ledger version referenced using
88
+ // `CKBTC_IC_ICRC1_LEDGER_DEPLOYED_VERSION_WASM_PATH` and
89
+ // `IC_ICRC1_LEDGER_DEPLOYED_VERSION_WASM_PATH` above.
76
90
pub static ref BALANCES_MIGRATED_LEDGER_MODULE_HASH : Vec <u8 > =
77
91
hex:: decode( "3b03d1bb1145edbcd11101ab2788517bc0f427c3bd7b342b9e3e7f42e29d5822" ) . unwrap( ) ;
78
92
}
@@ -89,14 +103,19 @@ lazy_static! {
89
103
Wasm :: from_bytes( load_wasm_using_env_var(
90
104
"CKETH_IC_ICRC1_ARCHIVE_DEPLOYED_VERSION_WASM_PATH" ,
91
105
) ) ,
106
+ LEDGER_VERSION_2 ,
92
107
None ,
93
108
) ;
94
109
pub static ref MASTER_WASMS : Wasms = Wasms :: new(
95
110
Wasm :: from_bytes( index_ng_wasm( ) ) ,
96
111
Wasm :: from_bytes( ledger_wasm( ) ) ,
97
112
Wasm :: from_bytes( archive_wasm( ) ) ,
113
+ ic_icrc1_ledger:: LEDGER_VERSION ,
98
114
None ,
99
115
) ;
116
+ // Corresponds to https://github.com/dfinity/ic/releases/tag/ledger-suite-icrc-2025-01-07
117
+ // This shall be the ledger version referenced using
118
+ // `CKETH_IC_ICRC1_LEDGER_DEPLOYED_VERSION_WASM_PATH` above.
100
119
pub static ref BALANCES_MIGRATED_LEDGER_MODULE_HASH : Vec <u8 > =
101
120
hex:: decode( "8b2e3e596a147780b0e99ce36d0b8f1f3ba41a98b819b42980a7c08c309b44c1" ) . unwrap( ) ;
102
121
}
@@ -105,6 +124,7 @@ pub struct Wasms {
105
124
index_wasm : Wasm ,
106
125
ledger_wasm : Wasm ,
107
126
archive_wasm : Wasm ,
127
+ ledger_version : u64 ,
108
128
ledger_wasm_v2 : Option < Wasm > ,
109
129
}
110
130
@@ -113,12 +133,14 @@ impl Wasms {
113
133
index_wasm : Wasm ,
114
134
ledger_wasm : Wasm ,
115
135
archive_wasm : Wasm ,
136
+ ledger_version : u64 ,
116
137
ledger_wasm_v2 : Option < Wasm > ,
117
138
) -> Self {
118
139
Self {
119
140
index_wasm,
120
141
ledger_wasm,
121
142
archive_wasm,
143
+ ledger_version,
122
144
ledger_wasm_v2,
123
145
}
124
146
}
@@ -229,7 +251,7 @@ impl LedgerSuiteConfig {
229
251
) ) ;
230
252
}
231
253
// Downgrade back to the mainnet canister versions
232
- self . upgrade_to_mainnet ( state_machine) ;
254
+ self . downgrade_to_mainnet ( state_machine) ;
233
255
if self . extended_testing {
234
256
let _ = LedgerState :: verify_state_and_generate_transactions (
235
257
state_machine,
@@ -347,22 +369,40 @@ impl LedgerSuiteConfig {
347
369
}
348
370
}
349
371
350
- fn upgrade_to_mainnet ( & self , state_machine : & StateMachine ) {
351
- // Upgrade each canister twice to exercise pre-upgrade
372
+ fn downgrade_to_mainnet ( & self , state_machine : & StateMachine ) {
373
+ // Downgrade each canister twice to exercise pre-upgrade
352
374
self . upgrade_index_or_panic ( state_machine, & self . mainnet_wasms . index_wasm ) ;
353
375
self . upgrade_index_or_panic ( state_machine, & self . mainnet_wasms . index_wasm ) ;
354
- self . upgrade_ledger (
355
- state_machine,
356
- & self . mainnet_wasms . ledger_wasm ,
357
- ExpectMigration :: No ,
358
- )
359
- . expect ( "should downgrade to mainnet ledger version" ) ;
360
- self . upgrade_ledger (
376
+ let expected_downgrade_result =
377
+ self . mainnet_wasms . ledger_version == self . master_wasms . ledger_version ;
378
+ let ledger_upgrade_res = self . upgrade_ledger (
361
379
state_machine,
362
380
& self . mainnet_wasms . ledger_wasm ,
363
381
ExpectMigration :: No ,
364
- )
365
- . expect ( "should downgrade to mainnet ledger version" ) ;
382
+ ) ;
383
+ match ( expected_downgrade_result, ledger_upgrade_res) {
384
+ ( true , Ok ( _) ) => {
385
+ // Perform another downgrade to exercise the pre-upgrade
386
+ self . upgrade_ledger (
387
+ state_machine,
388
+ & self . mainnet_wasms . ledger_wasm ,
389
+ ExpectMigration :: No ,
390
+ )
391
+ . expect ( "should downgrade to mainnet ledger version" ) ;
392
+ }
393
+ ( true , Err ( e) ) => {
394
+ panic ! (
395
+ "should successfully downgrade to mainnet ledger version: {}" ,
396
+ e
397
+ ) ;
398
+ }
399
+ ( false , Ok ( _) ) => {
400
+ panic ! ( "should not successfully downgrade to mainnet ledger version" ) ;
401
+ }
402
+ ( false , Err ( _) ) => {
403
+ println ! ( "Failed to downgrade to mainnet ledger version as expected" ) ;
404
+ }
405
+ }
366
406
self . upgrade_archives_or_panic ( state_machine, & self . mainnet_wasms . archive_wasm ) ;
367
407
self . upgrade_archives_or_panic ( state_machine, & self . mainnet_wasms . archive_wasm ) ;
368
408
}
0 commit comments