NNS Updates: 2025-05-09

The Governance team submitted the following proposals. DFINITY plans to vote on these proposals the following Tuesday (since they were submitted slightly later than usual).

Submitted Proposals

Governance

https://dashboard.internetcomputer.org/proposal/136580

# Upgrade the Governance Canister to Commit 5639c29

__Proposer__: arshavir.ter.gabrielyan at dfinity.org

__Source code__: [5639c29fd72de16d483be7fe6dedc86e9bec3b9e][new-commit]

[new-commit]: https://github.com/dfinity/ic/tree/5639c29fd72de16d483be7fe6dedc86e9bec3b9e


## Features & Fixes

###  Removed

* The `governance_heap_neuron_count` metric is removed as there are no neurons in the heap anymore.


## New Commits

```
$ git log --format="%C(auto) %h %s" 9dfa7825fc087deacccbed3985a502e0ec2276ff..5639c29fd72de16d483be7fe6dedc86e9bec3b9e --  ./rs/nns/governance ./rs/sns/init
 5ab508970d refactor(nns): Clean up NeuronStore::heap_neurons (#5007)
 b539aa4d01 refactor(nns): Rename the governance API crate from pb::v1 to types (#4986)
 3490ef2a07 chore: bump the monorepo version of ic-cdk to 0.18.0 (#5005)
 f2f7d8d434 chore(nns): Stop registering ballots in with_neuron_mut (#5006)
 41d97b59eb refactor(nns): Stop validating heap neurons (#4969)
 b2147e4588 refactor(nns): Stop calculating metrics from heap_neurons (#4987)
 7b3e386ff2 feat(nns): Stop recording new snapshots when there is a spike (#4881)
 17bec1046a feat(nns): Consider neurons with maturity disbursements as non empty (#4967)
 632e8943fb docs(governance): Update CHANGELOG files for 2025-05-02 Governance team release. (#4965)
```


## Current Version

__Current git hash__: 9dfa7825fc087deacccbed3985a502e0ec2276ff

__Current wasm hash__: 713333b2b4a1847c225aee3927d515f97524ffddade773e6e3027189b127b46d


## 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/5639c29fd72de16d483be7fe6dedc86e9bec3b9e/rs/nervous_system/docs/proposal_verification.md


### WASM Verification

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

[prereqs]: https://github.com/dfinity/ic/tree/5639c29fd72de16d483be7fe6dedc86e9bec3b9e/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 5639c29fd72de16d483be7fe6dedc86e9bec3b9e

# 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

https://dashboard.internetcomputer.org/proposal/136581

# Upgrade the Registry Canister to Commit 5639c29

__Proposer__: arshavir.ter.gabrielyan at dfinity.org

__Source code__: [5639c29fd72de16d483be7fe6dedc86e9bec3b9e][new-commit]

[new-commit]: https://github.com/dfinity/ic/tree/5639c29fd72de16d483be7fe6dedc86e9bec3b9e


## Features & Fixes

###  Added

* Added new endpoint for `migrate_canisters` which is only callable by governance, and updates the routing table for
  the provided canisters when called so that requests will be routed to a different subnet. This will be used to support
  the broader canister migrations feature.

* Started populating `timestamp_seconds` fields.

###  Changed

* The `create_subnet` and `recover_subnet` calls are using the `reshare_chain_key` endpoint rather than the old `compute_initial_i_dkg_dealings` endpoint. With this change, recovery of vetkeys is supported.


## New Commits

```
$ git log --format="%C(auto) %h %s" 9dfa7825fc087deacccbed3985a502e0ec2276ff..5639c29fd72de16d483be7fe6dedc86e9bec3b9e --  ./rs/registry/canister
 57f4342e9f feat: populating `timestamp_seconds` in the registry canister (#5023)
 12ade05922 feat: CRP-2618 Allow zero `pre_signatures_to_create_in_advance` in vetKD `ChainKeyConfig` (#5014)
 3490ef2a07 chore: bump the monorepo version of ic-cdk to 0.18.0 (#5005)
 0c4a85be7e feat(CRP-2711): Migrate registry to reshare chain key endpoint (#4245)
 9e35adbf2a feat(registry): migrate_canisters endpoint updates routing table (#4988)
 2c6673bdc9 feat(registry): Migrate `Registry::store` to high-capacity types. (#4913)
 879713426a feat(registry): Add canister migrations endpoint with no functionality (#4954)
 632e8943fb docs(governance): Update CHANGELOG files for 2025-05-02 Governance team release. (#4965)
```


## Current Version

__Current git hash__: 9dfa7825fc087deacccbed3985a502e0ec2276ff

__Current wasm hash__: 1d36373e3294b4cf38fa5b1361e476baf49aefbbf636eae137d6d5b0572d3b50


## 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/5639c29fd72de16d483be7fe6dedc86e9bec3b9e/rs/nervous_system/docs/proposal_verification.md


### WASM Verification

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

[prereqs]: https://github.com/dfinity/ic/tree/5639c29fd72de16d483be7fe6dedc86e9bec3b9e/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 5639c29fd72de16d483be7fe6dedc86e9bec3b9e

# 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.

proposals - [136580, 136581] Cyberowl | CodeGov

Proposals:

136580
136581

Vote: ADOPT

Reason & Feedback:

I successfully built and verified the hash. All the commit descriptions match their code changes.

Checks:

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

Overall Summary:

Proposals 136580 and 136581 introduce changes to Governance and Registry canister, including consolidating neuron storage to stable memory, adding support for high-capacity chunked values, and enabling canister migration across subnets with new endpoints and validation.

Commits Summary

proposal/136580

5ab508970d
Eliminates heap-based code paths, simplifying NeuronStore by removing heap_neurons. All read/write helpers now go straight into StableNeuronStore.

b539aa4d01
Removes the versioned pb::v1 intermediate module and flattens everything to ic_nns_governance_api::{…}

3490ef2a07
Bump of the IC-CDK crates from 0.17 → 0.18 while still preserving the older 0.17.1 API for code.

f2f7d8d434
Fixes benchmark for neuron.register_recent_ballot(Topic::Governance, &ProposalId { id: 1 }, Vote::Yes);

41d97b59eb
Kills off the legacy “heap” validation paths and makes every validation task operate against a single, stable store with one unified next_neuron_id.

b2147e4588
Kills off the old “also look at heap‐resident neurons” path in both validation and metrics, consolidating everything to use only the stable‐memory store.

7b3e386ff2
Adds “voting-power spike” detection with new helper, refactors the snapshot code to use it, and changes the recurring snapshot task so that once a spike is detected it stops taking further snapshots until the window expires.

17bec1046a
Neurons with in-progress maturity disbursements as “non-empty” by adding a has_maturity_disbursement_in_progress method in types.rs and updating the is_non_empty predicate in neuron_store.rs to include such neurons.

632e8943fb
Update change logs.

proposal/136581

57f4342e9f
timestamp_seconds field in registry entries by capturing real timestamps in integration tests, populating mutations.timestamp_seconds in the canister’s changelog_insert flow using a new get_current_timestamp_seconds()

12ade05922
Disables unnecessary pre-signature warm-up in tests, setting pre_signatures_to_create_in_advance to 0 for keys not requiring pre-signatures, and introducing a requires_pre_signatures helper on MasterPublicKeyId to centralize logic for ECDSA, Schnorr, and VetKd keys.

3490ef2a07
Same as proposal/136580

0c4a85be7e
Replaces the old compute_initial_i_dkg_dealings API with reshare_chain_key, which supports both IDKG dealings and NiDKG transcripts via a new ReshareChainKeyResponse enum.

9e35adbf2a
Adds do_migrate_canisters + payload/response types in the registry canister. Changes to enable relocation of canister ids across subnets.

2c6673bdc9
High-capacity (chunked) value support to the Registry canister under a test feature, creating a reusable ic-nervous-system-chunks crate for blob chunking, replacing the internal store with HighCapacityRegistryValue.

879713426a
Groundwork for the migrate_canisters endpoint in the Registry canister, introducing a dedicated do_migrate_canisters.rs module, integrating the new method into registry.did and the changelog, and implementing a temporary authorization check against GOVERNANCE_CANISTER_ID.

632e8943fb
Same as proposal/136580

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.

Adopt proposal 136580

Proposal

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

image

Code Review

[5ab508970d]: Remove NeuronStore::heap_neurons as neurons are now stored in stable memory. Remove governance_heap_neuron_count metric. Some tests involving the register_recent_ballot for heap neurons are deleted.
[b539aa4d01]: The ic_nns_governance_api crate no longer uses protobuf.
[3490ef2a07]: bump ic-cdk to 0.18 for the monorepo. ic-cdk stays at 0.17 for the governance canister, @daniel-wong are there plan to bump it for the governance?
[f2f7d8d434]: Ballot registration is handled via NeuronStore::register_recent_neuron_ballot, not with_neuron_mut, making the benchmark unrealistic.
[41d97b59eb]: heap_neurons no longer exist (migrated to stable memory), stop reading them in validation.
[b2147e4588]: Remove metrics computed from neuron heap.
[7b3e386ff2]: Halts new voting power snapshots during detected spikes, preventing normalization of anomalous data. It refactors spike detection into a dedicated function and adds an early return in snapshot execution.
[17bec1046a]: Consider neurons with maturity disbursements as non empty.
[632e8943fb]: changelog.


Adopt proposal 136581

Proposal

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

image

Code Review

[57f4342e9f]: Populate the timestamp_seconds fields.
[12ade05922]: VetKd does not use pre-signatures, and the corresponding configuration parameter is now ignored. Updates a registry invariant to permit chain keys that do not require pre-signatures to be configured with zero pre-signatures to generate in advance.
[3490ef2a07]: bump ic-cdk to 0.18.0
[0c4a85be7e]: The existing calls to compute_initial_i_dkg_dealings are being replaced with calls to reshare_chain_key.
[9e35adbf2a]: The registry method do_migrate_canisters actually updates the routing table, it was previously ignored.
[2c6673bdc9]: Migrate Registry::store to handle bigger chuncks.
[879713426a]: Add do_migrate_canisters with no implementation.
[632e8943fb]: Update changelog.