NNS Updates 2025-07-25

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

Proposals to be Submitted

Cycles-minting

# Upgrade the Cycles-minting Canister to Commit 4b7cde9

__Proposer__: jason.zhu at dfinity.org

__Source code__: [4b7cde9a0e3b5ad4725e75cbc36ce635be6fa6a8][new-commit]

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


## Features & Fixes

###  Changed

* Cycles Minting Limit is not enforced for the Subnet Rental Canister when it is topping up itself.
  This is necessary for the canister to mint large amounts of cycles to pay for the subnet rentals.


## New Commits

```
$ git log --format="%C(auto) %h %s" 250daf4dd0cf7ea74c496b45457dd47ced16368c..4b7cde9a0e3b5ad4725e75cbc36ce635be6fa6a8 --  ./rs/nns/cmc
 1c325081a0 fix(cmc): Change version to correctly reflect the State version (#6058)
 1da26cc6ff feat(cmc): Separate cycles minting limit for Subnet Rental Canister (#5877)
 016e8ed658 feat: EXC-2056: Update CanisterSettings for environment variables (#5617)
 d3649d8579 chore(nns): update release notes (#5368)
```


## Upgrade Arguments

```candid
()
```


## Current Version

__Current git hash__: 250daf4dd0cf7ea74c496b45457dd47ced16368c

__Current wasm hash__: 28df08368379862ee17f69542b0779670deec200a08f23540c3e6168c07cc9aa


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


### WASM Verification

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

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

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

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

This should match `wasm_module_hash` field of this proposal.


### Upgrade Arguments Verification

[`didc`][latest-didc] is required.

[latest-didc]: https://github.com/dfinity/candid/releases/latest

```
didc encode '()' | xxd -r -p | sha256sum

```

This should match the `arg_hash` field of this proposal.

Governance

# Upgrade the Governance Canister to Commit 4b7cde9

__Proposer__: jason.zhu at dfinity.org

__Source code__: [4b7cde9a0e3b5ad4725e75cbc36ce635be6fa6a8][new-commit]

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


## Features & Fixes

###  Added

* Minor improvement on voting power spike detection mechanism - the mechanism is kept in place even
  when the voting power snapshot is not full.

###  Changed

* `AddOrRemoveNodeProvider` and `update_node_provider` now require 32-byte account-identifiers, which are equivalent
  to the 28-byte identifiers except with the checksum. This is a breaking change for the API.
* `NodeProvider.reward_account` always returns the 32-byte account identifier, even if the
  node provider was created with a 28-byte identifier. This is to ensure consistency in the API and to make it easier
  to use the reward account in other contexts, such as looking up the account in the ledger. All clients needed to
  support the 32-byte address already, so this is not a breaking change for the API.


## New Commits

```
$ git log --format="%C(auto) %h %s" 65f66f13fe07b3266ac9d1b44413fd5f0e9b4463..4b7cde9a0e3b5ad4725e75cbc36ce635be6fa6a8 --  ./rs/nns/governance ./rs/sns/init
 447105bd1b feat(sns/nns): Add memory_metrics to canister_status endpoints (#6035)
 696d448ffa feat(governance): Add validation and fix display for reward_account (#6033)
 2a2d6c212f feat(nns): Keep the voting power spike detection when the snapshots are not full (#5932)
 4dc479127a docs(governance): Added entries to Governance backend CHANGELOGs for 2025-07-18. (#5980)
 f56ac62826 feat(nns-governance): Execute FulfillSubnetRentalRequest proposals. (#5854)
```


## Current Version

__Current git hash__: 65f66f13fe07b3266ac9d1b44413fd5f0e9b4463

__Current wasm hash__: 10ced0fec20794640fe45d0e44960faeecaeda8b1b032a04082c758192f24ac6


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


### WASM Verification

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

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

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

Proposal 137582 | Gautier - CodeGov - Trial Period

Governance Canister Upgrade

Build Success, Hashes match.

Vote : Approve

[447105bd1b] feat(sns/nns): Add memory_metrics to canister_status endpoints (#6035) - This commit adds the memory_metrics field to the canister_status endpoint response of SNS root and NNS root canisters, making it accessible via their public API. This exposes internal memory metrics (heap, stable memory, etc.) that were previously only visible to classic canister controllers. - tests has errors : feat(sns/nns): Add memory_metrics to canister_status endpoints (#6035) · dfinity/ic@447105b · GitHub

[696d448ffa] feat(governance): Add validation and fix display for reward_account (#6033) - The AddOrRemoveNodeProvider and update_node_provider calls now require 32-byte account identifiers (with checksum), replacing the previous 28-byte formats. In addition, NodeProvider.reward_account always returns the 32-byte identifier, to ensure consistency with the format expected by the Ledger. Just note that https://github.com/dfinity/ic/commit/696d448ffa#diff-1ae4a455e2b10f37cd5c56b0c1f3442e513efceccab5a6d0a87b18f85c1ad721R11-R22 comment is wrong here. Test note passing neither.

[2a2d6c212f] feat(nns): Keep the voting power spike detection when the snapshots are not full (#5932) - enable the MAX_VOTING_POWER_SNAPSHOTS check is cfg!(feature = “test”) is set. Test note passing neither.

[4dc479127a] docs(governance): Added entries to Governance backend CHANGELOGs for 2025-07-18. (#5980) - changelog update

[f56ac62826] feat(nns-governance): Execute FulfillSubnetRentalRequest proposals. (#5854) - this is the impl of the FulfillSubnetRentalRequest, the new proposal introduced in previous commit. Not yet tested, but ok as it’s not yet available and behind a flag.

Proposal 137583

check previous screen for hash.

Cycles-minting Canister Upgrade

Build Success, Hashes match.

Vote : Approve

[1c325081a0] fix(cmc): Change version to correctly reflect the State version (#6058) - change the state version from 3 to 2 to reflect real state version.

[1da26cc6ff] 1da26cc6ff feat(cmc): Separate cycles minting limit for Subnet Rental Canister (#5877) - This commit introduces a separate cycle minting limit for the Subnet Rental Canister, to allow it to mint massive amounts of cycles (e.g. 6 months for an entire subnet) without impacting the usual CMC minting quotas. A new StateV2 is introduced to manage this behavior.

[016e8ed658] 016e8ed658 feat: EXC-2056: Update CanisterSettings for environment variables (#5617) - This commit adds, under a feature flag, support for environment variables in CanisterSettings, allowing create_canister and update_settings calls to define key/value pairs accessible at canister execution.

[d3649d8579] d3649d8579 chore(nns): update release notes (#5368) - 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.
1 Like

proposals - [137582, 137583] Cyberowl | CodeGov

Proposals:

137582
137583

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]

Commits Summary

proposal/137582 (Governance)

447105bd1b
New MemoryMetrics and MemoryMetricsFromManagementCanister structures to capture detailed memory usage breakdowns (e.g., WASM, stable, and global memory sizes) and integrates them into various canister status result types.

696d448ffa
AccountIdentifier::into_proto_with_checksum and wires it into Candid conversions, governance validation, and reward/disbursement paths so that every Node‑Provider–related API now requires and returns 32‑byte account identifiers that include a checksum. T

2a2d6c212f
Voting‑power spike detection now stays active even when the snapshot buffer isn’t yet full, but it is automatically skipped under the "test" feature to avoid disrupting test setups with large voting‑power changes.

4dc479127a
Update change logs.

f56ac62826
FulfillSubnetRentalRequest is now validated, routed from the main governance match‑arm.
Verify a pending rental request
call registry.create_subnet with a free‑cycles schedule and SubnetType::Application
notify the Subnet Rental canister to create a rental agreement.

proposal/137583 (Cycles-minting)

1c325081a0
Fix StateVersion of StateV2

1da26cc6ff
The CMC now enforces two distinct cycles‑minting rate limits: the existing hourly base cap and a new monthly cap specifically for the Subnet Rental Canister, implemented via a refactored Limiter::check_and_add_cycles and a CyclesMintingLimiterSelector that is threaded through all minting paths. State is migrated to StateV2 to persist the new limits/limiters,

016e8ed658
Adds initial environment‑variable support for canisters, a new environment_variables field is added through config flags, CanisterSettingsArgs, CanisterSettings, validation, CanisterManager, EE builder, CMC conversions, management‑canister Candid, and extensive unit tests.

d3649d8579
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 137582 | Tim - CodeGov

Vote: Adopt

Reason: This proposal upgrades the Governance canister. Commits match descriptions and the reasoning behind the changes is sound. Running the provided verification code returned a “403 Forbidden” error as shown in the image above, so I was unable to verify the wasm hashes. However, two other reviewers have so far verified the hashes so I have voted to adopt on this basis. Commits are reviewed below.

[447105bd1b]
Adds field memory_metrics (consisting of 8 metrics) to type CanisterStatusResult, which is returned by the canister_status update method of both the NNS and SNS root canisters.

[696d448ffa]
Adds method Governance::validate_add_or_remove_node_provider, serving to validate a proposal to add or remove a node provider with respect to the expected requirements (fields not missing, can’t add an already existing node provider, etc) and to ensure that the account identifier is 32 bytes long (so that it includes the checksum).

[2a2d6c212f]
Adapts VotingPowerSnapshots::previous_ballots_if_voting_power_spike_detected so that the check for voting power spikes will still happen (outside of tests) even if voting power snapshots are not yet full.

[4dc479127a]
Updates changelog files.

[f56ac62826]
Adds logic for the execution of the previously introduced new proposal type FulfillSubnetRentalRequest. This includes methods to check the features flag for enabling this proposal type (currently disabled), to verify that an appropriate rental request exists, to assemble the subnet payload and create the subnet itself, and to notify the subnet rental canister that this has been completed.

Proposal 137583

Vote: Adopt

Reason: This proposal upgrades the Cycles-Minting canister. Commits match descriptions and the reasoning behind the changes is sound. The same issue with verification occurred as for the previous proposal, but I note that other reviewers have performed the verification successfully. Commits are reviewed below.

[1c325081a0]
Changes StateV2::state_version to return StateVersion(2) instead of StateVersion(3) so as to align with the canister state version that is currently in use.

[1da26cc6ff]
Sets a specific monthly cycles minting limit for the subnet rental canister of 500 quadrillion, in contrast to the existing limit of 150 quadrillion cycles for other uses, and adds logic to check for an implement this distinction. (@msumme I was unaware that cycles had the same collective noun as pandas. I hope this catches on!) Also adds specifications for canister state StateV2 along with associated migration logic.

[016e8ed658]
Adds an environment_variables flag to indicate whether environment variables are supported. Adds environment_variables as a field to various canister-related types, implemented as a BTreeMap or vector of name-value pairs.

[d3649d8579]
Updates changelogs.

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.

Proposal 137582 – LaCosta | CodeGov

Vote: ADOPT

Governance Canister


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

[447105bd1b]: Adds a new metric memory_metrics to CanisterStatusResult to the canister_status endpoint on the SNS root canister and NNS root canister.

[696d448ffa]: Updates AddOrRemoveNodeProvider and update_node_provider to now require 32-byte account-identifiers. Adds a new validation validate_add_or_remove_node_provider to Action::AddOrRemoveNodeProvider that validates if the NP exists or doesn’t, depeding if the the change is to add a NP or to remove one and also if the account_identifier is 32 bytes long with a new function validate_account_identifier that is also used in update_node_provider. Refactors the code to also use into_proto_with_checksum()

[2a2d6c212f]: Since a lot of tests involve creating a lot of voting power this could trigger the spike detection mechanism, so tests are allowed to skip previous_ballots_if_voting_power_spike_detected when the snapshots are not full

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

[f56ac62826]: Implements the execution of FulfillSubnetRentalRequest proposals behind a feature flag. There is still some issues regarding the fields that should be present in a RentalRequest and SubnetFeatures but are marked as TODO and should be fixed before removing the feature flag.

Proposal 137583 – LaCosta | CodeGov

Vote: ADOPT

Cycles-minting Canister


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

[1c325081a0]: Fixes a typo when setting the State version in the StateVersion struct

[1da26cc6ff]: Adds a new method to the Limiter struct check_and_add_cycles that aggregates three uses of methods which allows to change their visibility and removes potencial duplicate code. The function checks the cycles to add against constant LIMITER_REJECT_COUNT and rejects if the cycles to be minted exceed the limit. Adds a new constant SUBNET_RENTAL_DEFAULT_CYCLES_LIMIT to be used as the limit for the number of cycles that can be minted by the Subnet Rental Canister in a month. In order to support the new limiter there was an update in the State version to StateV2 (there was a typo when setting the version in the StateVersion struct but it was fixed in the next commit 1c325081a0).

[016e8ed658]: Adds environment variables to CanisterSettings under a feature flag disabled by default and tests accordingly.

[d3649d8579]: 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.

I never knew that about pandas, and that is the coolest thing I’ve learned today.

3 Likes

This is too funny. Y’all made my day @msumme and @timk11.

2 Likes

Adopt 137582

Proposal

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

Screenshot from 2025-08-14 08-29-34

Code Review

447105bd1b: Add memory related metrics to the canister_status endpoints.
696d448ffa: Added checksum validation for node provider reward accounts and updated output to always show the 32-bit, checksum-included format for consistency and easier lookup.
2a2d6c212f: Voting power spike detection now runs even when snapshots aren’t full, preventing downtime in detection after clearing snapshots to handle false positives.
4dc479127a: Update changelogs.
f56ac62826: Implements execution for the new FulfillSubnetRentalRequest proposal type, introduced earlier but previously unimplemented. Currently behind a feature flag and untested; end-to-end tests will be added before enabling.


Adopt 137583

Proposal

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

Screenshot from 2025-08-14 08-30-00

Code Review

1c325081a0: Update the version to correctly reflect that stat eversino.
1da26cc6ff: Adds a separate cycles minting limit for the Subnet Rental Canister, allowing large one-time mints without impacting normal canister minting. Includes a migration to StateV2 for the new limiter.
016e8ed658: Adds environment variables to CanisterSettings (behind a feature flag), allowing them to be set via create_canister and update_settings methods.
d3649d8579: update changelogs.