Skip to content

Commit 73f1dbd

Browse files
chore: add V3 to ICRC Ledger canister revisions and update mainnet to V4 (dfinity#3570)
V3 was added and mainnet changed to V4. The tests that require more than one migration steps cannot be performed with mainnet anymore (no migration happens) and were changed to V3. Upgrading from u64 to u256 is not possible anymore, however it is not caught by the upgrade. In order to enable this test we need to add additional check to mainnet canisters.
1 parent 623b155 commit 73f1dbd

File tree

6 files changed

+89
-57
lines changed

6 files changed

+89
-57
lines changed

WORKSPACE.bazel

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@ canisters(
2929
"ck_btc_ledger_v1": "ic-icrc1-ledger.wasm.gz",
3030
"ck_btc_ledger_v2": "ic-icrc1-ledger.wasm.gz",
3131
"ck_btc_ledger_v2_noledgerversion": "ic-icrc1-ledger.wasm.gz",
32+
"ck_btc_ledger_v3": "ic-icrc1-ledger.wasm.gz",
3233
"ck_btc_index": "ic-icrc1-index-ng.wasm.gz",
3334
"ck_eth_archive": "ic-icrc1-archive-u256.wasm.gz",
3435
"ck_eth_ledger": "ic-icrc1-ledger-u256.wasm.gz",
3536
"ck_eth_ledger_v1": "ic-icrc1-ledger-u256.wasm.gz",
3637
"ck_eth_ledger_v2": "ic-icrc1-ledger-u256.wasm.gz",
3738
"ck_eth_ledger_v2_noledgerversion": "ic-icrc1-ledger-u256.wasm.gz",
39+
"ck_eth_ledger_v3": "ic-icrc1-ledger-u256.wasm.gz",
3840
"ck_eth_index": "ic-icrc1-index-ng-u256.wasm.gz",
3941
"sns_root": "sns-root-canister.wasm.gz",
4042
"sns_governance": "sns-governance-canister.wasm.gz",
@@ -61,12 +63,14 @@ canisters(
6163
"ck_btc_ledger_v1": "mainnet_ckbtc_ic-icrc1-ledger-v1",
6264
"ck_btc_ledger_v2": "mainnet_ckbtc_ic-icrc1-ledger-v2",
6365
"ck_btc_ledger_v2_noledgerversion": "mainnet_ckbtc_ic-icrc1-ledger-v2-noledgerversion",
66+
"ck_btc_ledger_v3": "mainnet_ckbtc_ic-icrc1-ledger-v3",
6467
"ck_btc_index": "mainnet_ckbtc-index-ng",
6568
"ck_eth_archive": "mainnet_cketh_ic-icrc1-archive-u256",
6669
"ck_eth_ledger": "mainnet_cketh_ic-icrc1-ledger-u256",
6770
"ck_eth_ledger_v1": "mainnet_cketh_ic-icrc1-ledger-u256-v1",
6871
"ck_eth_ledger_v2": "mainnet_cketh_ic-icrc1-ledger-u256-v2",
6972
"ck_eth_ledger_v2_noledgerversion": "mainnet_cketh_ic-icrc1-ledger-u256-v2-noledgerversion",
73+
"ck_eth_ledger_v3": "mainnet_cketh_ic-icrc1-ledger-u256-v3",
7074
"ck_eth_index": "mainnet_cketh-index-ng",
7175
"sns_root": "mainnet_sns-root-canister",
7276
"sns_governance": "mainnet_sns-governance-canister",

mainnet-canister-revisions.json

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
"sha256": "92622a35dc03651a046ef02d48c3d3c3383a25307d719e4a7657601486fa9f4f"
55
},
66
"ck_btc_archive": {
7-
"rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a",
8-
"sha256": "f94cf1db965b7042197e5894fef54f5f413bb2ebc607ff0fb59c9d4dfd3babea"
7+
"rev": "c741e349451edf0c9792149ad439bb32a0161371",
8+
"sha256": "2b0970a84976bc2eb9591b68d44501566937994fa5594972f8aac9c8b058672f"
99
},
1010
"ck_btc_index": {
11-
"rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a",
12-
"sha256": "2adc74fe5667f26ea4c4006309d99b1dfa71787aa43a5c168cb08ec725677996"
11+
"rev": "c741e349451edf0c9792149ad439bb32a0161371",
12+
"sha256": "e155db9d06b6147ece4f9defe599844f132a7db21693265671aa6ac60912935f"
1313
},
1414
"ck_btc_ledger": {
15-
"rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a",
16-
"sha256": "25071c2c55ad4571293e00d8e277f442aec7aed88109743ac52df3125209ff45"
15+
"rev": "c741e349451edf0c9792149ad439bb32a0161371",
16+
"sha256": "3b03d1bb1145edbcd11101ab2788517bc0f427c3bd7b342b9e3e7f42e29d5822"
1717
},
1818
"ck_btc_ledger_v1": {
1919
"rev": "d4ee25b0865e89d3eaac13a60f0016d5e3296b31",
@@ -27,17 +27,21 @@
2727
"rev": "aba60ffbc46acfc8990bf4d5685c1360bd7026b9",
2828
"sha256": "67cfcbabb79e683b6fc855450d9972c9efaa7a1cd28c6387965616fbead191ea"
2929
},
30-
"ck_eth_archive": {
30+
"ck_btc_ledger_v3": {
3131
"rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a",
32-
"sha256": "2d25f7831894100d48aa9043c65e87c293487523f0958c15760027d004fbbda9"
32+
"sha256": "25071c2c55ad4571293e00d8e277f442aec7aed88109743ac52df3125209ff45"
33+
},
34+
"ck_eth_archive": {
35+
"rev": "c741e349451edf0c9792149ad439bb32a0161371",
36+
"sha256": "d2170c173f814fafc909737ec82f098714d44aa98ebd4f6dbf4e175160e1200f"
3337
},
3438
"ck_eth_index": {
35-
"rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a",
36-
"sha256": "d615ea66e7ec7e39a3912889ffabfabb9b6f200584b9656789c3578fae1afac7"
39+
"rev": "c741e349451edf0c9792149ad439bb32a0161371",
40+
"sha256": "d21d059962144c835c8b291af3033e1f1c835af2350a5cd92b3cf8d687a1a7be"
3741
},
3842
"ck_eth_ledger": {
39-
"rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a",
40-
"sha256": "9637743e1215a4db376a62ee807a0986faf20833be2b332df09b3d5dbdd7339e"
43+
"rev": "c741e349451edf0c9792149ad439bb32a0161371",
44+
"sha256": "8b2e3e596a147780b0e99ce36d0b8f1f3ba41a98b819b42980a7c08c309b44c1"
4145
},
4246
"ck_eth_ledger_v1": {
4347
"rev": "d4ee25b0865e89d3eaac13a60f0016d5e3296b31",
@@ -51,6 +55,10 @@
5155
"rev": "aba60ffbc46acfc8990bf4d5685c1360bd7026b9",
5256
"sha256": "73d0c5f057aaf33004218ce588780e1b454c717c702b1cf47532f32c23515f1e"
5357
},
58+
"ck_eth_ledger_v3": {
59+
"rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a",
60+
"sha256": "9637743e1215a4db376a62ee807a0986faf20833be2b332df09b3d5dbdd7339e"
61+
},
5462
"cycles-minting": {
5563
"rev": "b5192581ccd35b67fe5a1f795ead9cbcd25956d6",
5664
"sha256": "11c8dedd11741f05990498c90f925e9e37ad60647a65ef47caa59cdba234be6f"
@@ -88,20 +96,20 @@
8896
"sha256": "68f9fb37341d14a35735e10a0eb2471721b4cd75b6552ac11124aac559b05736"
8997
},
9098
"sns_archive": {
91-
"rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a",
92-
"sha256": "f94cf1db965b7042197e5894fef54f5f413bb2ebc607ff0fb59c9d4dfd3babea"
99+
"rev": "c741e349451edf0c9792149ad439bb32a0161371",
100+
"sha256": "2b0970a84976bc2eb9591b68d44501566937994fa5594972f8aac9c8b058672f"
93101
},
94102
"sns_governance": {
95103
"rev": "a5878586e47536d4cd47f0aadb66b73df8131d2b",
96104
"sha256": "5e0547725b033e689f6c7381ca9555fbf09e5ed884178c8286b72e6b2c09e863"
97105
},
98106
"sns_index": {
99-
"rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a",
100-
"sha256": "2adc74fe5667f26ea4c4006309d99b1dfa71787aa43a5c168cb08ec725677996"
107+
"rev": "c741e349451edf0c9792149ad439bb32a0161371",
108+
"sha256": "e155db9d06b6147ece4f9defe599844f132a7db21693265671aa6ac60912935f"
101109
},
102110
"sns_ledger": {
103-
"rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a",
104-
"sha256": "25071c2c55ad4571293e00d8e277f442aec7aed88109743ac52df3125209ff45"
111+
"rev": "c741e349451edf0c9792149ad439bb32a0161371",
112+
"sha256": "3b03d1bb1145edbcd11101ab2788517bc0f427c3bd7b342b9e3e7f42e29d5822"
105113
},
106114
"sns_ledger_v2": {
107115
"rev": "e54d3fa34ded227c885d04e64505fa4b5d564743",

rs/ledger_suite/icrc1/ledger/BUILD.bazel

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,10 +281,12 @@ rust_test(
281281
"@mainnet_ckbtc_ic-icrc1-ledger-v1//file",
282282
"@mainnet_ckbtc_ic-icrc1-ledger-v2-noledgerversion//file",
283283
"@mainnet_ckbtc_ic-icrc1-ledger-v2//file",
284+
"@mainnet_ckbtc_ic-icrc1-ledger-v3//file",
284285
"@mainnet_ckbtc_ic-icrc1-ledger//file",
285286
"@mainnet_cketh_ic-icrc1-ledger-u256-v1//file",
286287
"@mainnet_cketh_ic-icrc1-ledger-u256-v2-noledgerversion//file",
287288
"@mainnet_cketh_ic-icrc1-ledger-u256-v2//file",
289+
"@mainnet_cketh_ic-icrc1-ledger-u256-v3//file",
288290
"@mainnet_cketh_ic-icrc1-ledger-u256//file",
289291
"@mainnet_ic-icrc1-ledger//file",
290292
],
@@ -294,10 +296,12 @@ rust_test(
294296
"CKBTC_IC_ICRC1_LEDGER_V1_VERSION_WASM_PATH": "$(rootpath @mainnet_ckbtc_ic-icrc1-ledger-v1//file)",
295297
"CKBTC_IC_ICRC1_LEDGER_V2_VERSION_WASM_PATH": "$(rootpath @mainnet_ckbtc_ic-icrc1-ledger-v2//file)",
296298
"CKBTC_IC_ICRC1_LEDGER_V2_NOLEDGERLEVRION_VERSION_WASM_PATH": "$(rootpath @mainnet_ckbtc_ic-icrc1-ledger-v2-noledgerversion//file)",
299+
"CKBTC_IC_ICRC1_LEDGER_V3_VERSION_WASM_PATH": "$(rootpath @mainnet_ckbtc_ic-icrc1-ledger-v3//file)",
297300
"CKETH_IC_ICRC1_LEDGER_DEPLOYED_VERSION_WASM_PATH": "$(rootpath @mainnet_cketh_ic-icrc1-ledger-u256//file)",
298301
"CKETH_IC_ICRC1_LEDGER_V1_VERSION_WASM_PATH": "$(rootpath @mainnet_cketh_ic-icrc1-ledger-u256-v1//file)",
299302
"CKETH_IC_ICRC1_LEDGER_V2_VERSION_WASM_PATH": "$(rootpath @mainnet_cketh_ic-icrc1-ledger-u256-v2//file)",
300303
"CKETH_IC_ICRC1_LEDGER_V2_NOLEDGERLEVRION_VERSION_WASM_PATH": "$(rootpath @mainnet_cketh_ic-icrc1-ledger-u256-v2-noledgerversion//file)",
304+
"CKETH_IC_ICRC1_LEDGER_V3_VERSION_WASM_PATH": "$(rootpath @mainnet_cketh_ic-icrc1-ledger-u256-v3//file)",
301305
"IC_ICRC1_ARCHIVE_WASM_PATH": "$(rootpath //rs/ledger_suite/icrc1/archive:archive_canister" + name_suffix + ".wasm.gz)",
302306
"IC_ICRC1_LEDGER_DEPLOYED_VERSION_WASM_PATH": "$(rootpath @mainnet_ic-icrc1-ledger//file)",
303307
"IC_ICRC1_LEDGER_ICRC3_COMPATIBLE_DATA_CERTIFICATE_WASM_PATH": "$(rootpath //rs/ledger_suite/icrc1/ledger:ledger_canister_icrc3_compatible_data_certificate)",

rs/ledger_suite/icrc1/ledger/tests/tests.rs

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,14 @@ fn ledger_mainnet_v2_noledgerversion_wasm() -> Vec<u8> {
9393
mainnet_wasm
9494
}
9595

96+
fn ledger_mainnet_v3_wasm() -> Vec<u8> {
97+
#[cfg(not(feature = "u256-tokens"))]
98+
let mainnet_wasm = ledger_mainnet_v3_u64_wasm();
99+
#[cfg(feature = "u256-tokens")]
100+
let mainnet_wasm = ledger_mainnet_v3_u256_wasm();
101+
mainnet_wasm
102+
}
103+
96104
fn ledger_mainnet_v1_wasm() -> Vec<u8> {
97105
#[cfg(not(feature = "u256-tokens"))]
98106
let mainnet_wasm = ledger_mainnet_v1_u64_wasm();
@@ -119,6 +127,11 @@ fn ledger_mainnet_v2_noledgerversion_u64_wasm() -> Vec<u8> {
119127
.unwrap()
120128
}
121129

130+
#[cfg(not(feature = "u256-tokens"))]
131+
fn ledger_mainnet_v3_u64_wasm() -> Vec<u8> {
132+
std::fs::read(std::env::var("CKBTC_IC_ICRC1_LEDGER_V3_VERSION_WASM_PATH").unwrap()).unwrap()
133+
}
134+
122135
#[cfg(not(feature = "u256-tokens"))]
123136
fn ledger_mainnet_v1_u64_wasm() -> Vec<u8> {
124137
std::fs::read(std::env::var("CKBTC_IC_ICRC1_LEDGER_V1_VERSION_WASM_PATH").unwrap()).unwrap()
@@ -142,6 +155,11 @@ fn ledger_mainnet_v2_noledgerversion_u256_wasm() -> Vec<u8> {
142155
.unwrap()
143156
}
144157

158+
#[cfg(feature = "u256-tokens")]
159+
fn ledger_mainnet_v3_u256_wasm() -> Vec<u8> {
160+
std::fs::read(std::env::var("CKETH_IC_ICRC1_LEDGER_V3_VERSION_WASM_PATH").unwrap()).unwrap()
161+
}
162+
145163
#[cfg(feature = "u256-tokens")]
146164
fn ledger_mainnet_v1_u256_wasm() -> Vec<u8> {
147165
std::fs::read(std::env::var("CKETH_IC_ICRC1_LEDGER_V1_VERSION_WASM_PATH").unwrap()).unwrap()
@@ -492,15 +510,20 @@ fn test_block_transformation() {
492510

493511
#[test]
494512
fn icrc1_test_upgrade_serialization_from_mainnet() {
495-
icrc1_test_upgrade_serialization(ledger_mainnet_wasm());
513+
icrc1_test_upgrade_serialization(ledger_mainnet_wasm(), false);
496514
}
497515

498516
#[test]
499517
fn icrc1_test_upgrade_serialization_from_v2() {
500-
icrc1_test_upgrade_serialization(ledger_mainnet_v2_wasm());
518+
icrc1_test_upgrade_serialization(ledger_mainnet_v2_wasm(), true);
501519
}
502520

503-
fn icrc1_test_upgrade_serialization(ledger_mainnet_wasm: Vec<u8>) {
521+
#[test]
522+
fn icrc1_test_upgrade_serialization_from_v3() {
523+
icrc1_test_upgrade_serialization(ledger_mainnet_v3_wasm(), true);
524+
}
525+
526+
fn icrc1_test_upgrade_serialization(ledger_mainnet_wasm: Vec<u8>, mainnet_on_prev_version: bool) {
504527
let minter = Arc::new(minter_identity());
505528
let builder = LedgerInitArgsBuilder::with_symbol_and_name(TOKEN_SYMBOL, TOKEN_NAME)
506529
.with_minting_account(minter.sender().unwrap())
@@ -514,14 +537,14 @@ fn icrc1_test_upgrade_serialization(ledger_mainnet_wasm: Vec<u8>) {
514537
upgrade_args,
515538
minter,
516539
true,
517-
true,
540+
mainnet_on_prev_version,
518541
);
519542
}
520543

521544
#[test]
522-
fn icrc1_test_multi_step_migration_from_mainnet() {
545+
fn icrc1_test_multi_step_migration_from_v3() {
523546
ic_ledger_suite_state_machine_tests::icrc1_test_multi_step_migration(
524-
ledger_mainnet_wasm(),
547+
ledger_mainnet_v3_wasm(),
525548
ledger_wasm_lowupgradeinstructionlimits(),
526549
encode_init_args,
527550
);
@@ -552,14 +575,14 @@ fn icrc1_test_downgrade_from_incompatible_version() {
552575
ledger_wasm_nextledgerversion(),
553576
ledger_wasm(),
554577
encode_init_args,
555-
false,
578+
true,
556579
);
557580
}
558581

559582
#[test]
560-
fn icrc1_test_stable_migration_endpoints_disabled_from_mainnet() {
583+
fn icrc1_test_stable_migration_endpoints_disabled_from_v3() {
561584
ic_ledger_suite_state_machine_tests::icrc1_test_stable_migration_endpoints_disabled(
562-
ledger_mainnet_wasm(),
585+
ledger_mainnet_v3_wasm(),
563586
ledger_wasm_lowupgradeinstructionlimits(),
564587
encode_init_args,
565588
vec![],
@@ -577,9 +600,9 @@ fn icrc1_test_stable_migration_endpoints_disabled_from_v2() {
577600
}
578601

579602
#[test]
580-
fn icrc1_test_incomplete_migration_from_mainnet() {
603+
fn icrc1_test_incomplete_migration_from_v3() {
581604
ic_ledger_suite_state_machine_tests::test_incomplete_migration(
582-
ledger_mainnet_wasm(),
605+
ledger_mainnet_v3_wasm(),
583606
ledger_wasm_lowupgradeinstructionlimits(),
584607
encode_init_args,
585608
);
@@ -604,9 +627,9 @@ fn icrc1_test_incomplete_migration_from_v2_noledgerversion() {
604627
}
605628

606629
#[test]
607-
fn icrc1_test_incomplete_migration_to_current_from_mainnet() {
630+
fn icrc1_test_incomplete_migration_to_current_from_v3() {
608631
ic_ledger_suite_state_machine_tests::test_incomplete_migration_to_current(
609-
ledger_mainnet_wasm(),
632+
ledger_mainnet_v3_wasm(),
610633
ledger_wasm_lowupgradeinstructionlimits(),
611634
encode_init_args,
612635
);
@@ -631,9 +654,9 @@ fn icrc1_test_incomplete_migration_to_current_from_v2_noledgerversion() {
631654
}
632655

633656
#[test]
634-
fn icrc1_test_migration_resumes_from_frozen_from_mainnet() {
657+
fn icrc1_test_migration_resumes_from_frozen_from_v3() {
635658
ic_ledger_suite_state_machine_tests::test_migration_resumes_from_frozen(
636-
ledger_mainnet_wasm(),
659+
ledger_mainnet_v3_wasm(),
637660
ledger_wasm_lowupgradeinstructionlimits(),
638661
encode_init_args,
639662
);
@@ -649,9 +672,9 @@ fn icrc1_test_migration_resumes_from_frozen_from_v2() {
649672
}
650673

651674
#[test]
652-
fn icrc1_test_metrics_while_migrating_from_mainnet() {
675+
fn icrc1_test_metrics_while_migrating_from_v3() {
653676
ic_ledger_suite_state_machine_tests::test_metrics_while_migrating(
654-
ledger_mainnet_wasm(),
677+
ledger_mainnet_v3_wasm(),
655678
ledger_wasm_lowupgradeinstructionlimits(),
656679
encode_init_args,
657680
);
@@ -1963,6 +1986,8 @@ mod incompatible_token_type_upgrade {
19631986
.unwrap()
19641987
}
19651988

1989+
// TODO: enable and rewrite when FI-1653 is fixed.
1990+
#[ignore]
19661991
#[test]
19671992
fn should_successfully_upgrade_ledger_from_u64_to_u256_to_u64_wasm() {
19681993
let env = StateMachine::new();

rs/ledger_suite/icrc1/tests/golden_state_upgrade_downgrade.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use ic_ledger_suite_state_machine_tests::{
1414
wait_ledger_ready, TransactionGenerationParameters,
1515
};
1616
use ic_nns_test_utils_golden_nns_state::new_state_machine_with_golden_fiduciary_state_or_panic;
17-
use ic_state_machine_tests::{ErrorCode, StateMachine, UserError};
17+
use ic_state_machine_tests::{StateMachine, UserError};
1818
use icrc_ledger_types::icrc1::account::Account;
1919
use lazy_static::lazy_static;
2020
use std::str::FromStr;
@@ -351,19 +351,18 @@ impl LedgerSuiteConfig {
351351
// Upgrade each canister twice to exercise pre-upgrade
352352
self.upgrade_index_or_panic(state_machine, &self.mainnet_wasms.index_wasm);
353353
self.upgrade_index_or_panic(state_machine, &self.mainnet_wasms.index_wasm);
354-
match self.upgrade_ledger(
354+
self.upgrade_ledger(
355355
state_machine,
356356
&self.mainnet_wasms.ledger_wasm,
357357
ExpectMigration::No,
358-
) {
359-
Ok(_) => {
360-
panic!("should not successfully downgrade ledger");
361-
}
362-
Err(user_error) => user_error.assert_contains(
363-
ErrorCode::CanisterCalledTrap,
364-
"Trying to downgrade from incompatible version",
365-
),
366-
}
358+
)
359+
.expect("should downgrade to mainnet ledger version");
360+
self.upgrade_ledger(
361+
state_machine,
362+
&self.mainnet_wasms.ledger_wasm,
363+
ExpectMigration::No,
364+
)
365+
.expect("should downgrade to mainnet ledger version");
367366
self.upgrade_archives_or_panic(state_machine, &self.mainnet_wasms.archive_wasm);
368367
self.upgrade_archives_or_panic(state_machine, &self.mainnet_wasms.archive_wasm);
369368
}

rs/ledger_suite/icrc1/tests/upgrade_downgrade.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,20 +77,12 @@ fn should_upgrade_and_downgrade_ledger_canister_suite() {
7777
)
7878
.unwrap();
7979

80-
match env.upgrade_canister(
80+
env.upgrade_canister(
8181
ledger_id,
8282
ledger_mainnet_wasm(),
8383
Encode!(&ledger_upgrade_arg).unwrap(),
84-
) {
85-
Ok(_) => {
86-
panic!("Upgrade to mainnet should fail!")
87-
}
88-
Err(e) => {
89-
assert!(e
90-
.description()
91-
.contains("Trying to downgrade from incompatible version"))
92-
}
93-
};
84+
)
85+
.unwrap();
9486
}
9587

9688
fn default_archive_options() -> ArchiveOptions {

0 commit comments

Comments
 (0)