ICP Ledger Canister Suite Upgrades 2025-03-28

The Financial Integrations team has submitted the following proposals today, 2025-03-28 for upgrading the ICP Ledger canister suite. DFINITY plans to vote on these proposals on Monday.
ICP index (proposal 135997):

Proposal to upgrade the ICP index canister

Repository: https://github.com/dfinity/ic.git

Git hash: 3ae3649a2366aaca83404b692fc58e4c6e604a25

New compressed Wasm hash: b443df3315902404b142d60f3cfd2f580181683310f6e6321b52de297deffcda

Upgrade args hash: 0fee102bd16b053022b69f2c65fd5e2f41d150ce9c214ac8731cfaf496ebda4e

Target canister: qhbym-qaaaa-aaaaa-aaafq-cai

Previous ICP index proposal: https://dashboard.internetcomputer.org/proposal/135926


Motivation

  • Migrate ICP ledger blocks to stable structures
  • Migrate ICP archive to stable structures
  • Increase archive4 capacity to 10 GiB

Upgrade args

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
cd rs/ledger_suite/icp/index
didc encode '()' | xxd -r -p | sha256sum

Release Notes

git log --format='%C(auto) %h %s' 2fe8aefafcb2fbee6fdb2785374d5de715560269..3ae3649a2366aaca83404b692fc58e4c6e604a25 -- packages/icrc-ledger_types rs/ledger_suite/icp/index rs/ledger_suite/icp/src rs/ledger_suite/common/ledger_canister_core/src rs/ledger_suite/common/ledger_core rs/rust_canisters/http_types rs/rust_canisters/canister_log
a85b5ac152 chore(ledger_suite): clean up range utils (#4535)
219abad147 feat(ICP-Ledger): FI-1442: migrate ledger blocks to stable structures  (#3836)

Wasm Verification

Verify that the hash of the gzipped WASM matches the proposed hash.

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
"./ci/container/build-ic.sh" "--canisters"
sha256sum ./artifacts/canisters/ic-icp-index-canister.wasm.gz

ICP ledger (proposal 135998):

Proposal to upgrade the ICP ledger canister

Repository: https://github.com/dfinity/ic.git

Git hash: 3ae3649a2366aaca83404b692fc58e4c6e604a25

New compressed Wasm hash: d6129209b5178a1daf5b66f6a907bd3ddcde48dd14acd35e49791bfdfe6273d0

Upgrade args hash: 0fee102bd16b053022b69f2c65fd5e2f41d150ce9c214ac8731cfaf496ebda4e

Target canister: ryjl3-tyaaa-aaaaa-aaaba-cai

Previous ICP ledger proposal: https://dashboard.internetcomputer.org/proposal/135925


Motivation

  • Migrate ICP ledger blocks to stable structures
  • Migrate ICP archive to stable structures
  • Increase archive4 capacity to 10 GiB

Upgrade args

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
cd rs/ledger_suite/icp
didc encode '()' | xxd -r -p | sha256sum

Release Notes

git log --format='%C(auto) %h %s' 2fe8aefafcb2fbee6fdb2785374d5de715560269..3ae3649a2366aaca83404b692fc58e4c6e604a25 -- packages/icrc-ledger_types rs/ledger_suite/icp/ledger/src rs/ledger_suite/icp/src rs/ledger_suite/common/ledger_canister_core/src rs/ledger_suite/common/ledger_core/src
a85b5ac152 chore(ledger_suite): clean up range utils (#4535)
219abad147 feat(ICP-Ledger): FI-1442: migrate ledger blocks to stable structures  (#3836)

Wasm Verification

Verify that the hash of the gzipped WASM matches the proposed hash.

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
"./ci/container/build-ic.sh" "--canisters"
sha256sum ./artifacts/canisters/ledger-canister_notify-method.wasm.gz

ICP archive1 (proposal 135999):

Proposal to upgrade the ICP archive1 canister

Repository: https://github.com/dfinity/ic.git

Git hash: 3ae3649a2366aaca83404b692fc58e4c6e604a25

New compressed Wasm hash: 5bf34cb029e437c4ccb990b1595876d4c869566d66b8b58059d0ee742891c219

Upgrade args hash: 0b003d548789e4c386044000cefb3994e3aff705634bf8f9b035db681dc4c684

Target canister: qjdve-lqaaa-aaaaa-aaaeq-cai

Previous ICP archive1 proposal: https://dashboard.internetcomputer.org/proposal/135927


Motivation

  • Migrate ICP ledger blocks to stable structures
  • Migrate ICP archive to stable structures
  • Increase archive4 capacity to 10 GiB

Upgrade args

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
didc encode -d rs/ledger_suite/icp/ledger_archive.did -t '(ArchiveUpgradeArgument)' '(record { max_memory_size_bytes = null })' | xxd -r -p | sha256sum

Release Notes

git log --format='%C(auto) %h %s' 2fe8aefafcb2fbee6fdb2785374d5de715560269..3ae3649a2366aaca83404b692fc58e4c6e604a25 -- packages/icrc-ledger_types rs/ledger_suite/icp/archive rs/ledger_suite/icp/src rs/ledger_suite/common/ledger_canister_core rs/ledger_suite/common/ledger_core
a85b5ac152 chore(ledger_suite): clean up range utils (#4535)
7b7186fd91 feat(ICP-archive): migrate icp archive to stable structures (#3910)
219abad147 feat(ICP-Ledger): FI-1442: migrate ledger blocks to stable structures  (#3836)

Wasm Verification

Verify that the hash of the gzipped WASM matches the proposed hash.

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
"./ci/container/build-ic.sh" "--canisters"
sha256sum ./artifacts/canisters/ledger-archive-node-canister.wasm.gz

ICP archive2 (proposal 136000):

Proposal to upgrade the ICP archive2 canister

Repository: https://github.com/dfinity/ic.git

Git hash: 3ae3649a2366aaca83404b692fc58e4c6e604a25

New compressed Wasm hash: 5bf34cb029e437c4ccb990b1595876d4c869566d66b8b58059d0ee742891c219

Upgrade args hash: 0b003d548789e4c386044000cefb3994e3aff705634bf8f9b035db681dc4c684

Target canister: qsgjb-riaaa-aaaaa-aaaga-cai

Previous ICP archive2 proposal: https://dashboard.internetcomputer.org/proposal/135928


Motivation

  • Migrate ICP ledger blocks to stable structures
  • Migrate ICP archive to stable structures
  • Increase archive4 capacity to 10 GiB

Upgrade args

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
didc encode -d rs/ledger_suite/icp/ledger_archive.did -t '(ArchiveUpgradeArgument)' '(record { max_memory_size_bytes = null })' | xxd -r -p | sha256sum

Release Notes

git log --format='%C(auto) %h %s' 2fe8aefafcb2fbee6fdb2785374d5de715560269..3ae3649a2366aaca83404b692fc58e4c6e604a25 -- packages/icrc-ledger_types rs/ledger_suite/icp/archive rs/ledger_suite/icp/src rs/ledger_suite/common/ledger_canister_core rs/ledger_suite/common/ledger_core
a85b5ac152 chore(ledger_suite): clean up range utils (#4535)
7b7186fd91 feat(ICP-archive): migrate icp archive to stable structures (#3910)
219abad147 feat(ICP-Ledger): FI-1442: migrate ledger blocks to stable structures  (#3836)

Wasm Verification

Verify that the hash of the gzipped WASM matches the proposed hash.

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
"./ci/container/build-ic.sh" "--canisters"
sha256sum ./artifacts/canisters/ledger-archive-node-canister.wasm.gz

ICP archive3 (proposal 136001):

Proposal to upgrade the ICP archive3 canister

Repository: https://github.com/dfinity/ic.git

Git hash: 3ae3649a2366aaca83404b692fc58e4c6e604a25

New compressed Wasm hash: 5bf34cb029e437c4ccb990b1595876d4c869566d66b8b58059d0ee742891c219

Upgrade args hash: 0b003d548789e4c386044000cefb3994e3aff705634bf8f9b035db681dc4c684

Target canister: q4eej-kyaaa-aaaaa-aaaha-cai

Previous ICP archive3 proposal: https://dashboard.internetcomputer.org/proposal/135929


Motivation

  • Migrate ICP ledger blocks to stable structures
  • Migrate ICP archive to stable structures
  • Increase archive4 capacity to 10 GiB

Upgrade args

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
didc encode -d rs/ledger_suite/icp/ledger_archive.did -t '(ArchiveUpgradeArgument)' '(record { max_memory_size_bytes = null })' | xxd -r -p | sha256sum

Release Notes

git log --format='%C(auto) %h %s' 2fe8aefafcb2fbee6fdb2785374d5de715560269..3ae3649a2366aaca83404b692fc58e4c6e604a25 -- packages/icrc-ledger_types rs/ledger_suite/icp/archive rs/ledger_suite/icp/src rs/ledger_suite/common/ledger_canister_core rs/ledger_suite/common/ledger_core
a85b5ac152 chore(ledger_suite): clean up range utils (#4535)
7b7186fd91 feat(ICP-archive): migrate icp archive to stable structures (#3910)
219abad147 feat(ICP-Ledger): FI-1442: migrate ledger blocks to stable structures  (#3836)

Wasm Verification

Verify that the hash of the gzipped WASM matches the proposed hash.

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
"./ci/container/build-ic.sh" "--canisters"
sha256sum ./artifacts/canisters/ledger-archive-node-canister.wasm.gz

ICP archive4 (proposal 136002):

Proposal to upgrade the ICP archive4 canister

Repository: https://github.com/dfinity/ic.git

Git hash: 3ae3649a2366aaca83404b692fc58e4c6e604a25

New compressed Wasm hash: 5bf34cb029e437c4ccb990b1595876d4c869566d66b8b58059d0ee742891c219

Upgrade args hash: 35a5f27de59769e5c9b801611f6c12eeceda1a2a60c9377c5552b65c3e1cc56c

Target canister: q3fc5-haaaa-aaaaa-aaahq-cai

Previous ICP archive4 proposal: https://dashboard.internetcomputer.org/proposal/135930


Motivation

  • Migrate ICP ledger blocks to stable structures
  • Migrate ICP archive to stable structures
  • Increase archive4 capacity to 10 GiB

Upgrade args

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
didc encode -d rs/ledger_suite/icp/ledger_archive.did -t '(ArchiveUpgradeArgument)' '(record { max_memory_size_bytes = opt 10_737_418_240 })' | xxd -r -p | sha256sum

Release Notes

git log --format='%C(auto) %h %s' 2fe8aefafcb2fbee6fdb2785374d5de715560269..3ae3649a2366aaca83404b692fc58e4c6e604a25 -- packages/icrc-ledger_types rs/ledger_suite/icp/archive rs/ledger_suite/icp/src rs/ledger_suite/common/ledger_canister_core rs/ledger_suite/common/ledger_core
a85b5ac152 chore(ledger_suite): clean up range utils (#4535)
7b7186fd91 feat(ICP-archive): migrate icp archive to stable structures (#3910)
219abad147 feat(ICP-Ledger): FI-1442: migrate ledger blocks to stable structures  (#3836)

Wasm Verification

Verify that the hash of the gzipped WASM matches the proposed hash.

git fetch
git checkout 3ae3649a2366aaca83404b692fc58e4c6e604a25
"./ci/container/build-ic.sh" "--canisters"
sha256sum ./artifacts/canisters/ledger-archive-node-canister.wasm.gz
1 Like

proposal - 135997, 135998, 135999, 136000, 136001 – Cyberowl | CodeGov

Checks

Proposals:
135997

135998

135999

136000

136001

Vote: ADOPT
Hash Match: MATCH
Feedback: NONE
Proposer Check: MATCH
Target Canister: MATCH
Reason:
I successfully built and verified the hash. All the commit descriptions match their code changes.

Commits Summary [a85b5ac152](https://github.com/dfinity/ic/commit/a85b5ac152) Matches description of `clean up range utils`.

219abad147
Transitions the ledger from heap-based block storage to stable memory using ic-stable-structures, ensuring data persists across upgrades. It removes the old BlockData trait and introduces a new BlockDataContainer trait with global block indices.

7b7186fd91
Renames the ledger-archive-node-canister to ic-icp-archive, splitting it into a library. It replaces the old heap-based RwLock<Vec<EncodedBlock>> with stable structures such as StableLog and StableCell, adding a memory manager, versioning, and new data structures (ArchiveState and ArchiveUpgradeArgument) to handle persistence across upgrades.

If you like the review please follow:

About CodeGov…(click to expand)

CodeGov has a team of developers who review and vote independently on the following proposal topics: IC-OS Version Election, Protocol Canister Management, Subnet Management, Node Admin, and Participant Management. The CodeGov NNS known neuron is configured to follow our reviewers on these topics and Synapse on most other topics. We strive to be a credible and reliable Followee option that votes on every proposal and every proposal topic in the NNS. We also support decentralization of SNS projects such as WaterNeuron and KongSwap with a known neuron and credible Followees.

Learn more about CodeGov and it’s mission at codegov.org.

Adopt proposal 135997

Proposal

  • Canister id qhbym-qaaaa-aaaaa-aaafq-cai is indeed the ICP index canister.
  • The upgrade args correspond to the empty args.
  • The install mode is indeed upgrade.
  • The wasm hash is reproducible.

image

Code Review

  • No change to the index canister.

Adopt proposal 135998

Proposal

  • Canister id ryjl3-tyaaa-aaaaa-aaaba-cai is indeed the ICP ledger canister.
  • The upgrade args correspond to the empty args.
  • The install mode is indeed upgrade.
  • The wasm hash is reproducible.

image

Code Review

  • Blocks are now stored in stable memory and not in the heap anymore. Blocks are stored as a SBTreemap, with the index being the key and the value being the encoded block.
  • Some logic has been added to migrate blocks from the heap to stable memory.
  • For backwards compatibility clear_stable_blocks_data will clear the stable memory if the ledger version used doesn’t stores the blocks in stable memory.

Adopt proposal 135999

Proposal

  • Canister id qjdve-lqaaa-aaaaa-aaaeq-cai is indeed the ICP archive1 canister.
  • Upgrade args are reproducible:
  • The install mode is indeed upgrade.
  • The wasm hash is reproducible.

image


Adopt proposal 136000

Proposal

  • Canister id qsgjb-riaaa-aaaaa-aaaga-cai is indeed the ICP archive2 canister.
  • Upgrade args are reproducible:
  • The install mode is indeed upgrade.
  • The wasm hash is reproducible.

image

Adopt proposal 136001

Proposal

  • Canister id q4eej-kyaaa-aaaaa-aaaha-cai is indeed the ICP archive3 canister.
  • Upgrade args are reproducible:
  • The install mode is indeed upgrade.
  • The wasm hash is reproducible.

image

Code Changes

  • Migrate the block from heap in the archive to stable structure, this enables to use way more space per archive as we’re not limited with the 300b pre_upgrade serialization of the heap.

Proposal 135997 – LaCosta | CodeGov

Vote: ADOPT

ICP Index Canister


Reason:
Build successful and hashes match, commits look great and match the description. Found no issues.

[a85b5ac152]: Removes unused function skip, drop_last and as_indices from ic_ledger_canister_core::range_utils

[219abad147]: Migrates the ledger from storing blocks on heap memory HeapBlockData to using stable memory with ic-stable-structures. Replaces the BlockData trait with BlockDataContainer to manage blocks with global indexes instead of relative to first unarchived block.

Proposal 135998 – LaCosta | CodeGov

Vote: ADOPT

ICP ledger Canister


Reason:
Build successful and hashes match, commits look great and match the description. Found no issues.

Contains duplicate commits which are reviewed in previous proposals

Proposal 135999 – LaCosta | CodeGov

Vote: ADOPT

ICP archive1 Canister

image
Reason:
Build successful and hashes match, commits look great and match the description. Found no issues.

Contains duplicate commits which are reviewed in previous proposals

[7b7186fd91]: ledger-archive-node-canister was renamed to ic-icp-archive and now instead of storing blocks in heap memory in Vec<EncodedBlock> within the ArchiveNodeState struct, the canister now uses StableLog and MemoryManager from ic-stable-structures to store blocks in stable memory. The ArchiveNodeState struct was replaced with ArchiveState. The migration logic is in the post_upgrade hook, checking the stable_memory_version() against MEMORY_VERSION_NO_MEM_MGR before proceeding to the migration.

Proposal 136000 – LaCosta | CodeGov

Vote: ADOPT

ICP archive2 Canister

image
Reason:
Build successful and hashes match, commits look great and match the description. Found no issues.

Contains duplicate commits which are reviewed in previous proposals

Proposal 136001 – LaCosta | CodeGov

Vote: ADOPT

ICP archive3 Canister

image
Reason:
Build successful and hashes match, commits look great and match the description. Found no issues.

Contains duplicate commits which are reviewed in previous proposals

About CodeGov

CodeGov has a team of developers who review and vote independently on the following proposal topics: IC-OS Version Election, Protocol Canister Management, Subnet Management, Node Admin, and Participant Management. The CodeGov NNS known neuron is configured to follow our reviewers on these technical topics. We also have a group of Followees who vote independently on the Governance and the SNS & Neuron’s Fund topics. We strive to be a credible and reliable Followee option that votes on every proposal and every proposal topic in the NNS. We also support decentralization of SNS projects such as WaterNeuron, KongSwap, and Alice with a known neuron and credible Followees.

Learn more about CodeGov and its mission at codegov.org.

Proposal #135997 for ICP index — Zack | CodeGov

Vote: Adopted

Reason: The build is reproducible and both the wasm hash as well as the arguments hash are a match.
The canister id qhbym-qaaaa-aaaaa-aaafq-cai is correct and the install mode is upgrade.


219abad147 feat(ICP-Ledger): FI-1442: - Migrating blocks stored in the ledger to stable structures helps to store more blocks and also reduces archiving.

Proposal #135998 for ICP ledger

Vote: Adopted

Reason: The build is reproducible and the wasm hash is a match.
The canister id ryjl3-tyaaa-aaaaa-aaaba-cai is correct and the install mode is upgrade.

Proposal #135999 for ICP archive1

Vote: Adopted

Reason: The build is reproducible and both the wasm hash as well as the arguments hash are a match.
The canister id qjdve-lqaaa-aaaaa-aaaeq-cai is correct and the install mode is upgrade.

7b7186fd91 feat(ICP-archive): - Migrates the archives to stable structures, and ads a new argument max_memory_size_bytes that will be used to set the archive size limits.

Proposal #135600 for ICP archive2

Vote: Adopted

Reason: The build is reproducible and both the wasm hash as well as the arguments hash are a match.
The canister id qsgjb-riaaa-aaaaa-aaaga-cai is correct and the install mode is upgrade.

Proposal #135601 for ICP archive3

Vote: Adopted

Reason: The build is reproducible and both the wasm hash as well as the arguments hash are a match.
The canister id q4eej-kyaaa-aaaaa-aaaha-cai is correct and the install mode is upgrade.

Proposal #135602 for ICP archive4 — Zack | CodeGov

Vote: Adopted

Reason: The build is reproducible and both the wasm hash as well as the arguments hash are a match.
The canister id q3fc5-haaaa-aaaaa-aaahq-cai is correct and the install mode is upgrade.

As can be seen for the 4th the argument hash is different because of the new argument max_memory_size_bytes is set to 10GB.

About CodeGov

CodeGov has a team of developers who review and vote independently on the following proposal topics: IC-OS Version Election, Protocol Canister Management, Subnet Management, Node Admin, and Participant Management. The CodeGov NNS known neuron is configured to follow our reviewers on these technical topics. We also have a group of Followees who vote independently on the Governance and the SNS & Neuron’s Fund topics. We strive to be a credible and reliable Followee option that votes on every proposal and every proposal topic in the NNS. We also support decentralization of SNS projects such as WaterNeuron, KongSwap, and Alice with a known neuron and credible Followees.

Learn more about CodeGov and its mission at codegov.org.