NNS Updates 2025-06-13

The Governance Team submitted the following proposals. DFINITY plans to vote on these proposals the following Monday.

Proposals to be Submitted

Governance

# Upgrade the Governance Canister to Commit 12afb25

__Proposer__: arshavir.ter.gabrielyan at dfinity.org

__Source code__: [12afb2543219f43e4088e1ecd6d235962e71b211][new-commit]

[new-commit]: https://github.com/dfinity/ic/tree/12afb2543219f43e4088e1ecd6d235962e71b211


## Features & Fixes

###  Changed

* Task execution metrics are added for `neuron_data_validation` and
  `unstake_maturity_of_dissolved_neurons` timer tasks.

###  Fixed

* The `account_identifier_to_disburse_to` in the maturity disbursement now contains a 32-byte
  address rather than the 28-byte one without checksum.


## New Commits

```
$ git log --format="%C(auto) %h %s" 02571e8215fa3e77da791e693cc238b2de3beae9..12afb2543219f43e4088e1ecd6d235962e71b211 --  ./rs/nns/governance ./rs/sns/init
 63c402b5d4 feat(nns): Use timer_tasks library for some timer tasks (#5493)
 4e04664edc chore(nns): Clean up disburse maturity (#5512)
 243be670a2 refactor(nns): Remove neurons prost type (#5460)
 8b4da93fc6 fix(nns): Outputs a 32-byte account identifier in maturity disbursements (#5466)
 3671acb49d chore: upgrade rust: 1.85.1 -> 1.86.0 (again) (#5453)
 0939e4e4d8 chore: validate specified_id for canister creation in test environments (#5269)
 2dd93c8aeb refactor(nns): Move Followees out of Neuron in governance.proto (#5456)
 c36e3971df chore(nns): Remove GovernanceProto::neurons (#5442)
 31872377e4 test(nns): Remove (prop_)assert_changes (#5421)
 b31d3151e7 chore: mark  //rs/nns/governance:governance_integration_test_tests:... as flaky (#5447)
 b3efb00f64 docs(governance-backend): Update Governance backend CHANGELOG files. (#5450)
```


## Current Version

__Current git hash__: 02571e8215fa3e77da791e693cc238b2de3beae9

__Current wasm hash__: 31300720809c76011b5cb2fa3715b7d4e9c8b7d614e0de774e0eb0333bc4444c


## Verification

See the general instructions on [how to verify] proposals like this. A "quick
start" guide is provided here.

[how to verify]: https://github.com/dfinity/ic/tree/12afb2543219f43e4088e1ecd6d235962e71b211/rs/nervous_system/docs/proposal_verification.md


### WASM Verification

See ["Building the code"][prereqs] for prerequisites.

[prereqs]: https://github.com/dfinity/ic/tree/12afb2543219f43e4088e1ecd6d235962e71b211/README.adoc#building-the-code

```
# 1. Get a copy of the code.
git clone git@github.com:dfinity/ic.git
cd ic
# Or, if you already have a copy of the ic repo,
git fetch
git checkout 12afb2543219f43e4088e1ecd6d235962e71b211

# 2. Build canisters.
./ci/container/build-ic.sh -c

# 3. Fingerprint the result.
sha256sum ./artifacts/canisters/governance-canister.wasm.gz
```

This should match `wasm_module_hash` field of this proposal.

Registry

# Upgrade the Registry Canister to Commit 12afb25

__Proposer__: arshavir.ter.gabrielyan at dfinity.org

__Source code__: [12afb2543219f43e4088e1ecd6d235962e71b211][new-commit]

[new-commit]: https://github.com/dfinity/ic/tree/12afb2543219f43e4088e1ecd6d235962e71b211


## Features & Fixes

###  Added

* The RoutingTable is now also broken up into `canister_ranges_*` records, instead of only in a single
  `routing_table` record. This will allow clients to migrate to the new format incrementally, as both will continue
  to be available until all known clients have migrated to the new format, at which point `routing_table` will be
  removed.

###  Changed

* When performing "large" mutations (greater than approximately 1.3 MiB),
  chunking is used. This has no effect on how mutations are written. Rather,
  this affects how large mutations and records are read. For non-large
  mutations, this has no effect. Chunking means that to fetch a large mutation
  or record, clients must make follow up `get_chunk` canister method calls.
  Because of this requirement, this is a breaking change (for clients who read
  large mutations/records). This breaking change and how clients migrate was
  [announced at the end of March in a forum][chunking] (and various other
  channels). This release marks the end of the "migration window" described in
  the aforelinked forum post.

[chunking]: https://forum.dfinity.org/t/breaking-registry-changes-for-large-records/42893?u=daniel-wong


## New Commits

```
$ git log --format="%C(auto) %h %s" 02571e8215fa3e77da791e693cc238b2de3beae9..12afb2543219f43e4088e1ecd6d235962e71b211 --  ./rs/registry/canister
 83f3b8b30f chore(registry): Add some initial benchmarks (#5468)
 5f8a1b5d20 feat(registry): Enable chunking. (#5210)
 cc5c9c98e2 feat(registry): Store routing table as canister_ranges  (#5062)
 b3efb00f64 docs(governance-backend): Update Governance backend CHANGELOG files. (#5450)
```


## Current Version

__Current git hash__: 02571e8215fa3e77da791e693cc238b2de3beae9

__Current wasm hash__: f8f97636e9696d52074c1579e6f6d012a5486e99a226ce00460adfa19b849394


## Verification

See the general instructions on [how to verify] proposals like this. A "quick
start" guide is provided here.

[how to verify]: https://github.com/dfinity/ic/tree/12afb2543219f43e4088e1ecd6d235962e71b211/rs/nervous_system/docs/proposal_verification.md


### WASM Verification

See ["Building the code"][prereqs] for prerequisites.

[prereqs]: https://github.com/dfinity/ic/tree/12afb2543219f43e4088e1ecd6d235962e71b211/README.adoc#building-the-code

```
# 1. Get a copy of the code.
git clone git@github.com:dfinity/ic.git
cd ic
# Or, if you already have a copy of the ic repo,
git fetch
git checkout 12afb2543219f43e4088e1ecd6d235962e71b211

# 2. Build canisters.
./ci/container/build-ic.sh -c

# 3. Fingerprint the result.
sha256sum ./artifacts/canisters/registry-canister.wasm.gz
```

This should match `wasm_module_hash` field of this proposal.

Publish SNS Governance

# Publish SNS Governance WASM Built at Commit 12afb25

__Proposer__: arshavir.ter.gabrielyan at dfinity.org

__Source code__: [12afb2543219f43e4088e1ecd6d235962e71b211][new-commit]

[new-commit]: https://github.com/dfinity/ic/tree/12afb2543219f43e4088e1ecd6d235962e71b211

## Features & Fixes

###  Added

####  New `get_metrics` function for SNS Governance

A new function, `get_metrics`, has been added to the SNS Governance canister. This allows front-end clients and SNS aggregators to query for activity metrics of an SNS over a specified time period. Currently, the metrics include the number of most-recent proposals and the timestamp of the latest SNS ledger transaction.


## New Commits

```
$ git log --format="%C(auto) %h %s" 02571e8215fa3e77da791e693cc238b2de3beae9..12afb2543219f43e4088e1ecd6d235962e71b211 --  ./rs/sns/governance
 c69929a5a0 feat(sns): Added default implementation to GetMetricsResponse (#5520)
 3671acb49d chore: upgrade rust: 1.85.1 -> 1.86.0 (again) (#5453)
 de286fe8e9 note(sns): add release notes on (#5472)
 b3efb00f64 docs(governance-backend): Update Governance backend CHANGELOG files. (#5450)
 2e94007f12 feat(sns): Implement SnsGov.get_metrics (#5185)
```


## Wasm Verification

See the general instructions on [how to verify] proposals like this. A "quick
start" guide is provided here.

[how to verify]: https://github.com/dfinity/ic/tree/12afb2543219f43e4088e1ecd6d235962e71b211/rs/nervous_system/docs/proposal_verification.md

See ["Building the code"][prereqs] for prerequisites.

[prereqs]: https://github.com/dfinity/ic/tree/12afb2543219f43e4088e1ecd6d235962e71b211/README.adoc#building-the-code

```
# 1. Get a copy of the code.
git clone git@github.com:dfinity/ic.git
cd ic
# Or, if you already have a copy of the ic repo,
git fetch
git checkout 12afb2543219f43e4088e1ecd6d235962e71b211

# 2. Build canisters.
./ci/container/build-ic.sh -c

# 3. Fingerprint the result.
sha256sum ./artifacts/canisters/sns-governance-canister.wasm.gz
```

This should match `wasm` field of this proposal.
2 Likes

Adopt 136987

Proposal

  • The upgrade args correspond to the empty args.
  • The install mode is indeed upgrade.
  • The wasm hash are reproducible.

Screenshot from 2025-06-14 14-40-02

Code Review

63c402b5d4: Use timer_tasks library for some timer tasks.
4e04664edc: Clean up some code around disburse maturity like is_disburse_maturity_enabled.
243be670a2: Remove neurons prost type.
8b4da93fc6: Outputs a 32-byte account identifier in maturity disbursements including the first 4 bytes checksum that was previously not included.
3671acb49: bump 1.85.1 → 1.86.0.
0939e4e4d8: Validate the field specified_id for canister creation in test environments.
2dd93c8aeb: Move Followees out of Neuron in governance.proto.
c36e3971df: remove GovernanceProto::neurons.
31872377e4: remove assert_changes.
b31d3151e7: mark governance_integration_test_tests as flacky.
b3efb00f64: changelog update.


Adopt 136988

Proposal

  • The upgrade args correspond to the empty args.
  • The install mode is indeed upgrade.
  • The wasm hash are reproducible.

Screenshot from 2025-06-14 14-40-37

Code Review

83f3b8b30f: Add some benchmarks to registry.
5f8a1b5d20: One line change to enable chunking. When performing large mutations chunking is used.
cc5c9c98e2: Store routing table as canister_ranges.
b3efb00f64: changelog update.

1 Like

proposals - [136987, 136988] Cyberowl | CodeGov

Proposals:

136987
136988

Vote: [ADOPT, ADOPT]

Reason & Feedback:

I successfully built and verified the hash. All the commit descriptions match their code changes. Small amount of feedback.

Checks:

Hash Match: [PASS, PASS]
Target Canister: [PASS, PASS]
Proposer Check: [PASS, PASS]

Overall Summary:

Mainly refactoring code and starting to add some benchmarks for registry.

Commits Summary

proposal / 136987 (Governance)

63c402b5d4
Deleted scheduled timers schedule_unstake_maturity_of_dissolved_neurons and schedule_neuron_data_validation. Those same timers are now under timer_tasks in mod.rs.

4e04664edc
Removed all code and associated code with regard to is_disburse_maturity_enabled flag.

243be670a2
Renames initialize_heap_governance_data to initialize_governance. Updates neuron conversion by replacing the infallible v.into() with Neuron::try_from(v).expect("Invalid neuron"), enabling immediate panic on bad neuron data and adding explicit error checking during initialization. Removes NeuronProto. Relocates Neuron into its own module. Introduces new Neuron types that restrict user modification of certain default fields for security reasons, including deciding_voting_power, potential_voting_power, and maturity_disbursements_in_progress.

8b4da93fc6
Updates into_account_identifier_proto to return 32-byte account identifier using account_identifer.to_address().

3671acb49d
Bumps the Rust toolchain from 1.85.1 to 1.86.0.
Patches the macOS hyper-crate linker bug by applying opt-level=0 on x86_64-apple-darwin in external_crates.bzl.

0939e4e4d8
Extra check to validate_specified_id. Good check for better crash errors.

2dd93c8aeb
Protobuf definition of Followees was lifted out of the nested Neuron scope into its own top-level message, and all map<int32, Followees> fields were updated to reference this new top-level type.

c36e3971df
Removed neurons from Governance. Since the move to stable mem, this is not needed anymore.

31872377e4
Removes the private, test-only state-capture and retrieval helpers __get_state_for_test and __get_neurons_for_tests, along with the associated initial_state field, capture_state method, and assertion macros used for governance tests.

b31d3151e7
Mark test governance_integration_test as flaky.

b3efb00f64
Update change logs.

proposal / 136988 (Registry)

83f3b8b30f
Adds benchmarks for the Registry canister. Starts with simple measures like measure_snapshot_creation_with_1000_individual_entries and measure_snapshot_creation_with_100_segments_of_1000_entries. The benchmarking coverage will expand in future commits.

5f8a1b5d20
Breaking change to Enable chunking. Clients have been warned.

cc5c9c98e2
Refactor make_canister_ranges_key to remove the need for SubnetId and modify to incorporate hex::encode for range_start: CanisterId.

Updates to the Registry data migrations involve deprecating the add_missing_node_types_to_nodes function. This function previously scanned all NodeRecords in the registry for missing node_reward_type fields and generated mutations to populate them using a predefined mapping, when a valid reward type was found. It has been replaced by maybe_write_routing_table_to_canister_ranges, which compares the existing canister-range shards in the registry with a new RoutingTable and generates the necessary upsert and delete mutations to synchronize them accurately.

b3efb00f64
Update change logs.

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 136987 | Tim - CodeGov

Screenshot 2025-06-16 141855

Vote: Adopt

Reason: Build is successful, hashes match, commits match descriptions and the reasoning behind the changes is sound. Commits are reviewed below.

[63c402b5d4]
Removes schedule_unstake_maturity_of_dissolved_neurons and schedule_neuron_data_validation (relying on ic_cdk_timers) from scheduling in governance/canister/canister.rs, and replaces these with equivalent tasks in governance/src/timer_tasks/mod.rs, making use of the PeriodicSyncTask trait (explained here) from ic_nervous_system_timer_task.

[4e04664edc]
Removes the now redundant is_disburse_maturity_enabled flag along with related structures and tests.

[243be670a2]
Removes type Neuron (used as pb::v1::neuron) from the governance protobuf, replacing its use throughout the code with ic_nns_governance_api::neuron, and associated code changes as outlined in the commit notes.

[8b4da93fc6]
Adapts Destination::into_account_identifier_proto in the maturity disbursement code so that it gives a 32-byte account identifier, equivalent to the “ICP address”, instead of the previous 28-byte identifier.

[3671acb49d]
Upgrades Rust version from 1.85.1 to 1.86.0 again, as the issue causing test failures the last time this was attempted has now been identified and a workaround put in place (and included within the commit).

[0939e4e4d8]
Adapts CanisterManager::validate_specified_id method to require specified_id (of a canister) not to belong to the canister allocation ranges, the concept of which is explained here. The intention is for this validation to be used for canister creation in test environments.

[2dd93c8aeb]
Un-nests type Followees from the Neuron definition, as per commit notes.

[c36e3971df]
Removes neurons field from type Governance (used as GovernanceProto in most of the code) as this field is no longer in use.

[31872377e4]
Removes prop_assert_changes and assert_changes macros along with the associated test_single_neuron_proposal_new test. Also removes prop_assert_changes! from do_test_merge_neurons. These performed an assertion on the entire NNS Governance state, which has now become unwieldy.

[b31d3151e7]
Adds flag flaky = True for all tests within the governance_integration_test suite so that they will show up as such on dashboards, as these tests have been timing out frequently.

[b3efb00f64]
Updates changelog files for various system canisters.

Proposal 136988

Vote: Adopt

Reason: Build is successful, hashes match, commits match descriptions and the reasoning behind the changes is sound. Commits are reviewed below.

[83f3b8b30f]
Introduces several benchmark tests and integrates canbench into the registry canister module, as per description.

[5f8a1b5d20]
Sets the IS_CHUNKIFYING_LARGE_VALUES_ENABLED flag to true in order to allow chunking of large (> 2 MiB) messages. This is a breaking change as explained here.

[cc5c9c98e2]
Adds new function mutations_for_canister_ranges which is then used in Registry methods for modifying the routing table (adding or removing a subnet, migrating canisters to a subnet or remapping a specified canister ID range to another subnet) to produce a vector of RegistryMutations. The intention of this and related changes is to allow the routing table to be broken up into canister_ranges_* records rather than just stored as a single record.

[b3efb00f64]
Reviewed above.

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, API Boundary Node 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 & Neurons’ 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 decentralisation 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 136987 – LaCosta | CodeGov

Vote: ADOPT

Governance Canister

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

[63c402b5d4]: Replaces the scheduling for timer tasks unstake_maturity_of_dissolved_neurons and neuron_data_validation to use the timer_tasks library, avoiding using the unsafe governance_mut() accessor.

[4e04664edc]: Cleans up some code regarding disburse_maturity that it’s no longer needed.

[243be670a2]: Removes the Neuron type from pb::v1 replacing it with api::Neuron. Renames initialize_heap_governance_data to initialize_governance and replaces the type conversion from api::Neuron to protobuf::Neuron with a conversion from api::Neuron to internal Neuron using Neuron::try_from

[8b4da93fc6]: Refactors the method into_account_identifier_proto from Destination to use AccountIdentifier::to_address instead of AccountIdentifierProto::from in order to output a 32-byte hash (ICP adress) instead of a 28-byte hash.

[3671acb49d]: Updates Rust version from 1.85.1 to 1.86.0. This version was previously downgraded in c458123 due to causing some tests to fail, but this as since been fixed.

[0939e4e4d8]: Adds the method validate_specified_id to the SystemMetadata struct that validates if a given specified_id is outside the canister allocation ranges.

[2dd93c8aeb]: Moves the nested neuron::Followees struct outsude of neuron and refactors the code accordingly.

[c36e3971df]: Removes the field neuronsfrom the Governance struct and refactors the code accordingly.

[31872377e4]: Removes macros assert_changes and prop_assert_changes along with test check_proposal_status_after_voting_and_after_expiration_new that does the same thing as check_proposal_status_after_voting_and_after_expiration except that the latest doesn’t do asserting on global state changes that are no longer feasible since neurons are now in stable storage.

[b31d3151e7]: Tests under the governance_integration_test suite timed out in over 2% of the runs which required manual restarts so this commit marks this tests as flaky to enable automatic restarts.

[b3efb00f64]: Updates change logs to include adopted proposals and corresponding changes.

Proposal 136988 – LaCosta | CodeGov

Vote: ADOPT

Registry Canister

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

Contains duplicate commits from previous proposals

[83f3b8b30f]: Introduces benchmarking for registry_canister snapshot creation. Adds benches.rs with several benchmark tests and integrates the canbench-rs crate

[5f8a1b5d20]: Sets the flag IS_CHUNKIFYING_LARGE_VALUES_ENABLED to true enabling chunking

[cc5c9c98e2]: Modifies make_canister_ranges_key to take as input only range_start: CanisterId and return a hex-encoded key. Adds a new method mutations_for_canister_ranges to generate mutations that store the routing table as canister_ranges_* records.

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.

1 Like