NNS Updates 2025-06-20

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

Proposals to be Submitted

Governance

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

# Upgrade the Governance Canister to Commit cc066e9

__Proposer__: daniel.wong at dfinity.org

__Source code__: [cc066e9957ad2f4f7515e9906bb7df4d2fcf78b7][new-commit]

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


## Features & Fixes

###  Added

* Neurons can now perform SetFollowing to configure their following on multiple
  topics at once. Whereas, before, they would have to perform multiple Follow
  operations, one for each topic. This brings NNS into alignment with SNS.


## New Commits

```
$ git log --format="%C(auto) %h %s" 12afb2543219f43e4088e1ecd6d235962e71b211..cc066e9957ad2f4f7515e9906bb7df4d2fcf78b7 --  ./rs/nns/governance ./rs/sns/init
 932823aec0 feat(nns): Set following on multiple topics at once. (#5506)
 035f978fb5 refactor(nns): Refactor distribute_rewards to separate immutable and mutable operations (#5494)
 f57f0ed608 chore(nns,sns): Update release notes after release (#5547)
 7c587c8055 chore(nns): Cleanup USE_NODE_PROVIDER_REWARD_CANISTER flag and code (#5546)
```


## Current Version

__Current git hash__: 12afb2543219f43e4088e1ecd6d235962e71b211

__Current wasm hash__: 5965ebd3d45d480387f72229553fcd843711fc222e0d78c4f0d276fcfc791bab


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


### WASM Verification

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

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

# 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/137081

# Upgrade the Registry Canister to Commit cc066e9

__Proposer__: daniel.wong at dfinity.org

__Source code__: [cc066e9957ad2f4f7515e9906bb7df4d2fcf78b7][new-commit]

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


## Features & Fixes

### Changed

* The `check_routing_table_invariants` method now checks the new canister_ranges_
  and ensures they match the `routing_table` record. The old invariant check will be
  removed once `routing_table` is removed.


## New Commits

```
$ git log --format="%C(auto) %h %s" 12afb2543219f43e4088e1ecd6d235962e71b211..cc066e9957ad2f4f7515e9906bb7df4d2fcf78b7 --  ./rs/registry/canister
 f57f0ed608 chore(nns,sns): Update release notes after release (#5547)
 d5d85d2072 fix(registry): Handle currently impossible edge case in canister_ranges_ updates (#5545)
 782c748f02 feat(registry): Add invariant check for sharded canister migrations (#5535)
```


## Current Version

__Current git hash__: 12afb2543219f43e4088e1ecd6d235962e71b211

__Current wasm hash__: a1af9ac740a5840125a79eb24c2663fdb3301637e5c4892bf24875084037fbbb


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


### WASM Verification

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

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

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

Proposal 137080 – LaCosta | CodeGov

Vote: ADOPT

Governance Canister

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

[932823aec0]: Adds the SetFollowing command allowing neurons to specify followees for multiple governance topics in a single operation whereas previously it was needed to call the Follow multiple times. Adds structs SetFollowing and FolloweesForTopic and implements validations guaranteeing that the topics are unique and that the number of followees is below MAX_FOLLOWEES_PER_TOPIC

[035f978fb5]: Separates the method distribute_rewards into two new ones, calculate_voting_rewards and distribute_voting_rewards_to_neurons in order to distinguish between calculations and mutations. Refactors code accordingly

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

[7c587c8055]: Removes feature flag USE_NODE_PROVIDER_REWARD_CANISTER and related code that responsible for switching between get_node_providers_monthly_xdr_rewards_from_node_provider_reward_canister and get_node_providers_monthly_xdr_rewards_from_registry.

Proposal 137081 – 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

[d5d85d2072]: Fixes an edge case in the mutations_for_canister_ranges function where it was assumed that a CanisterId(0) shard always existed except if new_shards was empty. It updated the logic with entry().or_insert_with() to ensure that a CanisterId(0) shard exists even if new_shards is not empty. Adds a test accordingly.

[782c748f02]: Modifies method get_routing_table to call new helper function get_routing_table_shards that returns the new sharded canister_ranges_ records and compares it against the legacy routing table. Creates a new test if_sharded_ranges_they_must_match_original_routing_table and a new benchamrk measure_routing_table_invariant_checks_shards_and_unsharded to measure the execution of check_routing_table_invariants.

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.

2 Likes

proposals - [137080, 137081] Cyberowl | CodeGov

Proposals:

137080
137081

Vote: [ADOPT, ADOPT]

Reason & Feedback:

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

Checks:

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

Overall Summary:

The governance changes add a new SetFollowing command that allows neurons to configure followees for multiple topics in a single operation, streamlining what previously required separate calls per topic. Removes deprecated node-provider reward fetching paths. The registry updates improve canister routing table handling by reading sharded canister_ranges entries from snapshots, reconstructing routing tables from those shards, and validating consistency with main routing table records.

Commits Summary

proposal / 137080 (Governance)

932823aec0
Adds a new SetFollowing command that lets a neuron configure its list of followees for multiple governance topics in one operation, what previously required separate follow calls per topic.

035f978fb5
Extracts the reward‐calculation into a standalone, side‐effect–free calculate_voting_rewards and then having distribute_voting_rewards_to_neurons apply the results, the code’s intent becomes clearer, it’s easier to test.

f57f0ed608
Update change logs.

7c587c8055
Removes the old feature‐flagged path for fetching node-provider rewards, eliminating the use_node_provider_reward_canister toggle, its helper methods, and the registry‐based implementation.

proposal / 137081 (Registry)

f57f0ed608
Update change logs. Same commit as proposal / 137080

d5d85d2072
The code guarantees there’s always a shard at CanisterId(0). That prevents the later .range(zero_id..=…)…unwrap() from ever panicking if new_shards started out non‐empty but lacked the zero‐key entry. New test verifies that edge case.

782c748f02
Reads any sharded canister_ranges entries from the snapshot, reconstructs a routing table from those shards, asserts it matches the main routing table record, and then returns the record.

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

Screenshot 2025-06-23 152436

Vote: Adopt

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

[932823aec0]
Adds a variant SetFollowing to enum Command, containing an optional vector and allowing followees to be set for multiple proposal voting topics at once.

[035f978fb5]
Splits the existing Governance::distribute_rewards method into two new methods, calculate_voting_rewards and distribute_voting_rewards_to_neurons, so as to distinguish more clearly between the two stages.

[f57f0ed608]
Updates changelog files.

[7c587c8055]
Removes use_node_provider_reward_canister and related flags, now that this canister is in regular use, along with code for functions that are now performed by the canister.

Proposal 137081

Vote: Adopt

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

[f57f0ed608]
Updates changelog files.

[d5d85d2072]
Within mutations_for_canister_ranges, changes the handling of new_shards so that an empty CanisterId: "0" entry is always added rather than just adding it if new_shards is empty. This is intended to prevent a hypothetical error.

[782c748f02]
Modifies fn get_routing_table (called by check_routing_table_invariants) to include a check that routing table shards (if present) match the snapshotted routing table record.

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.

Adopt 137080

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 09-39-44

Code Review

932823aec0: Introduces a SetFollowing variant to the Command enum, which includes an optional vector to enable setting followees for multiple proposal voting topics simultaneously.
035f978fb5: Divides the Governance::distribute_rewards method into two separate methods, calculate_voting_rewards and distribute_voting_rewards_to_neurons, to better differentiate between the two phases.
f57f0ed608: update changelogs.
7c587c8055: removes the use_node_provider_reward_canister and associated flags, as the canister is now in standfard use, along with removing code for functions now handled by the canister.

Adopt 137081

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 09-40-09

Code Review

f57f0ed608: Updates changelog.
d5d85d2072: Adjusts mutations_for_canister_ranges to always add an empty CanisterId: “0” entry for new_shards, instead of only adding it when new_shards is empty, to avoid a potential error.
782c748f02: Updates fn get_routing_table (used by check_routing_table_invariants) to include a verification that routing table shards, if present, align with the snapshotted routing table record.