Skip to content

Commit 7366cbe

Browse files
authored
test(ICRC_Ledger): FI-1655: Add check to see if downgrade to mainnet is expected to work (dfinity#3625)
Based on the ledger version (used for stable structures migration), determine if a downgrade of the ledger to the mainnet version is expected to succeed or not.
1 parent a8dc041 commit 7366cbe

File tree

1 file changed

+52
-12
lines changed

1 file changed

+52
-12
lines changed

rs/ledger_suite/icrc1/tests/golden_state_upgrade_downgrade.rs

Lines changed: 52 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ const TRANSFER_MULTIPLIER: u64 = 1000;
3232
const APPROVE_MULTIPLIER: u64 = 100;
3333
const TRANSFER_FROM_MULTIPLIER: u64 = 10;
3434
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;
3542

3643
#[cfg(not(feature = "u256-tokens"))]
3744
type Tokens = ic_icrc1_tokens_u64::U64;
@@ -51,6 +58,7 @@ lazy_static! {
5158
Wasm::from_bytes(load_wasm_using_env_var(
5259
"CKBTC_IC_ICRC1_ARCHIVE_DEPLOYED_VERSION_WASM_PATH",
5360
)),
61+
LEDGER_VERSION_2,
5462
None,
5563
);
5664
pub static ref MAINNET_SNS_WASMS: Wasms = Wasms::new(
@@ -63,6 +71,7 @@ lazy_static! {
6371
Wasm::from_bytes(load_wasm_using_env_var(
6472
"IC_ICRC1_ARCHIVE_DEPLOYED_VERSION_WASM_PATH",
6573
)),
74+
LEDGER_VERSION_1,
6675
Some(Wasm::from_bytes(load_wasm_using_env_var(
6776
"IC_ICRC1_LEDGER_DEPLOYED_VERSION_2_WASM_PATH"
6877
))),
@@ -71,8 +80,13 @@ lazy_static! {
7180
Wasm::from_bytes(index_ng_wasm()),
7281
Wasm::from_bytes(ledger_wasm()),
7382
Wasm::from_bytes(archive_wasm()),
83+
ic_icrc1_ledger::LEDGER_VERSION,
7484
None,
7585
);
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.
7690
pub static ref BALANCES_MIGRATED_LEDGER_MODULE_HASH: Vec<u8> =
7791
hex::decode("3b03d1bb1145edbcd11101ab2788517bc0f427c3bd7b342b9e3e7f42e29d5822").unwrap();
7892
}
@@ -89,14 +103,19 @@ lazy_static! {
89103
Wasm::from_bytes(load_wasm_using_env_var(
90104
"CKETH_IC_ICRC1_ARCHIVE_DEPLOYED_VERSION_WASM_PATH",
91105
)),
106+
LEDGER_VERSION_2,
92107
None,
93108
);
94109
pub static ref MASTER_WASMS: Wasms = Wasms::new(
95110
Wasm::from_bytes(index_ng_wasm()),
96111
Wasm::from_bytes(ledger_wasm()),
97112
Wasm::from_bytes(archive_wasm()),
113+
ic_icrc1_ledger::LEDGER_VERSION,
98114
None,
99115
);
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.
100119
pub static ref BALANCES_MIGRATED_LEDGER_MODULE_HASH: Vec<u8> =
101120
hex::decode("8b2e3e596a147780b0e99ce36d0b8f1f3ba41a98b819b42980a7c08c309b44c1").unwrap();
102121
}
@@ -105,6 +124,7 @@ pub struct Wasms {
105124
index_wasm: Wasm,
106125
ledger_wasm: Wasm,
107126
archive_wasm: Wasm,
127+
ledger_version: u64,
108128
ledger_wasm_v2: Option<Wasm>,
109129
}
110130

@@ -113,12 +133,14 @@ impl Wasms {
113133
index_wasm: Wasm,
114134
ledger_wasm: Wasm,
115135
archive_wasm: Wasm,
136+
ledger_version: u64,
116137
ledger_wasm_v2: Option<Wasm>,
117138
) -> Self {
118139
Self {
119140
index_wasm,
120141
ledger_wasm,
121142
archive_wasm,
143+
ledger_version,
122144
ledger_wasm_v2,
123145
}
124146
}
@@ -229,7 +251,7 @@ impl LedgerSuiteConfig {
229251
));
230252
}
231253
// Downgrade back to the mainnet canister versions
232-
self.upgrade_to_mainnet(state_machine);
254+
self.downgrade_to_mainnet(state_machine);
233255
if self.extended_testing {
234256
let _ = LedgerState::verify_state_and_generate_transactions(
235257
state_machine,
@@ -347,22 +369,40 @@ impl LedgerSuiteConfig {
347369
}
348370
}
349371

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
352374
self.upgrade_index_or_panic(state_machine, &self.mainnet_wasms.index_wasm);
353375
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(
361379
state_machine,
362380
&self.mainnet_wasms.ledger_wasm,
363381
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+
}
366406
self.upgrade_archives_or_panic(state_machine, &self.mainnet_wasms.archive_wasm);
367407
self.upgrade_archives_or_panic(state_machine, &self.mainnet_wasms.archive_wasm);
368408
}

0 commit comments

Comments
 (0)