NNS Updates 2025-07-06

The NNS Team submitted the following proposals. DFINITY plans to vote on these proposals the following Wednesday (since they were submitted two days later than usual for technical reasons.

Proposals to be Submitted

Governance

# Upgrade the Governance Canister to Commit 2f87fe9

__Proposer__: arshavir.ter.gabrielyan at dfinity.org

__Source code__: [2f87fe95207dc6371a2f2dc273362ba03b41e0e9][new-commit]

[new-commit]: https://github.com/dfinity/ic/tree/2f87fe95207dc6371a2f2dc273362ba03b41e0e9


## Features & Fixes

###  Added

* Add a metric for the nubmer of spawning neurons.
* Use a previous voting power snapshot to create ballots if a voting power spike id detected.

###  Changed

* Rename a metric related to voting power spike according to convention.


## New Commits

```
$ git log --format="%C(auto) %h %s" cc066e9957ad2f4f7515e9906bb7df4d2fcf78b7..2f87fe95207dc6371a2f2dc273362ba03b41e0e9 --  ./rs/nns/governance ./rs/sns/init
 567d2e1c24 chore: bump governance integration test timeout (#5830)
 b1b1c4e151 chore(nns): Rename a metric according to convention (#5781)
 74cbd6cf7a feat(nns): Use a previous snapshot for ballots if an unusually high voting power is detected (#4798)
 72c72b8c06 feat(nns): Add a metric for the number of spawning neurons (#5582)
 6c59930a75 fix(governance-tools): Fixed a bug in the Governance PR nag bot. (#5763)
 ac9bb67a0a chore(nns): Add clarification on MINIMUM_DISBURSEMENT_E8S (#5712)
 6af80dc291 docs(governance): Updated CHANGELOG files for canisters that we just proposed. (#5647)
```


## Current Version

__Current git hash__: cc066e9957ad2f4f7515e9906bb7df4d2fcf78b7

__Current wasm hash__: 52bf0c480df40ae6d0928c8e113a46748ba5c122d5c9fea7f1440e488ae8c113


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


### WASM Verification

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

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

# 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 2f87fe9

__Proposer__: arshavir.ter.gabrielyan at dfinity.org

__Source code__: [2f87fe95207dc6371a2f2dc273362ba03b41e0e9][new-commit]

[new-commit]: https://github.com/dfinity/ic/tree/2f87fe95207dc6371a2f2dc273362ba03b41e0e9


## Features & Fixes

###  Added

* There is now a `canister_cycles_cost_schedule` field in `CreateSubnetPayload`
  and `SubnetRecord`. This isn't used yet, but it will be in the not too distant
  future, for [subnet rental].

[subnet rental]: https://dashboard.internetcomputer.org/proposal/128820


## New Commits

```
$ git log --format="%C(auto) %h %s" cc066e9957ad2f4f7515e9906bb7df4d2fcf78b7..2f87fe95207dc6371a2f2dc273362ba03b41e0e9 --  ./rs/registry/canister
 648c311450 feat: Added `canister_cycles_cost_schedule` to `SubnetRecord`. (#5816)
 73bb32695d test(registry): Set up sharded routing table in registry tests (#5810)
 636fd13b7f feat: Add new node type mappings for nodes in the registry (#5805)
 e915efecc8 docs(nns): Add a comment regarding routing table shards (#5806)
 76b74b0816 feat(registry): Added `canister_cycles_cost_schedule` to CreateSubnetPayload. (#5777)
 d42c3b2195 chore(nns): Clean up migration code for canister ranges (#5711)
 19502f0c93 chore(ic-registry-transport): Add timestamp_nanoseconds to RegistryValue (#5707)
 6af80dc291 docs(governance): Updated CHANGELOG files for canisters that we just proposed. (#5647)
```


## Current Version

__Current git hash__: cc066e9957ad2f4f7515e9906bb7df4d2fcf78b7

__Current wasm hash__: 6f02e343dd0893377d4d7c4f8eefea0b55f4092b4b6b024b7138ba8ec9a0013a


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


### WASM Verification

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

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

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

Root

# Upgrade the Root Canister to Commit 2f87fe9

__Proposer__: arshavir.ter.gabrielyan at dfinity.org

__Source code__: [2f87fe95207dc6371a2f2dc273362ba03b41e0e9][new-commit]

[new-commit]: https://github.com/dfinity/ic/tree/2f87fe95207dc6371a2f2dc273362ba03b41e0e9


## Features & Fixes

###  Changed

* Root now gets the NNS subnet via `get_subnet_for_canister` instead of getting the routing table bytes from the
  registry. This change is needed, as the routing table records will be sharded into multiple records moving forward.


## New Commits

```
$ git log --format="%C(auto) %h %s" 02571e8215fa3e77da791e693cc238b2de3beae9..2f87fe95207dc6371a2f2dc273362ba03b41e0e9 --  ./rs/nns/handlers/root
 d08ec4868c feat(nns): Change root proposal to call Registry::subnet_for_canister instead of reading from routing table (#5790)
 b3efb00f64 docs(governance-backend): Update Governance backend CHANGELOG files. (#5450)
```


## Current Version

__Current git hash__: 02571e8215fa3e77da791e693cc238b2de3beae9

__Current wasm hash__: ad3b6758d7a50425d349f35b96d2b570524eba3728342bc442eb3807c47867bb


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


### WASM Verification

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

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

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

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

This should match `wasm_module_hash` field of this proposal.

Adopt 137252

Proposal

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

Screenshot from 2025-07-07 10-08-13

Code Review

6af80dc291: update changelogs
ac9bb67a0a: Clarify MINIMUM_DISBURSEMENT_E8S comment.
6c59930a75: Fixed a bug in the Governance PR nag bot by adding missing escape slashes for backticks.
72c72b8c06: As the nns dapp is switching from spwaning neurons to disbursing its maturity, add a metric for the number of spawning neurons to follow the behaviour change.
74cbd6cf7: Use a previous snapshot for ballots to delay proposal adoption when unusually high voting power is detected, helping prevent sudden NNS takeovers due to potential bugs or illegitimate gains.
b1b1c4e151: rename metric from voting_power_snapshots_latest_snapshot_is_spike to governance_voting_power_snapshots_latest_snapshot_is_spike.
567d2e1c24: bump governance integration test timeout

Adopt 137253

Proposal

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

Screenshot from 2025-07-07 10-08-29

Code Review

b3efb00f64: update changelog
d08ec4868c: Change root proposal to call Registry::subnet_for_canister instead of reading from the routing table, due to the routing table’s transition to sharded records

Adopt 137254

Proposal

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

Screenshot from 2025-07-07 10-08-37

Code Review

6af80dc291: update changelog.
19502f0c93: Add timestamp_nanoseconds to RegistryValue
d42c3b2195: Remove one-off migration code for canister ranges now that it has been executed
76b74b0816: Add canister_cycles_cost_schedule field to CreateSubnetPayload, allowing it to be populated though not yet functionally enforced
e915efecc8: Add a comment regarding routing table shards
636fd13b7f: Add new node type mappings for nodes in the registry
73bb32695d: Set up sharded routing table alongside single routing table in registry tests to support upcoming format change
648c311450: Added canister_cycles_cost_schedule to SubnetRecord

proposals - [137252, 137253, 137254] Cyberowl | CodeGov

Proposals:

137252
137253
137254

Vote: [ADOPT, ADOPT, ADOPT]

Reason & Feedback:

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

Checks:

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

Overall Summary:

New check under compute_ballots_for_new_proposal, if a spike was detected, it uses that previous snapshot. Small fixes, metrics and change logs.

Commits Summary

proposal/137252 (Governance)

74cbd6cf7a

  • added: 1
  • modified: 14
  • removed: 0
  • total: 15

New field previous_ballots_timestamp_seconds under ProposalData. Now we log proposals_using_previous_voting_power_snapshots. New check under compute_ballots_for_new_proposal, if a spike was detected, it uses that previous snapshot. New check in record_voting_power_snapshot to make sure snapshot is not taken as a neuron management proposal.

72c72b8c06

  • added: 0
  • modified: 12
  • removed: 0
  • total: 12

New metric for the number of spawning neurons.

6af80dc291

  • added: 0
  • modified: 5
  • removed: 0
  • total: 5

Update change logs, no behavior change.

6c59930a75

  • added: 0
  • modified: 2
  • removed: 0
  • total: 2

Improves duplicate reviews detection. Improvement to currently workflow.

b1b1c4e151

  • added: 0
  • modified: 2
  • removed: 0
  • total: 2

Fix name of metric.

567d2e1c24

  • added: 0
  • modified: 1
  • removed: 0
  • total: 1

timeout for governance_integration_test is increased.

ac9bb67a0a

  • added: 0
  • modified: 1
  • removed: 0
  • total: 1

Expand comments around MINIMUM_DISBURSEMENT_E8S.

proposal/137253 (Root)

d08ec4868c

  • added: 0
  • modified: 4
  • removed: 0
  • total: 4

Add dep registry-canister to root. Rewrite get_nns_subnet_id to call registry canister to get SubnetId.

b3efb00f64

  • added: 0
  • modified: 12
  • removed: 0
  • total: 12

Update change logs.

proposal/137254 (Registry)

19502f0c93

  • added: 0
  • modified: 17
  • removed: 0
  • total: 17

Adds field timestamp_nanoseconds to RegistryValue.

648c311450

  • added: 0
  • modified: 13
  • removed: 0
  • total: 13

Adds enum CanisterCyclesCostSchedule. Now SubnetRecord has canister_cycles_cost_schedule.

76b74b0816

  • added: 0
  • modified: 8
  • removed: 0
  • total: 8

Adds canister_cycles_cost_schedule to CreateSubnetPayload. Added some gossip fields in the did file to be deprecated.

73bb32695d

  • added: 0
  • modified: 6
  • removed: 0
  • total: 6

Rename routing_table_mutation to initial_routing_table_mutations and return Vec<RegistryMutation>. One key being make_routing_table_record_key and the other make_canister_ranges_key.

6af80dc291

  • added: 0
  • modified: 5
  • removed: 0
  • total: 5

Update change logs.

636fd13b7f

  • added: 0
  • modified: 2
  • removed: 0
  • total: 2

New set of MISSING_NODE_TYPES_MAP is generated. Does mutations regarding add_missing_node_types_to_nodes.

d42c3b2195

  • added: 0
  • modified: 2
  • removed: 0
  • total: 2

Delete code related to mutations_for_canister_ranges.

e915efecc8

  • added: 0
  • modified: 1
  • removed: 0
  • total: 1

Add commets regarding routing_table.rs

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

Proposal 137252 | Tim - CodeGov

Vote: Adopt

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

[567d2e1c24]
Increases timeout on rust_test_suite_with_extra_srcs from 5 minutes to 15 minutes.

[b1b1c4e151]
Renames voting_power_snapshots_latest_snapshot_is_spike metric to governance_voting_power_snapshots_latest_snapshot_is_spike.

[74cbd6cf7a]
Adds field previous_ballots_timestamp_seconds to type ProposalData. If set, this field indicates that a voting power spike has occurred, potentially due to an exploitable bug, and in this instance the specified previous voting power snapshot is used for ballots.

[72c72b8c06]
Adds new metric spawning_neurons_count.

[6c59930a75]
Changes ci-pr-only-nns-team-reminder.yml (for Governance Unreleased Changelog Reminder) to prevent duplicate reminders and to correct a mistyped condition. Adds detail to rs/nns/governance/README.md.

[ac9bb67a0a]
Expands comment describing MINIMUM_DISBURSEMENT_E8S.

[6af80dc291]
Updates changelog files.

Proposal 137253

Vote: Adopt

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

[d08ec4868c]
Changes root_proposals.rs to call the registry canister’s get_subnet_for_canister method instead of using the routing table to figure out which subnet has the governance canister’s ID, now that the routing table has now been split into multiple sharded records.

[b3efb00f64]
Updates changelog files for various system canisters.

Proposal 137254

Vote: Adopt

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

[648c311450]
Adds field canister_cycles_cost_schedule to type SubnetRecord, appearing as an enum listing options for how to charge canisters for their use of computational resources (unspecified, according to subnet type or free).

[73bb32695d]
Sets up the new sharded routing table in registry tests.

[636fd13b7f]
Updates MISSING_NODE_TYPES_MAP with a new set of mappings. Applies mutations to add the missing node types within canister_post_upgrade.

[e915efecc8]
Adds detailed comments to mutations_for_canister_ranges function in relation to routing table shards.

[76b74b0816]
Adds field canister_cycles_cost_schedule to type CreateSubnetPayload, similarly to 648c311450 above. Marks several of this type’s fields as deprecated.

[d42c3b2195]
Deletes or comments out canister range migration code that is no longer needed.

[19502f0c93]
Adds field timestamp_nanoseconds to type RegistryValue + associated code changes.

[6af80dc291]
Updates changelog files.

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 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.
1 Like

Proposal 137252 – LaCosta | CodeGov

Vote: ADOPT

Governance Canister


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

[567d2e1c24]: The governance_integration_test recently timed out. Until the test can be fixed, the timeout of the test was bumped from using the default timeout = "moderate" which corresponds to 300s or 5min, to using timeout = "long" which corresponds to 900s or 15min

[b1b1c4e151]: Renames metric voting_power_snapshots_latest_snapshot_is_spike to governance_voting_power_snapshots_latest_snapshot_is_spike

[74cbd6cf7a]: This is the 3rd and final step in a sequence of commits to prevent the takeover of the NNS in the event that some party gains illigitimate voting power. In this commit if a power spike is detected the computed ballot and total voting power will be from a previous snaphshot.

[72c72b8c06]: Adds a new metric spawning_neurons_count that counts the number of neurons in a spawning state. The metric is incremented in compute_neuron_metrics function when iterating through the neurons and a NeuronState::Spawning neuron is detected. Removes function create_test_neuron_builder and replaces it with NeuronBuilder::new_for_test

[6c59930a75]: Adds concurrency on to only allow on type of this workflow to run simultaneously, if new workflows are triggered in the same, any running job or workflow will be canceled in favor of the new one. Adds more content to rs/nns/governance/README.md. Fixes a bug in the reminderText of the review/reminder by adding a marker GOVERNANCE_CHECKLIST_REMINDER_DEDUP in the text and switching from using startsWith with includes

[ac9bb67a0a]: Improves comments on constant MINIMUM_DISBURSEMENT_E8S and it’s value.

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

Proposal 137253 – LaCosta | CodeGov

Vote: ADOPT

Root Canister


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

[d08ec4868c]: Replaces the logic to get the subnet id of the NNS in get_nns_subnet_id. Since the routing table is now sharded into multiple records, the call to Registry::get_value was replaced with Registry::get_subnet_for_canister

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

Proposal 137254 – LaCosta | CodeGov

Vote: ADOPT

Registry Canister

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

[648c311450]: Adds canister_cycles_cost_schedule to SubnetRecord

[73bb32695d]: Renames routing_table_mutation to initial_routing_table_mutations and updates it’s logic to return a vector of RegistryMutation to support both sharded routinh table and single routing table.

[636fd13b7f]: Updates MISSING_NODE_TYPES_MAP and uncomments logic to add missing node types to nodes.

[e915efecc8]: Improves comments on mutations_for_canister_ranges

[76b74b0816]: Adds a new field canister_cycles_cost_schedule to CreateSubnetPayload. This field has type CanisterCyclesCostSchedule which can be either Normal to use the cost schedule associated with a subnet’s type or Free in case it is a rented subnet.

[d42c3b2195]: Cleans up migration logic for canister ranges

[19502f0c93]: Adds the field timestamp_nanoseconds to the struct RegistryValue which represents the timestamp at which the registry mutation happened.

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 #137252 for Governance — ZoLee | CodeGov

Vote: Adopted

Reason: The build is reproducible and the wasm hash is a match.
The canister id rrkah-fqaaa-aaaaa-aaaaq-cai is correct and the install mode is upgrade.

567d2e1c24 chore: Increased the timeout from 5min to 15min for the governance_integration_test for debugging purposes.
b1b1c4e151 chore(nns): Adds governance in front of voting_power_snapshots_latest_snapshot_is_spike metric according to convention.
74cbd6cf7a feat(nns): Use a previous snapshot for ballots if an unusually high voting power is detected is the 3rd step now in place that disables the early adoption of proposals if the
voting power has a spike considered as gain of illegitimate voting power.
72c72b8c06 feat(nns): spawning_neurons_count metric is added to count the number of neurons in a spawning state
6c59930a75 fix(governance-tools): Adds concurrency for workflow runs, to prevent duplicate or conflicting runs of the same workflow, and updates the Gov Readme.
ac9bb67a0a chore(nns): Clarification of comments for MINIMUM_DISBURSEMENT_E8S.
6af80dc291 docs(governance): Updates changelog.

Proposal #137253 for r00t

Vote: Adopted

Reason: The build is reproducible and the wasm hash is a match.
The canister id r7inp-6aaaa-aaaaa-aaabq-cai is correct and the install mode is upgrade.

d08ec4868c feat(nns): Now root proposals call Registry::subnet_for_canister to get the NNS subnet id instead of reading from the Registry routing table, that will become sharded in the future.
b3efb00f64 docs(governance-backend): Updates changelog to add Support disbursing maturity to an account identifier, in addition to icrc1 account.

Proposal #137254 for Registry

Vote: Adopted

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

648c311450 feat: Addes a new canister_cycles_cost_schedule field to SubnetRecord to be used in the future.
73bb32695d test(registry): Sets up sharded routing table in registry tests, renamed routing_table_mutation to initial_routing_table_mutations.
636fd13b7f feat: Add new node type mappings for nodes in the registry.
e915efecc8 docs(nns): Adds comment for invariants for routing table shards.
76b74b0816 feat(registry): Addes a new canister_cycles_cost_schedule to CreateSubnetPayload it can be Normal as default or Free in case of subnet rentals.
d42c3b2195 chore(nns): Cleaning migration code for canister_ranges by setting mutations_for_canister_ranges to private.
19502f0c93 chore(ic-registry-transport): Adds timestamp_nanoseconds to RegistryValue used when the registry mutation happened.

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.