NNS Updates 2025-02-01

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 c5e098e

__Proposer__: andre at popovit.ch

__Source code__: [c5e098e8cc8e62249e6d7f4ed09e6c2ed87fc800][new-commit]

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


## Features & Fixes

###  Added

####  List Neurons Paging

Two new fields are added to the request, and one to the response.

The request now supports `page_size` and `page_number`.  If `page_size` is greater than 
`MAX_LIST_NEURONS_RESULTS` (currently 500), the API will treat it as `MAX_LIST_NEURONS_RESULTS`, and
continue procesisng the request.  If `page_number` is None, the API will treat it as Some(0)

In the response, a field `total_pages_available` is available to tell the user how many
additional requests need to be made.

This will only affect neuron holders with more than 500 neurons, which is a small minority.

This allows neuron holders with many neurons to list all of their neurons, whereas before, 
responses could be too large to be sent by the protocol.

####  Periodic Confirmation

Enabled voting power adjustment and follow pruning.

#####  Prior Work

This section describes related changes in previous releases.

We already started recording how long it's been since neurons have confirmed
their following (aka refreshed voting power). Neurons were also given the
ability to confirm their following. Those who have never confirmed are
considered as having refreshed on Sep 1, 2024.

This feature was proposed and approved in motion [proposal 132411].

[proposal 132411]: https://dashboard.internetcomputer.org/proposal/132411

#####  New Behavior(s) (In This Release)

With this enablement, not refreshing for more than 6 months will start to affect
the neuron. More precisely,

1. If a neuron has not refreshed in 6 months, then votes have less influence on
   the outcome of proposals.

2. If a neuron has not refreshed in 7 months,

    a. It stops following other neurons (except on the NeuronManagement topic;
       those followees are retained).

    b. Its influence on proposals goes to 0.

####  Migrating Active Neurons to Stable Memory

In this relesae, we turn on 2 features related to migrating active neurons to stable memory:

1. `allow_active_neurons_in_stable_memory`: this allows the canister to look for active neurons in
   stable memory, while previously the canister always assumes active neurons are always in the heap.

2. `use_stable_memory_following_index`: this lets the canister use the neuron following index in the
   stable memory, instead of the one in the heap.

No neurons are actually migrated yet.

###  Changed

* `InstallCode` proposal payload hashes are now computed when making the proposal instead of when
  listing proposal. Hashes for existing proposals are backfilled.

* The `list_neurons` behavior is slightly changed: the `include_empty_neurons_readable_by_caller`
  was default to true before, and now it's default to true. More details can be found at:
  https://forum.dfinity.org/t/listneurons-api-change-empty-neurons/40311


## New Commits

```
$ git log --format="%C(auto) %h %s" 03393bc817da78cdc27190eaa388b8f6f8990365..c5e098e8cc8e62249e6d7f4ed09e6c2ed87fc800 --  ./rs/nns/governance ./rs/sns/init
 f4450ebb1c6 refactor(sns-w): Migrate from dfn_core to ic_cdk (#3662)
 d3a3f074bc1 refactor(nns): More strictly represent neuron visibility. (#3697)
 056a8e0b535 refactor(nns-governance): Delete *_voting_power fields from governance.proto. (#3643)
 2eae439d961 refactor(nns): Delete private neuron flags. (#3689)
 35f39480fe2 docs(nns): Resurrect request and response comments. (#3671)
 ae3ab5aa3c4 refactor(nervous-system): Move Request implementations from canister crates to rs/nervous_system/agent (#3657)
 3aa3266cde8 feat(nns): Avoid cloning large fields when listing proposals (#3505)
 23a5ce068d9 refactor(nns-governance): Delete NeuronInfo from governance.proto. (#3639)
 65b020a926b feat(nns): Change `include_empty_neurons_readable_by_caller` default to false (#3612)
 8b5a196bb9d feat: Turn on the features to allow active neurons in stable memory and use stable following index (#3604)
 6dcf4612fd1 fix(nns): Fix neurons_fund_total_active_neurons metric (#3610)
```


## Current Version

__Current git hash__: 03393bc817da78cdc27190eaa388b8f6f8990365

__Current wasm hash__: 542cb59d9ba2b4ba43b0690a839cf1d51dd49582a53e55fbf535eb08a23a14c4


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


### WASM Verification

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

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

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

Root

# Upgrade the Root Canister to Commit c5e098e

__Proposer__: andre at popovit.ch

__Source code__: [c5e098e8cc8e62249e6d7f4ed09e6c2ed87fc800][new-commit]

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


## Features & Fixes

This is just a "maintenance" release. We are not proposing any behavior changes. Instead, we just want the version of this canister running in production not to be too old. This helps ensure that the next version next release does not have a huge amount of changes in it.


## New Commits

```
$ git log --format="%C(auto) %h %s" b5192581ccd35b67fe5a1f795ead9cbcd25956d6..c5e098e8cc8e62249e6d7f4ed09e6c2ed87fc800 --  ./rs/nns/handlers/root/impl
 c5e098e8cc8 feat(nns/sns): Add allowed_viewers variant case into canister_status responses (#3660)
```


## Current Version

__Current git hash__: b5192581ccd35b67fe5a1f795ead9cbcd25956d6

__Current wasm hash__: d3c702648ca4fb232f349bad7533c400c474a528abf62c05d4b100b4cdb91ce2


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


### WASM Verification

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

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

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

Sns-wasm

# Upgrade the Sns-wasm Canister to Commit c5e098e

__Proposer__: andre at popovit.ch

__Source code__: [c5e098e8cc8e62249e6d7f4ed09e6c2ed87fc800][new-commit]

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


## Features & Fixes

This is just a "maintenance" release. We are not proposing any behavior changes. Instead, we just want the version of this canister running in production not to be too old. This helps ensure that the next version next release does not have a huge amount of changes in it.


## New Commits

```
$ git log --format="%C(auto) %h %s" 25c1bb0227d9970f5673b908817d7c4962b29911..c5e098e8cc8e62249e6d7f4ed09e6c2ed87fc800 --  ./rs/nns/sns-wasm ./rs/sns/init
 f4450ebb1c6 refactor(sns-w): Migrate from dfn_core to ic_cdk (#3662)
 ae3ab5aa3c4 refactor(nervous-system): Move Request implementations from canister crates to rs/nervous_system/agent (#3657)
 b5192581ccd docs(governance): Create changelog files for all of our canisters. (#3388)
 575ca531a70 chore(ICRC_Index): FI-1468: Remove old ICRC index canister (#3286)
```


## Current Version

__Current git hash__: 25c1bb0227d9970f5673b908817d7c4962b29911

__Current wasm hash__: 68f9fb37341d14a35735e10a0eb2471721b4cd75b6552ac11124aac559b05736


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


### WASM Verification

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

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

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

Apologies everyone - some of the proposals from this batch have the same release notes as last week’s release. The proposals themselves are correct.

1 Like

Approve Proposal 135063

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.

There’s a small mistake in the proposal description:

The `list_neurons` behavior is slightly changed: the `include_empty_neurons_readable_by_caller` was default to true before, and now it's default to true.

Should be:

The `list_neurons` behavior is slightly changed: the `include_empty_neurons_readable_by_caller` was default to true before, and now it's default to false.

Screenshot 2025-02-01 at 22.01.16

Code Review

This release includes code changes that enable the migration of active neurons to stable memory:

  1. allow_active_neurons_in_stable_memory: Updates the canister to check for active neurons in stable memory instead of assuming they are always in the heap.
  2. use_stable_memory_following_index: Modifies the canister to utilize the neuron following index in stable memory rather than the heap.

include_empty_neurons_readable_by_caller is now default to false.

The changes introduced in this release include significant refactoring:

  • Removed dfn_http_metrics from dependencies.
  • Eliminated NeuronInfo from the protobuf declaration.
  • Removed private neuron flags to streamline the implementation.
3 Likes

Approve Proposal 135064

Proposal

  • Canister id r7inp-6aaaa-aaaaa-aaabq-cai is indeed the root canister.
  • The upgrade args correspond to the empty args.
  • The install mode is indeed upgrade.
  • The wasm hash is reproducible.

Screenshot 2025-02-01 at 22.15.14

Code Review

This change refactors log visibility settings in root.did and updates the changelog accordingly. Specifically:

  • Replaces LogVisibility with a new CanisterStatusLogVisibility type, adding an allowed_viewers variant.
  • Ensures consistency with the management canister API.
  • Prevents potential panics when calling canister_status on canisters using the new allowed_viewers setting.
1 Like

proposal - 135063 – Cyberowl | CodeGov

Vote: ADOPT
Hash Match: MATCH
Feedback: NONE 
Proposer Check: MATCH
Reason:
All changes align with commit description. No errors found. Built and verified WASM.  
Commits Summary

f4450ebb1c6
Removed outdated dependencies dfn_http_metrics, dfn_candid, and dfn_core from Cargo and BUILD files and replaced them with the modern ic-canisters-http-types and ic_cdk APIs.
Updated various canister and HTTP call implementations across NNS and SNS modules to use the new ic_cdk functions and unified error handling.

d3a3f074bc1
Removed the use of Option<Visibility> for neurons—visibility is now stored and accessed as a concrete Visibility.
Neuron conversion and comparison logic (in both production and test code) to use the new getter methods.

056a8e0b535
Neuron conversion logic was refactored by removing calls to into_proto and replacing them with direct conversions using into_api. Governance proto definitions, the previously defined fields for “deciding_voting_power” and “potential_voting_power” have been replaced with reserved fields.

2eae439d961
Removed legacy functions and feature flags related to setting neuron visibility.

35f39480fe2
Revised the schema definitions in the DID file for governance, including the structures for ListNeurons, ManageNeuronRequest, and NeuronInfo. Deprecated and clarified certain fields (e.g. the legacy “id” field in ManageNeuronRequest).

ae3ab5aa3c4
Removed several legacy “request_impls” modules and replaced them with new dedicated requests submodules. Updated dependency references from “ic‑sns‑governance” to “ic‑sns‑governance‑api”

3aa3266cde8
Replace “ic‑sns‑governance” with “ic‑sns‑governance‑api.”
Adjusted import paths throughout the Nervous System Agent, SNS Governance.

23a5ce068d9
Added two helper methods (is_seed_neuron and is_ect_neuron) on the NeuronInfo struct in the API module. Removed the redundant Protocol Buffer definition of ProposalInfo

65b020a926b
Sets the flag using Some(true) or unwrap_or(false) rather than relying on implicit defaults, the code eliminates ambiguity.

8b5a196bb9d
Matches description turn on the features to allow active neurons in stable memory and use stable following index

6dcf4612fd1
Replaced verbose manual default initialization of NeuronMetrics with a concise call to NeuronMetrics::default().

proposal - 135064 – Cyberowl | CodeGov

Vote: ADOPT
Hash Match: MATCH
Feedback: NONE 
Proposer Check: MATCH
Reason:
All changes align with commit description. No errors found. Built and verified WASM. 
Commits Summary

c5e098e8cc8
New variant allowed_viewers (vector of principals) in the LogVisibility (renamed in some contexts to CanisterStatusLogVisibility) types for canister status, replacing the previous numeric assignments.

1 Like

Proposal #135063 for Governance — Zack | CodeGov

Vote: Adopted

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

About CodeGov (click to expand).

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 topics and Synapse on most other 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 and KongSwap with a known neuron and credible Followees.


Learn more about CodeGov and its mission at codegov.org.

Proposal #135064 for rOOt — Zack | CodeGov

Vote: Adopted

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

c5e098e8cc8 feat(nns/sns):

Adds the allowed_viewers variant into LogVisibility as part of the canister_status response instead of update_settings, and also updates the NNS/SNS Root canister_status response types.

About CodeGov (click to expand).

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 topics and Synapse on most other 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 and KongSwap with a known neuron and credible Followees.


Learn more about CodeGov and its mission at codegov.org.

Proposal 135063 (Governance Canister) – LaCosta | CodeGov

Vote: ADOPT

image

Reason:
Build successful and hashes match.

Proposal 135064 (Root Canister) – LaCosta | CodeGov

Vote: ADOPT

Reason:
Build successful and hashes match.

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 topics and Synapse on most other 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 and KongSwap with a known neuron and credible Followees.

Learn more about CodeGov and its mission at codegov.org.

Proposal 135063 - Zane | CodeGov

Vote: ADOPT
Reason: Build completes successfully, both hashes and reviewed commits match their descriptions, so I’ve decided voted to adopt.

135063

f4450ebb1c6 Ported sns-wasm over to ic_cdk. Methods and annotations from the old dfn library have been replaced with the new ic_cdk equivalents.

d3a3f074bc1 Added more strict Visibility type in /nns/governance/src/neuron/types.rs, which only has 2 variants, i.e private and public, getting rid of Unspecified. When converting from the NeuronProto if conversion fails due to a non supported variant, default to Visibility::Private with unwrap_or. Also added logs for visibility related inconsistencies, i.e known neurons not having public visibility or visibility being set to unsupported variants. Finally since the feature has been enabled for a while, visibility field of Neuron struct is no longer optional.

056a8e0b535 Same as description.

2eae439d961 Deleted flags used to toggle private neuron functionality and cleanup up the code which was used to toggle the flags and related checks.

35f39480fe2 Added back comments deleted by mistake.

ae3ab5aa3c4 Same as description.

3aa3266cde8 Optimized list_proposals API by avoiding cloning unnecessary fields and then filtering them out when they have to be omitted, instead they are cloned only after it has been determined they are required.

23a5ce068d9 Deleted NeuronInfo from governance.proto alongside its conversion logic and moved its impl block to ic_nns_governance.pb.v1.rs.

65b020a926b In list_neurons set default value of include_empty_neurons_readable_by_caller to false when it is not specified. Reported minor typo in the unreleased changelog

8b5a196bb9d Enabled ALLOW_ACTIVE_NEURONS_IN_STABLE_MEMORY and USE_STABLE_MEMORY_FOLLOWING_INDEX flags.

6dcf4612fd1 Fixed neurons_fund_total_active_neurons metric not being properly calculated when active neurons in stable memory was enabled but migration had not happened or completed yet, it is now updated in compute_neuron_metrics_current too.

Proposal 135064 - Zane | CodeGov

Vote: ADOPT
Reason: Build completes successfully, both hashes and reviewed commits match their descriptions, so I’ve decided voted to adopt.

135064

c5e098e8cc8 Added AllowedViewers variant to LogVisibility enum in rs/nervous_system/clients/src/canister_status.rs so the root canister can properly decode canister_status responses for canisters with this type of visibility without panicking.

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 topics and Synapse on most other 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 and KongSwap with a known neuron and credible Followees.

Learn more about CodeGov and its mission at codegov.org.