NNS Updates 2025-07-11

The NNS 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 5128134

__Proposer__: maximilian.summe at dfinity.org

__Source code__: [5128134d24b7a5b8e24a3d5d40c4cce9d81fd375][new-commit]

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


## Features & Fixes

* Add new unreleased proposal type.


## New Commits

```
$ git log --format="%C(auto) %h %s" 2f87fe95207dc6371a2f2dc273362ba03b41e0e9..5128134d24b7a5b8e24a3d5d40c4cce9d81fd375 --  ./rs/nns/governance ./rs/sns/init
 7d794e0a2c feat(nns-governance): Introduce fulfill subnet rental request proposal. (#5835)
 f6b9d5a3d6 chore(nns): fix a few typos in NNS Governance (#5856)
 894e3501dc chore(nervous-system): Update changelog for release 2025-07-06 (#5840)
```


## Current Version

__Current git hash__: 2f87fe95207dc6371a2f2dc273362ba03b41e0e9

__Current wasm hash__: f3e28dd6102fd0a9a959a4b0fecdd052b7391aab6ecd626e194e6afeeb36f07f


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


### WASM Verification

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

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

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

Node-rewards

# Upgrade the Node-rewards Canister to Commit 5128134

__Proposer__: maximilian.summe at dfinity.org

__Source code__: [5128134d24b7a5b8e24a3d5d40c4cce9d81fd375][new-commit]

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


## Features & Fixes

* Support registry timestamps internally, in preparation for reward calculation changes.
* Add storage for node metrics.


## New Commits

```
$ git log --format="%C(auto) %h %s" 02571e8215fa3e77da791e693cc238b2de3beae9..5128134d24b7a5b8e24a3d5d40c4cce9d81fd375 --  ./rs/node_rewards/canister ./rs/node_rewards ./rs/registry/node_provider_rewards
 55442a9493 feat(ic-registry-canister-client): Create in mem. mapping timestamp to registry versions in registry-canister-client (#5706)
 4feb95d301 feat(NRC): Add Node metrics to NRC (#5454)
 b3efb00f64 docs(governance-backend): Update Governance backend CHANGELOG files. (#5450)
```


## Current Version

__Current git hash__: 02571e8215fa3e77da791e693cc238b2de3beae9

__Current wasm hash__: a82f68db07ae20c3406dea3bf0c9441732c2522c87a44d33b248b5ef65d0cfa8


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


### WASM Verification

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

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

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

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

This should match `wasm_module_hash` field of this proposal.

Registry

# Upgrade the Registry Canister to Commit 5128134

__Proposer__: maximilian.summe at dfinity.org

__Source code__: [5128134d24b7a5b8e24a3d5d40c4cce9d81fd375][new-commit]

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


## Features & Fixes

###  Changed

* `create_subnet` now returns the new subnet's ID.


## New Commits

```
$ git log --format="%C(auto) %h %s" 2f87fe95207dc6371a2f2dc273362ba03b41e0e9..5128134d24b7a5b8e24a3d5d40c4cce9d81fd375 --  ./rs/registry/canister
 187d86a2b8 feat(registry): Make Registry.create_subnet return the ID of the new subnet. (#5885)
 85b2dafcbd refactor(registry): Use shards for get_subnet_for_canister (#5867)
 c6e9c65134 feat(registry): Read routing table through shards (#5809)
 894e3501dc chore(nervous-system): Update changelog for release 2025-07-06 (#5840)
```


## Current Version

__Current git hash__: 2f87fe95207dc6371a2f2dc273362ba03b41e0e9

__Current wasm hash__: 14958999c5dd64e5666c1552b69aa2155c0b343215fe76d9fd3e6a22b00f173e


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


### WASM Verification

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

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

# 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

Hey @msumme it would be helpful if these parent posts could have content that makes them easily searchable by proposal number. I see that you posted links to each proposal, but the search function of the forum doesn’t seem to pick out the proposal id from that url. Could you please update the script that generates these parent posts such that you explicitly post the proposal ID number in addition to the url?

137346 137347 137348 for future reviewers…

1 Like

Proposal 137346 | 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.

[7d794e0a2c]
Adds a new proposal type FulfillSubnetRentalRequest, not yet enabled, explained in good detail in the commit notes.

[f6b9d5a3d6]
Fixes typos in changelog and code.

[894e3501dc]
Updates changelog files. Refactors install_binary() in testnet/tools/lib.sh to use a temporary file for downloading.

Proposal 137347

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.

[187d86a2b8]
Adapts the create_subnet update method to return the ID of the new subnet as part of a Result.

[85b2dafcbd]
Adapts Registry::get_subnet_for_canister (and helper functions) so that this can now load only the required shards for a response instead of all of them.

[c6e9c65134]
Deletes Registry::get_routing_table_from_canister_range_records_or_panic and inserts the logic from this method into Registry::get_routing_table_or_panic, so that the various other functions using this (latter) method will now read the routing table as shards.

[894e3501dc]
Reviewed above.

Proposal 137348

Vote: Adopt

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

[55442a9493]
Adds field timestamp_to_versions_map to type StableCanisterRegistryClient along with associated changes as per description.

[4feb95d301]
Adds node metrics (node_id, num_blocks_proposed_total, num_blocks_failed_total) along with associated methods and tests.

[b3efb00f64]
Updates changelog files for various system canisters.

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.

proposals - [137346, 137347, 137348] Cyberowl | CodeGov

Proposals:

137346
137347
137348

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]

Commits Summary

proposal/137346 (Governance)

7d794e0a2c
11 modified
1 added

New enum FulfillSubnetRentalRequest for ProposalActionRequest, the endpoint is still in development. No behavior change.

f6b9d5a3d6
2 modified

Fix typo.

894e3501dc
7 modified

Update testnet script lib to downloaded “.gz” to a temporary file and then uses gunzip -c to decompress it.
Update change logs.

proposal/137347 (Registry)

187d86a2b8
5 modified

Function create_subnet_ now returns new_subnet.

85b2dafcbd
2 modified

Refactors out the raw key‐range iteration into a separate get_key_family_raw_iter_at_version helper that yields (String, &HighCapacityRegistryValue) and then has get_key_family_iter_at_version solely handle decoding/filtering. Now get_subnet_for_canister uses get_routing_table_shard_for_canister_id. get_routing_table_shard_for_canister_id looks up and decodes, at the given registry version, the most recent routing‐table shard whose starting canister ID is ≤ the target canister_id, and returns it as a RoutingTable. This makes things a bit more efficient.

c6e9c65134
2 modified

Since upgrading to sharded function, look at commit 85b2dafcbd, get_routing_table_or_panic func in Registry is simplified.

894e3501dc
Similar commit to proposal/137346.

proposal/137348 (Node-Rewards)

55442a9493
6 modified

Add timestamp_nanoseconds to StorableRegistryKey, allowing time-based queries or audits of registry changes.

4feb95d301
7 modified
9 added

New metrics num_blocks_proposed_total and num_blocks_failed_total. New protobuf schemas (SubnetIdKey, SubnetMetricsKey/Value, NodeMetrics), a MetricsManager that pulls per-node block-proposal stats from each subnet’s management canister, stores them in stable B-trees, computes daily deltas.

b3efb00f64
12 modified

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

7d794e0a2c feat(nns-governance): Adds the FulfillSubnetRentalRequest type for subnet rental request proposals, currently behind a feature flag. The commit description is very detailed including the notification of the Subnet rental canister, and also this will use the new canister_cycles_cost_schedule from CreateSubnetPayload in the Reghistry that can be Normal as default or Free in this case of subnet rentals.
f6b9d5a3d6 chore(nns): fix a few typos in NNS Governance, id to is and NEURON_DATA_VALIDATION_INTERNVAL to NEURON_DATA_VALIDATION_INTERVAL
894e3501dc chore(nervous-system): Updates changelog to 2025-07-06 for Gov, r00t and Reg. The testnet script part for install_binary now uses a temp folder to download and decompress gzipped binary.

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

187d86a2b8 feat(registry): create_subnet now returns new_subnet_id, this is needed for the Subnet rental canister
85b2dafcbd refactor(registry): Use shards for get_subnet_for_canister to make it more efficient.
c6e9c65134 feat(registry): As part of migration switches all reads in registry to reading sharded routing table.
894e3501dc chore(nervous-system): Duplicate

Proposal #137348 for Node-rewards-canister

Vote: Adopted

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

55442a9493 feat(ic-registry-canister-client): Adds timestamp_nanoseconds field to StorableRegistryKey and the set_value_at_version_with_timestamp method.
4feb95d301 feat(NRC): Adds Node metrics to NRC and also methods to fetch and store node metrics.
b3efb00f64 docs(governance-backend): Updates changelog.

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 #137346 | Gautier - CodeGov - Trial Period

Governance Canister Upgrade
Vote : Adopt

Build Success, Hashes match.

[7d794e0a2c] :
Add FulfillSubnetRentalRequest new proposal type, still WIP and behind feature flag. If user try to use it for now, will get InvalidProposal.
Check what is Rental subnet here for more info.

[f6b9d5a3d6] : Just a typo fix.

[894e3501dc] : Just few changelog updates and update testnet/tools/lib.sh to download binaries in a temp directory before unpacking. Use gunzip instead of zcat

Proposal #137347

Vote : Adopt
Registry Upgrade

Build Success, Hashes match.

[187d86a2b8] : create_subnet_ now return the subnet id.

[85b2dafcbd] : refactor get_subnet_for_canister to use shards.

[c6e9c65134] : Switch routing table to use shards.

[894e3501dc] : Same as above in Governance Canister Upgrade

Proposal #137348

Node-rewards Canister Upgrade.
Vote : Adopt

Build Success, Hashes match.

[55442a9493] Add set_value_at_version_with_timestamp method, lot of tests updated, add clear_registry_store to cleanup data. add timestamp_to_versions_map field.

[4feb95d301] Work on nodes metrics, with lot of tests.

[b3efb00f64] Update changelog.

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 137346 – LaCosta | CodeGov

Vote: ADOPT

Governance Canister


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

[7d794e0a2c]: Adds a new proposal type FulfillSubnetRentalRequest behind the feature flag ENABLE_FULFILL_SUBNET_RENTAL_REQUEST_PROPOSALS. Implements a validation method validate in rs/nns/governance/src/proposals/fulfill_subnet_rental_request.rs that checks that the fields from FulfillSubnetRentalRequest are non empty, not to large in case of the node_ids field which is capped by ABSURDLY_LARGE_NUMBER_OF_NODES_IN_A_SUBNET = 1000 and for the replica_version_id are a hexadecimal string of length 40.

[f6b9d5a3d6]: Fixes a typo in rs/nns/governance/CHANGELOG.md and in rs/nns/governance/src/timer_tasks/neuron_data_validation.rs

[894e3501dc]: Updates change logs to include adopted proposals and corresponding changes. Refactors the testnet/tools/lib.sh bash script to create a tmp file on which it stores the fetched .gz file, and then decompresses it with gunzip -c which is equivalent to the previous usage zcat >"$DEST.

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

[187d86a2b8]: Makes the function do_create_subnet return the new_subnet_id created.

[85b2dafcbd]: Updates the get_subnet_for_canister to use the new function get_routing_table_shard_for_canister_id to get the routing table using shards.

[c6e9c65134]: Switches from reading the routing table from a single key to multiple shards by essentially renaming function get_routing_table_from_canister_range_records_or_panic to get_routing_table_or_panic and deleting it’s previous implementation.

Proposal 137348 – LaCosta | CodeGov

Vote: ADOPT

Node-rewards Canister

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

[55442a9493]: Adds a new in memory mapping timestamp_to_versions_map

[4feb95d301]: Adds Node Metrics to the Node Rewards Canister

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

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 137346

Proposal

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

Screenshot from 2025-07-15 11-39-40

Code Review

7d794e0a2c: New proposal type: FulfillSubnetRentalRequest, only the user is able to create canister on that subnet once executed and no cycles are charged. It will be under a flag for the next few releases waiting for the feature to be fully implemented.
f6b9d5a3d6: fix some typos
894e3501dc: Update changelog.


Adopt 137347

Proposal

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

Screenshot from 2025-07-15 11-39-57

Code Review

187d86a2b8: Registry.create_subnet should now return the ID of the new subnet.
85b2dafcbd: Refactors the get_subnet_for_canister function in the registry canister to leverage sharding for improved efficiency. Instead of loading the entire routing table, it now fetches only the relevant shards based on the canister ID, significantly reducing resource usage for large routing tables.
c6e9c65134: Switches all reads of the registry to reading sharded ones.
894e3501dc: Update Changelog.


Adopt 137348

Proposal

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

Screenshot from 2025-07-15 11-40-14

Code Review

55442a9493: New feature to maintain an in-memory mapping of timestamps to registry versions in the ic-registry-canister-client, along with necessary updates to related components. Adds a timestamp_to_versions_map (a BTreeMap<u64, HashSet<RegistryVersion>>) to StableCanisterRegistryClient to track timestamp-to-version mappings in memory.
4feb95d301: Add node metrics to the nodes rewards manager, this is in line with the future performance based rewards.
b3efb00f64: Update changelog.

That’s a good idea. I will add it to our queue to see if there’s a simple way to do that.

1 Like