NNS Updates 2025-03-1

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

These proposals are shifted by a day because it took a bit longer to merge the changes that we wanted to include into the release.

Governance

# Upgrade the Governance Canister to Commit ebb190b

__Proposer__: arshavir.ter.gabrielyan at dfinity.org

__Source code__: [ebb190bf1da0dba3e486b78c95cf5a3c5542e2f3][new-commit]

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


## Features & Fixes

* Define API for disburse maturity. While disburse maturity is not yet enabled, clients may already start preparing for this new NNS neuron operation.

###  Deprecated

* `NnsCanisterUpgrade` and `NnsRootUpgrade` NNS funtions are made obsolete.


## New Commits

```
$ git log --format="%C(auto) %h %s" 2f17dd8c0203b12ac9d5a9c7a43534624d412728..ebb190bf1da0dba3e486b78c95cf5a3c5542e2f3 --  ./rs/nns/governance ./rs/sns/init
 55dcbc7c26 perf(nns): Change from benchmarking listing neurons for unstake maturity to benchmarking the entire unstake maturity operation (#4183)
 e2eae97925 feat(nns): Define API for disburse maturity (#4138)
 873d9cb2ff refactor(nns): Make Governance environment parameters compatible with timer usages (#4161)
 495605cea2 refactor(nns): Move seeding to timer task (#4123)
 8fdc6adefb chore(nns): Fix NNS Governance release log (#4099)
 ead472779e chore(nns): Disable NnsCanisterUpgrade/NnsRootUpgrade (#3874)
 9558ea92c0 refactor(governance): move canister_state into main lib (#4063)
 7bbe8da0c8 docs(nns): Updated CHANGELOGs for NNS canister upgrade proposals that were just made. (#4061)
```


## Current Version

__Current git hash__: 2f17dd8c0203b12ac9d5a9c7a43534624d412728

__Current wasm hash__: fb4f2abad21680b1894a8bfbb6d280f9d4cc19fe2038480beaf50aad40d85df8


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


### WASM Verification

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

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

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

SNS-W

# Upgrade the Sns-wasm Canister to Commit ebb190b

__Proposer__: arshavir.ter.gabrielyan at dfinity.org

__Source code__: [ebb190bf1da0dba3e486b78c95cf5a3c5542e2f3][new-commit]

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


## Features & Fixes

* Enable [automatic advancement of SNS target versions for newly launches SNSs](https://forum.dfinity.org/t/proposal-automatic-sns-target-version-advancement-for-newly-created-snss).

## New Commits

```
$ git log --format="%C(auto) %h %s" 2f17dd8c0203b12ac9d5a9c7a43534624d412728..ebb190bf1da0dba3e486b78c95cf5a3c5542e2f3 --  ./rs/nns/sns-wasm ./rs/sns/init
 f70f89db22 feat(sns): Enable automatic advancement of SNS target versions for newly launches SNSs (#3901)
 7bbe8da0c8 docs(nns): Updated CHANGELOGs for NNS canister upgrade proposals that were just made. (#4061)
```


## Current Version

__Current git hash__: 2f17dd8c0203b12ac9d5a9c7a43534624d412728

__Current wasm hash__: a9af59d2dd667f312d116449a446ffb6bee05a1502212d504ecea275beb90e25


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


### WASM Verification

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

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

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

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

This should match `wasm_module_hash` field of this proposal.
1 Like

Hey @aterga would you please apply tags on this post and the other similar posts from the last month as Service Nervous System Management proposals and Protocol Canister Management? That was being done up until about a month ago. It makes it a little easier to find the proposals in the search bar.

Adopt proposal 135613

Proposal

  • Canister id rrkah-fqaaa-aaaaa-aaaaq-cai is indeed the governance canister.
  • The upgrade args correspond to the empty args.
  • The install mode is indeed upgrade.
  • The wasm hash is reproducible.

image

Code review

The code modifications in rs/nns/governance directory: the introduction of a DisburseMaturity feature, the relocation of canister state management to a new module, the establishment of a timer tasks framework, adjustments to dependencies, and revisions to the changelog. The DisburseMaturity command, integrated into the ManageNeuron API via protocol buffers and Candid interfaces, enables users to transfer a percentage of a neuron’s maturity to a ledger account. However, its implementation remains incomplete, currently returning an “unavailable” error in src/governance.rs.

Canister state management has been extracted from canister/canister.rs into src/canister_state.rs, with the Environment trait split into separate Environment and RandomnessGenerator interfaces. This refactoring enhances modularity and leverages Arc for thread-safe sharing, aligning with the IC’s asynchronous execution model. However, remnants like CanisterEnv and timer scheduling linger in the original file, and the RNG begins uninitialized, posing a risk of errors if accessed prior to seeding via the heartbeat.

A new timer_tasks module introduces a SeedingTask that periodically reseeds the RNG using raw_rand, with a retry mechanism for failures. There’s no safeguard against task overlap if raw_rand calls exceed the seeding interval. I suggest migrating all prior tasks to this framework, implementing a concurrency control mechanism, and allowing configurable initial delays to prevent conflicts during initialization, thereby maximizing the module’s

1 Like

Proposal 135613 – LaCosta | CodeGov

Vote: ADOPT

Governance Canister

image

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

[55dcbc7c26]: Move unstake_maturity_of_dissolved_neurons from governance to the neuron_store and replaces list_neurons_ready_to_unstake_maturity benchmarks with unstake_maturity_of_dissolved_neurons. The previous benchmark only measured the listing of the neurons IDs that were dissolved, where the unstake_maturity_of_dissolved_neurons benchmark also measures unstaking their maturity.

[e2eae97925]: Defines a DisburseMaturity struct in the manage_neuron module with fields percentage_to_disburse and (optional) to_account. In case of not providing an account the caller’s will be used.

[873d9cb2ff]: Governance struct dependencies were previously stored using the Box struct which meant their were uniquely owned. This was switched to using Arc that provides shared ownership. Moved randomness methods from the Environment trait to a new RandomnessGenerator trait.

[495605cea2]: Changes to using the new timer_task library to schedule reseeding of the rng. Previously this was done in the schedule_seeding method that received the delay as a parameter and set a timer with ic_cdk_timers::set_timer. Now it’s is own RecurringAsyncTask trait with the scheduler being in timer_tasks/mod.rs which not only makes it reusable, isolated and

[8fdc6adefb]: Fixes the NNS Governance release log to be in chronological order.

[ead472779e]: Disabled NnsCanisterUpgrade and NnsRootUpgrade making use of them throw an obsolete error message. Updated tests accordingly.

[9558ea92c0]: Extracted the canister_state logic from governance/canister/canister.rs into it’s own file governance/src/canister_state.rs which allowed other parts of the governance module and in particular to this commit time-related functions, to access the state in a thread safely. Adjustments to this change were made accordingly.

[7bbe8da0c8]: Moves changes in the nns unreleased_changelog to the CHANGELOG with the appropriate proposals reference.

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 - 135613 – Cyberowl | CodeGov

Checks

Vote: ADOPT
Hash Match: MATCH
Feedback: NONE
Proposer Check: MATCH
Target Canister: MATCH
Reason:
Build completed successfully, hashes are verified, and commits match the changes described with the code implemented.

Commits

55dcbc7c26
Unstaking logic is moved from the governance layer into the neuron store. Removes old list_neurons_ready_to_unstake_maturity benchmarks and replaces them with unstake_maturity_of_dissolved_neurons_heap/stable.

e2eae97925
DisburseMaturity struct added under the manage_neuron module, with fields for percentage_to_disburse and to_account. DisburseMaturity variant in the ManageNeuronCommand enum. DisburseMaturityResponse struct in the responses module, with an optional field for disbursed amounts.

873d9cb2ff
New trait, RandomnessGenerator, is introduced to handle all random number operations. Convert several dependencies from Box to Arc.

495605cea2
New timer-task mechanism schedules recurring tasks—specifically, it periodically reseeds the RNG by invoking a new seeding task from the ic-nervous-system-timer-task crate.

8fdc6adefb
Matches description Fix NNS Governance release log.

ead472779e
Removes NnsCanisterUpgrade and NnsRootUpgrade from the allowed lists in allowed_when_resources_are_low and can_have_large_payload.

9558ea92c0
New package named ic-nervous-system-time-helpers. now_nanoseconds() and now_seconds(), which are designed to be unit-test-friendly and work in both wasm32 and non-wasm32 environments.

7bbe8da0c8
Matches description Updated CHANGELOGs for NNS canister upgrade proposals that were just made.

If this review is helpful please follow:

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 #135613 for Governance — Zack | CodeGov

Vote: Adopted

Reason: Builds fine and the wasm hash is a match.

To be edited.

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 135613 - Zane | CodeGov

Vote: ADOPT
Reason: Build completes successfully, both hashes and reviewed commits match their descriptions.

130613

55dcbc7c26 Moved unstake_maturity_of_dissolved_neurons logic to neuron store’s unstake_maturity_of_dissolved_neurons and added 2 separate bench scopes, one for listing and one for unstaking logic. Modified list_neurons_ready_to_unstake_maturity_* benches so that it 100 neurons to the neuron store instead of only one, replaced call unstake_maturity_of_dissolved_neurons with list_neurons_ready_to_unstake_maturity and renamed them to unstake_maturity_of_dissolved_neurons_*.

e2eae97925 Added DisburseMaturity/DisburseMaturityResponse structs for upcoming disburse maturity API, the former holds the disburse percentage and an optional address where it should be transferred to, while the latter returns the amount disbursed, both have been added to ManageNeuronCommand request/response alongside variants with the same name.

manage_neuron_internal method has been modified to match the Command::DisburseMaturity variant, but the actual logic hasn’t been implemented yet, so a GovernanceError is returned.

873d9cb2ff Moved randomness interface out of Environment trait to a new one called RandomnessGenerator. Added a new field to Governance struct to hold the implementation for rng operations. Modified all Governance dependencies, except the randomness one, to be wrapped with an Arc instead of a Box.

495605cea2 Moved schedule_seeding method which initializes and periodically updates rng seed to timer_tasks module.

8fdc6adefb Matches description.

ead472779e Removed NnsCanisterUpgrade and NnsRootUpgrade from list of valid NNS functions in allowed_when_resources_are_low and can_have_large_payload methods. Modified canister_and_function to no longer match them and return a GovernanceError instead.

9558ea92c0 Moved governance global state from governance/canister/canister.rs to a separate module and added new methods so it can be borrowed. Added separate crate for time helpers and moved now_nanoseconds and now_seconds inside it.

7bbe8da0c8 Matches description.

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