NNS / SNS Update: Jan 10, 2025

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

https://dashboard.internetcomputer.org/proposal/134781
https://dashboard.internetcomputer.org/proposal/134780
https://dashboard.internetcomputer.org/proposal/134779
https://dashboard.internetcomputer.org/proposal/134778
https://dashboard.internetcomputer.org/proposal/134777
https://dashboard.internetcomputer.org/proposal/134776

Cycles Minting

# Upgrade the Cycles-minting Canister to Commit b519258

__Proposer__: maximilian.summe at dfinity.org

__Source code__: [b5192581ccd35b67fe5a1f795ead9cbcd25956d6][new-commit]

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


## Features & Fixes

- CMC now checks icrc1 memo as a fallback in notify_* methods


## New Commits

```
$ git log --format="%C(auto) %h %s" ee52ab3056cf5f39b09b08de70bdd20485c8b2dc..b5192581ccd35b67fe5a1f795ead9cbcd25956d6 --  ./rs/nns/cmc
 b5192581cc docs(governance): Create changelog files for all of our canisters. (#3388)
 efd5dd7151 feat(cycles-minting-canister): When memo does not match, fall back to icrc1_memo. (#3336)
```


## Upgrade Arguments

```candid
()
```


## Current Version

__Current git hash__: ee52ab3056cf5f39b09b08de70bdd20485c8b2dc

__Current wasm hash__: bbb8995cb749ba9e2c721ff507f5e5313f32e69b1adf3df20e3901ed56a70b42


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


### WASM Verification

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

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

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

__Proposer__: maximilian.summe at dfinity.org

__Source code__: [b5192581ccd35b67fe5a1f795ead9cbcd25956d6][new-commit]

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


## Features & Fixes

### Added

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


## New Commits

```
$ git log --format="%C(auto) %h %s" ee52ab3056cf5f39b09b08de70bdd20485c8b2dc..b5192581ccd35b67fe5a1f795ead9cbcd25956d6 --  ./rs/nns/governance ./rs/sns/init
 b5192581cc docs(governance): Create changelog files for all of our canisters. (#3388)
 5c6dc53561 feat(governance-tools): Script that adds entry for new release to CHANGELOG after a proposal was successfully executed. (#3367)
 68e52f27bb feat(governance): Enable periodic confirmation. (#3371)
 194648a9fd feat(nervous-system): Enable Root to upgrade canisters using chunked Wasms (#3300)
 dfc8987d4b feat(governance-tools): Use unreleased_changelog.md when generating proposals. (#3353)
 4f3b77e0a4 docs(governance): Added unreleased_changelog.md and CHANGELOG.md to governance. (#3332)
 3f4397cf56 fix(nns): Fix maturity for neurons that temporarily fail to spawn (#3323)
 a18576a759 feat(nns): Make neuron migration to stable memory reversible (#3344)
 a47dde8acf fix(nns): Fix for a particular locked neuron (#3311)
 a726b71742 feat(nns): Split the active_neurons_in_stable_memory into 2 flags (#3312)
 76a634c31d refactor(nns): Switch NNS Governance global state from static to thread_local (#2844)
 d19a1b45ee fix(nns): Revert spawn state when ledger unavailable and drop lock (#3226)
 0ab77a13c2 chore(nns): Remove NNS maturity modulation log in some cases (#3243)
 586c57afa7 refactor(nns): Clarify voting code (#3210)
 4c775dbb96 feat: Add wasm_memory_threshold to ProposeToUpdateCanisterSettingsCmd (#2864)
 bdb7c71b59 feat(nns): Move neuron validation to timer (#3181)
 73f301f8ca chore: Reduce optimization for NNS Governance rust_canbench (#3131)
```


## Current Version

__Current git hash__: ee52ab3056cf5f39b09b08de70bdd20485c8b2dc

__Current wasm hash__: a23918c2c5d1302e5d1149f557b0fb913ab65931c1bce3ffc94a48e3d14ecbac


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


### WASM Verification

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

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

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

Lifeline

# Upgrade the Lifeline Canister to Commit b519258

__Proposer__: maximilian.summe at dfinity.org

__Source code__: [b5192581ccd35b67fe5a1f795ead9cbcd25956d6][new-commit]

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


## Features & Fixes

- Support wasm_memory_threshold when updating canister settings

## New Commits

```
$ git log --format="%C(auto) %h %s" a0207146be211cdff83321c99e9e70baa62733c7..b5192581ccd35b67fe5a1f795ead9cbcd25956d6 --  ./rs/nns/handlers/lifeline
 b5192581cc docs(governance): Create changelog files for all of our canisters. (#3388)
 4c775dbb96 feat: Add wasm_memory_threshold to ProposeToUpdateCanisterSettingsCmd (#2864)
 4d09678d23 chore: sort rust derive traits (#1241)
 46e1372d21 chore(ic): Unify `wasm-tools` dependency versions (#1125)
```


## Current Version

__Current git hash__: a0207146be211cdff83321c99e9e70baa62733c7

__Current wasm hash__: 76978515223287ece643bc7ca087eb310412b737e2382a73b8ae55fcb458da5b


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


### WASM Verification

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

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

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

# 3. Fingerprint the result.
sha256sum ./artifacts/canisters/lifeline_canister.wasm.gz
```

This should match `wasm_module_hash` field of this proposal.

Registry

# Upgrade the Registry Canister to Commit b519258

__Proposer__: maximilian.summe at dfinity.org

__Source code__: [b5192581ccd35b67fe5a1f795ead9cbcd25956d6][new-commit]

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


## Features & Fixes

- Allow Node Providers to replace Node Operator key in same data center without proposal


## New Commits

```
$ git log --format="%C(auto) %h %s" 86229594d61b433c39fc5331ab818ccb6c6aa6a7..b5192581ccd35b67fe5a1f795ead9cbcd25956d6 --  ./rs/registry/canister
 dd459b9d5d feat(NNS): compare node provider ID in addition to the operator when removing node directly (#3285)
 fc935aa768 feat(NNS): allow execution of proposals that remove non-existing nodes (#3339)
```


## Current Version

__Current git hash__: 86229594d61b433c39fc5331ab818ccb6c6aa6a7

__Current wasm hash__: b0b2a7f37e76fcbab20a861fdf65c34d7ac2ca84a5190d204dfe5e1c50fb383e


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


### WASM Verification

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

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

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

Root

# Upgrade the Root Canister to Commit b519258

__Proposer__: maximilian.summe at dfinity.org

__Source code__: [b5192581ccd35b67fe5a1f795ead9cbcd25956d6][new-commit]

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


## Features & Fixes

- Support wasm_memory_threshold when updating canister settings
- Add chunked wasm support.  This does not include needed NNS governance changes to be useful yet.


## New Commits

```
$ git log --format="%C(auto) %h %s" c494c2af8bfc70a6501448dc73bf806477388738..b5192581ccd35b67fe5a1f795ead9cbcd25956d6 --  ./rs/nns/handlers/root/impl
 194648a9fd feat(nervous-system): Enable Root to upgrade canisters using chunked Wasms (#3300)
 18b239414f refactor(nns): Migrate nns root to ic-cdk from dfn_core (#3227)
 4c775dbb96 feat: Add wasm_memory_threshold to ProposeToUpdateCanisterSettingsCmd (#2864)
 3e0cf89b23 test(IDX): depend on the universal canister at run-time instead of at build-time (#2502)
 18fdb88272 refactor(nns): Remove dfn_candid from test_utils, simplify method (#2196)
```


## Current Version

__Current git hash__: c494c2af8bfc70a6501448dc73bf806477388738

__Current wasm hash__: 657010591182ce758c86f020d1eade5f7a188072cf0de9c41e2f9d577849c964


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


### WASM Verification

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

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

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

# Publish SNS Governance WASM Built at Commit df7d443

__Proposer__: maximilian.summe at dfinity.org

__Source code__: [df7d443e6219c462b305152b63ca265171feb6ee][new-commit]

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

## Features & Fixes

- Support wasm_memory_threshold in changed canister settings


## New Commits

```
$ git log --format="%C(auto) %h %s" 25c1bb0227d9970f5673b908817d7c4962b29911..df7d443e6219c462b305152b63ca265171feb6ee --  ./rs/sns/governance
 df7d443e62 fix: SNS Gov canister should deserialize to proto Governance, not API Governance (#3391)
 b5192581cc docs(governance): Create changelog files for all of our canisters. (#3388)
 6da5c715e2 refactor: move `serve_journal` into upgrade_journal.rs (#3393)
 efc765d336 fix(sns): Don't let very old upgrade proposals block future upgrades (#3294)
 4c775dbb96 feat: Add wasm_memory_threshold to ProposeToUpdateCanisterSettingsCmd (#2864)
 6652691684 fix(sns): Don't log when maturity modulation can't be refreshed (#3201)
 a0a5e5dc35 refactor(sns): Use API crate types for canister.rs (#3077)
 ff0cadf8ed feat(sns): Print human-readable timestamps when printing timestamps for humans (#3099)
 766f219556 refactor(sns): Move human-readable timestamp formatter into its own crate (#3097)
 af7023cfd9 test(sns): Add more unit tests for the internal `CachedUpgradeSteps` type (#3084)
 519eb70419 feat(sns): Recover SNS from now knowing its deployed version (#3091)
 24f4c7726e perf(sns): Set up canbench (#2976)
 96944f42de feat(sns): Bound number of entries in get_upgrade_journal response (#2873)
 6a4eeb97fd fix(sns): Avoid producing overly large errors upon `UpgradeSnsControlledCanister` proposal invalidation (#2877)
```


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

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

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

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

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

This should match `wasm` field of this proposal.
3 Likes

Proposal 134776 – LaCosta | CodeGov

Vote: ADOPT

Reason:
Build successful and hashes match, commits look great and match the description. Found no issues. The proposal implements two features mentioned by DFINITY in the following thread.

[b5192581cc]: Creates changelog files for all canisters.

[efd5dd7151]: Adds a new function transaction_has_expected_memo that with a given transaction and a expected memo, compares it to the given transaction. The expected can be a legacy memo meaning it’s just an arbitrary number of bytes in order to distinguish similar transactions or icrc1_memo that can indicate the purpose of a transaction. The function checks if the memo is a legacy_memo and if not checks it converts the expected icrc1_memo to to the Memo type and then compares it. The commit also sees tests implemented for either a legacy memo or icrc1_memo failing or succeeding. Prior to this commit there were only checks for the legacy_memo.

Proposal 134777 – LaCosta | CodeGov

Vote: ADOPT

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

[b5192581cc]: Creates changelog files for all canisters.

[5c6dc53561]: Script that adds entry for new release to CHANGELOG after a proposal was successfully executed.

[68e52f27bb]: This is one of the last steps from the approved proposal 132411 that decreases the voting power of an inactive neuron that or doesn’t vote or doesn’t delegate it’s vote to some other entity. The commit enables this feature by enabling the flags IS_VOTING_POWER_ADJUSTMENT_ENABLED and IS_PRUNE_FOLLOWING_ENABLED.

[194648a9fd]: Enables the Root canister to upgrade canisters using chunked wasms which allows to reconstruct a large WASM from chunks needed to upgrade or reinstall a canister. If the entire WASM does not into the 2 MiB ingress limit, then new_canister_wasm should be empty, and the field chunked_canister_wasm should be set instead.

[dfc8987d4b]: Add some logic to the script testnet/tools/nns-tools/lib/proposals.sh that if the canister has an unrelease_changelog.md file, it uses that to populate the Features & Fixes section of the upgrade proposal.

[4f3b77e0a4]: Creates changelog files to governance.

[3f4397cf56]: The previous commit d19a1b45ee set the field maturity_e8s_equivalent to the modulated amount. This fixes it by storing the original value in original_maturity and in case of the ledger being unavailable and causing an error the field is returned to it’s original value.

[a18576a759]: In order to reverse the migration from heap memory to stable memory the function adjust_neuron_storage_with_max_instructions that only allowed to migrate in one way was removed and replaced by groom_some_neurons. By using std::ops::Bound it still allows to have a MAX_NUM_INSTRUCTIONS_PER_BATCH by configuring a carry_on.

[a47dde8acf]: This commits schedules a fix for a locked neuron. The functions and logic for this fix is set to be removed after fixing the neuron state. A fix to prevent this from happening was made in commit d19a1b45ee reviewed below.

[a726b71742]: Separates the feature flag active_neurons_in_stable_memory into two new ones, allow_active_neurons_in_stable_memory and migrate_active_neurons_to_stable_memory. The feature flag active_neurons_in_stable_memory didn’t allow us to safely rollback since the rolled back version would look for active neurons only in the heap memory. With this two flags instead if needed we can first rollback migrate_active_neurons_to_stable_memory and then rollback allow_active_neurons_in_stable_memory once we confirm that no neurons were left in stable memory.

[76a634c31d]: Previously the global state was stored in a static variable, GOVERNANCE, which when using unsafe blocks to access it could lead to undefined behavior. This was changed by defining the global state with thread_local! (LocalKey<RefCell<Governance>>) which ensures that the global state is isolated and thread safe. Currently the functions governance and governance_mut remain unsafe for backwards compatibility but it’s expected to have incremental changes to migrate them to using GOVERNANCE.with().

[d19a1b45ee]: Fixes an edge case where if the ledger is unavailable during a neuron operation, the neuron can become locked. This happens since when a neuron spawns maturity_e8s_equivalent is set to 0, spawn_at_timestamp_seconds is set to None and cached_neuron_stake_e8s is updated with the new stake, however if the ledger is unavailable when trying to mint the stake the operation fails which makes the state of the neuron inconsistent. So in case of an error the fields maturity_e8s_equivalent, cached_neuron_stake_e8s and spawn_at_timestamp_seconds return to their original values.

[0ab77a13c2]: Removes a NNS maturity modulation log when the error message is Canister rkp4c-7iaaa-aaaaa-aaaca-cai not found. This pollutes test environments and most often happens because Cycle Minting Canister isn’t created in tests.

[586c57afa7]: Refactors code of the function process_machine_until_soft_limit to clarify the voting code.

[4c775dbb96]: Adds the wasm_memory_threshold to support the on_low_wasm_memory hook. This end-point is invoked when the heap usage exceeds the new heap threshold in the canister settings and this change was approved in proposal 106146.

[bdb7c71b59]: Adds a new constant NEURON_DATA_VALIDATION_INTERNVAL = 5 sec used in the schedule_neuron_data_validation that sets a timer for neuron validation.

[73f301f8ca]: Adds an optimization level argument when running rust_canbench because for some reason compiler optimizations such as loop unrolling can make benchmarks more sensitive to unrelated changes which makes it difficult to read benchmarks.

Proposal 134778 – LaCosta | CodeGov

Vote: ADOPT

image

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

[b5192581cc]: Creates changelog files for all canisters.

[4c775dbb96]: Adds the wasm_memory_threshold to support the on_low_wasm_memory hook. This end-point is invoked when the heap usage exceeds the new heap threshold in the canister settings and this change was approved in proposal 106146.

[4d09678d23]: Sorts Rust #[derive(...)] traits to maintain a consistent style

[46e1372d21]: Unifies wasm-tools under the same version (*.212.0)

Proposal 134779 – LaCosta | CodeGov

Vote: ADOPT

image

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

[dd459b9d5d]: Adds an additional check when trying to remove a node direcltly by not just comparing the node operators of the caller and node since this was deemed to strict to comparing the Node Provider of the caller and node.

[fc935aa768]: The previous proposal 134665 resulted in an error since a node it tried to remove was already removed moments before resulting in an error. The node retrieval logic is now handled by the function get_node that returns Option<NodeRecord>. In do_remove_nodes.rs this function is used in an added step to skip nodes that are not in the registry.

Proposal 134780 – LaCosta | CodeGov

Vote: ADOPT

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

[194648a9fd]: Enables the Root canister to upgrade canisters using chunked wasms which allows to reconstruct a large WASM from chunks needed to upgrade or reinstall a canister. If the entire WASM does not into the 2 MiB ingress limit, then new_canister_wasm should be empty, and the field chunked_canister_wasm should be set instead.

[18b239414f]: The dfn_core library has been deprecated so this library has been replaced with ic-cdk.

[4c775dbb96]: Adds the wasm_memory_threshold to support the on_low_wasm_memory hook. This end-point is invoked when the heap usage exceeds the new heap threshold in the canister settings and this change was approved in proposal 106146.

[3e0cf89b23]: Previously the Universal Canister wasm needed to be manually changed at build time following specific instructions. Now it is treated as a run time dependency and it’s wasm is loaded during execution using an environment variable "UNIVERSAL_CANISTER_WASM_PATH": "$(rootpath //rs/universal_canister/impl:universal_canister.wasm.gz)".

[18fdb88272]: Removes the candid_one function from multiple test files and in consequence the dfn_candid crate.

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.

1 Like

Notes:

I have removed the duplicate commits from the proposals.

proposal - 134776 Cyberowl | CodeGov

Vote: ADOPT

Reason:

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

Hash Match: MATCH

Feedback: NONE

Proposer Check: MATCH

Commits

b5192581cc
Consolidation of the changelog process into nervous_system/changelog_process.md and ensures all changelog files reference this central documentation, streamlining updates and enhancing traceability.

efd5dd7151
transaction_has_expected_memo function verifies if a transaction’s memo matches the expected value, supporting both legacy memo and the newer icrc1_memo formats, with fallbacks for conversions when necessary.

proposal - 134777 Cyberowl | CodeGov

Vote: ADOPT

Reason:

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

Hash Match: MATCH

Feedback: NONE

Proposer Check: MATCH

Commits

5c6dc53561
Automate the process of moving entries from unreleased_changelog.md to CHANGELOG.md after a canister upgrade proposal has been executed successfully. It validates that the provided proposal ID corresponds to an executed proposal, ensures the currently checked-out commit matches the commit referenced in the proposal, and determines the target canister and its changelog file.

68e52f27bb
This change has been in the works for some time and periodic confirmation is enabled.

194648a9fd
Support for chunked installation of large WASM binaries in the management and root canisters, enabling upgrades that exceed the 2 MiB ingress message limit. A new ChunkedCanisterWasm structure is added, allowing the storage and retrieval of large WASM binaries in chunks, along with modifications to the ChangeCanisterRequest to include this new mechanism.

dfc8987d4b
Integration of logic to automatically extract the “Features & Fixes” section for NNS upgrade proposals from unreleased_changelog.md files if they exist.

4f3b77e0a4
Matches description added unreleased_changelog.md and CHANGELOG.md to governance

3f4397cf56
The primary purpose of this commit is to ensure that when a neuron spawn operation fails, the original maturity value of the parent neuron is restored, avoiding unintended loss or incorrect adjustment of maturity. It introduces the original_maturity variable to consistently revert changes to neuron maturity in case of failures. New test cases, such as test_maturity_correctly_reset_if_spawn_fails, verify that maturity is reset correctly and edge cases in neuron spawning processes are handled gracefully.

a18576a759
Enhance the adjust_neuron_storage mechanism to support bidirectional migration of neurons between heap and stable memory. Previously, the process only considered neurons in heap memory, allowing migration solely from heap to stable memory when the target location differed. With this update, the procedure now examines neurons in both heap and stable memory, enabling reverse migrations from stable memory to heap as needed.

a47dde8acf
Code is a targeted fix to address a specific issue with a single neuron, identified by its ID (17912780790050115461), presumably owned by someone. It ensures the neuron, which was locked during a spawn operation due to a ledger upgrade, is unlocked and its stake properly minted if the lock’s timestamp matches the predefined value (1728911670). This neuron has 1.17874786 ICP staked.

a726b71742
Code differentiates between allowing active neurons in stable memory (allow_active_neurons_in_stable_memory) and the ongoing migration process (migrate_active_neurons_to_stable_memory). These changes adjust existing test cases and benchmarks to accommodate this new granularity, ensuring proper validation and behavior across different neuron states during the transition. This lays the groundwork for better rollback mechanisms.

76a634c31d
Refactors the management of the global Governance state in the NNS Governance canister to replace unsafe static variables with thread-local storage. This is the first PR to get rid of the global access pattern.

d19a1b45ee
This code fixes the issue of neurons getting locked during upgrades by ensuring that any failed ledger transfer attempts to mint neuron stake are handled conservatively: the neuron’s state is reverted to its original values if the ledger operation fails, allowing subsequent retry attempts without leaving the neuron in an inconsistent or locked state.

0ab77a13c2
Silence specific errors (e.g., “Canister rkp4c-7iaaa-aaaaa-aaaca-cai not found”) when attempting to update the maturity modulation, preventing unnecessary error logs while still logging other errors.

586c57afa7
Replacement of the if let construct with the let-else statement for handling the proposal_ballots result, simplifying the control flow by directly returning when the ballots cannot be retrieved, rather than entering the loop and checking conditions repeatedly.

This assumes that ballots for the given proposal remain static and valid throughout the entire loop’s execution.

4c775dbb96
The changes introduce a new wasm_memory_threshold parameter to enhance memory management for canisters by allowing administrators to set a memory usage threshold in addition to the existing wasm_memory_limit.

bdb7c71b59
Removal of maybe_run_validations from run_periodic_tasks. Now schedule_neuron_data_validation under schedule_timers and that uses ic_cdk_timers::set_timer_interval.

73f301f8ca
Allow the rust_canbench function to accept a customizable optimization level (opt) for compiling Rust binaries, enabling better control over performance tuning.

proposal - 134778 Cyberowl | CodeGov

Vote: ADOPT

Reason:

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

Hash Match: MATCH

Feedback: NONE

Proposer Check: MATCH

Commits

4d09678d23
This is a really old commit from Sept 2, 2024. The purpose of the changes in this commit is to improve the consistency and maintainability of struct attribute orders across the codebase. It standardizes the ordering of derived traits (e.g., Debug, PartialEq, Eq) in many Rust structs and enums, ensuring adherence to a consistent style.

46e1372d21
This is a really old commit from Aug 26, 2024. Upgrade of multiple dependencies in the project’s Rust lockfiles (Cargo.Bazel.Fuzzing.json.lock, Cargo.Bazel.json.lock, and others). These adjustments involve moving to older versions of crates such as walrus, wasm-encoder, wasmparser, wasmprinter, and wast.

proposal - 134779 Cyberowl | CodeGov

Vote: ADOPT

Reason:

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

Hash Match: MATCH

Feedback: NONE

Proposer Check: MATCH

Commits

dd459b9d5d
Additional checks and improving the handling of node operator and data center records. Compare the data center (dc_id) and node provider associated with the caller and the node operator, ensuring compatibility and preventing accidental removal by unauthorized entities.

fc935aa768
New function, get_node, to safely retrieve node records without causing a panic when a node is not found, addressing race conditions where nodes might already have been removed by other transactions. Additional validations to ensure nodes are not part of any subnet and improve the logic for updating node operator allowances when nodes are removed.

proposal - 134780 Cyberowl | CodeGov

Vote: ADOPT

Reason:

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

Hash Match: MATCH

Feedback: NONE

Proposer Check: MATCH

Commits

18b239414f
Replace the legacy dfn_* dependencies with standardized ic-cdk and ic-cdk-macros. dfn_core lib got deprecated.

3e0cf89b23
Refactoring the usage of the UNIVERSAL_CANISTER_WASM component across various modules and tests in the project. Specifically, the updates replace instances of UNIVERSAL_CANISTER_WASM.to_vec() with UNIVERSAL_CANISTER_WASM.into(). Additionally, several unused or redundant references to the universal_canister.wasm.gz resource in Bazel build files are removed.

18fdb88272
Standardize the use of the candid_one function for encoding and decoding Candid arguments in various test and integration scenarios.

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 it’s mission at codegov.org.

2 Likes

Proposal #134776 for Cycles-Minting Canister — Zack | CodeGov

Vote: Adopted

Reason:
To be edited

Proposal #134777 for Governance — Zack | CodeGov

Vote: Adopted

Reason:
To be edited

Proposal #134778 for Lifeline— Zack | CodeGov

Vote: Adopted

Reason:
To be edited

Proposal #134779 for Registry — Zack | CodeGov

Vote: Adopted

Reason:
To be edited

Proposal #134780 for Root— Zack | CodeGov

Vote: Adopted

Reason:
To be edited

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

Vote: Adopted

Reason:
Builds fine the hash and the listed commits 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 134776 – Zane | CodeGov

Vote: ADOPT

Reason: Build is successful and both code changes and hashes match.

efd5dd7151 Moved logic to validate whether a transaction has expected memo to a separate function called transaction_has_expected_memo, additionally if the tx’s memo doesn’t match the expected one, it attempts to fallback to the ICRC1 memo and returns an error in case it either can’t be converted or both memos don’t match.

Proposal 134777 – Zane | CodeGov

Vote: ADOPT

Reason: Build is successful and both code changes and hashes match.

134777

b5192581cc Added changelog markdown files for system canisters.

5c6dc53561 Same as description.

dfc8987d4b Retrieve feature and fixes list from unreleased_changelog.md, if it exists, when generating proposal text.

68e52f27bb Enabled feature flags for periodic confirmation.

194648a9fd Added support for wasm chunked installs for the root canister, this was done by extending ChangeCanisterRequest struct with chunked_canister_wasm optional field, when it is set the install_code method of the root canister will call the management canister’s install_chunked_code endpoint.

4f3b77e0a4 Added unreleased_changelog.md and CHANGELOG.md for governance canister.

3f4397cf56 When a neuron fails to spawn, set its maturity back to the original amount instead of the modulated one.

a18576a759 Merged adjust_neuron_storage_with_max_instructions and batch_adjust_neurons_storage into a single function and slightly simplified the code by leveraging groom_some_neurons method. Additionally the neurons ids are no longer fetched directly from the heap, but from the neuron store, which allows bidirectional migration of neurons from stable memory to heap and viceversa based on the desired target.

a47dde8acf Added temporary function to fix a locked neuron, which got stuck while spawning due to ledger call failing cause of an upgrade. The lock has been removed and the stake minted to the neuron’s subaccount. A one shot timer has been added to schedule execution of this function.

a726b71742 Split the active_neurons_in_stable_memory into 2 separate flags, one for allowing active neurons in stable memory and one for initializing the migration, this allows more granular control and makes it possible to rollback if any problems occur.

76a634c31d Migrate governance’s canister Governance global state from static to safer thread_local.

d19a1b45ee If ledger transfer fails while spawning a neuron, revert the neuron’s state and only lock the neuron if the state revert fails too.

0ab77a13c2 In update_maturity_modulation don’t log errors if they are caused by cycles minting canister not existing.

586c57afa7 Moved ballots retrieval attempt and error handling out of while loop.

4c775dbb96 Added wasm_memory_threshold field to canister settings and ProposeToUpdateCanisterSettingsCmd struct.

bdb7c71b59 Moved maybe_run_validations method from heartbeat to a timer which runs every 5 seconds.

73f301f8ca Made opt parameter in rust_canbench customizable with default value of 3 in case it isn’t specified and reduce optimization level to s, i.e optimize for size only, for governance canbench.

Proposal 134778 – Zane | CodeGov

Vote: ADOPT

Reason: Build is successful and both code changes and hashes match.

134778

4d09678d23 Duplicate from previous release.

46e1372d21 Same as description.

Proposal 134779 – Zane | CodeGov

Vote: ADOPT

Reason: Build is successful and both code changes and hashes match.

134779

dd459b9d5d Added function to fetch from the registry the node provider id from an operator id. When a node operator attempts to remove a node but the operator id of the node doesn’t match the caller, fallback to checking whether the node’s and caller’s data center ids match and both operator and node are under the same node provider, in which case the node can be removed.

fc935aa768 Moved actual node record retrieval logic out of get_node_or_panic into get_node, which return an optional node record. In do_remove_nodes make use of said function to filter out from the list of nodes to remove all ids for which no record is returned, i.e node has already been removed.

Proposal 134780 – Zane | CodeGov

Vote: ADOPT

Reason: Build is successful and both code changes and hashes match.

134780

18b239414f Duplicate from previous release.

3e0cf89b23 Duplicate from previous release.

18fdb88272 Removed unused Witness field from update_with_sender and get rid dfn_candid from test_utils and many integration tests.

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.

1 Like

Adopt Proposal 134776

Proposal

  • Canister id rkp4c-7iaaa-aaaaa-aaaca-cai is indeed the cycle minting canister.
  • The upgrade args correspond to the empty args.
  • The install mode is indeed upgrade.
  • The wasm hash is reproducible.

Screenshot 2025-01-17 at 13.21.25

Code Changes

Refactored the logic for validating if a transaction contains the expected memo into a dedicated function, transaction_has_expected_memo. If the transaction’s memo doesn’t match the expected value, the function attempts a fallback to the ICRC1 memo. It raises an error if the ICRC1 memo cannot be converted or if neither memo aligns with the expected value.

Adopt Proposal 134777

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.

Screenshot 2025-01-17 at 13.24.30

Code Changes

The changes introduce meaningful improvements to both governance and system canister functionality. The addition of changelog markdown files provides a structured way to track updates, and leveraging unreleased_changelog.md for proposal text generation ensures consistency in feature and fixes documentation. The use of feature flags for periodic confirmations and the migration of governance global state to thread_local storage enhance both flexibility and safety in critical operations. These are well-considered steps toward improved maintainability and operational clarity.

The updates to neuron handling demonstrate thoughtful attention to robustness. Consolidating neuron storage adjustment functions and decoupling migration flags improves code readability and rollback safety. The recovery mechanism for locked neurons, paired with automatic scheduling for fixes, addresses edge cases effectively. Additionally, reverting neuron states when ledger transfers fail ensures that operations degrade gracefully, which is a critical safeguard for long-lived processes.

The code also reflects a focus on scalability and efficiency. Extending support for chunked wasm installations is a valuable enhancement for managing large canister deployments. Improvements like timer-based validations, refined error handling during maturity modulation updates, and the introduction of a wasm_memory_threshold field in canister settings further optimize resource use. These changes collectively strengthen the system’s resilience and performance while reducing potential operational risks.

Adopt Proposal 134778

Proposal

  • Canister id rno2w-sqaaa-aaaaa-aaacq-cai is indeed the lifeline canister.
  • The upgrade args correspond to the empty args.
  • The install mode is indeed upgrade.
  • The wasm hash is reproducible.

Screenshot 2025-01-17 at 13.27.56

Code Changes

The support for wasm_memory_threshold in canister settings introduces precise control over memory usage, enhancing scalability and preventing resource over-allocation.

Proposal 134779

Proposal

  • Canister id rwlgt-iiaaa-aaaaa-aaaaa-cai is indeed the registry canister.
  • The upgrade args correspond to the empty args.
  • The install mode is indeed upgrade.
  • The wasm hash is reproducible.

Screenshot 2025-01-17 at 13.31.50

Code Changes

The function to fetch the node provider ID from an operator ID improves validation when removing nodes by ensuring that either the operator matches the caller or both share the same data center and node provider, enhancing accuracy in node removal operations.

The refactor to move node record retrieval logic into a reusable get_node function streamlines operations by returning an optional record. This allows do_remove_nodes to gracefully handle already-removed nodes, improving robustness and simplifying error handling.

Adopt Proposal 134780

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.

Code Changes

Screenshot 2025-01-17 at 14.33.56

The removal of the unused Witness field from update_with_sender, along with the cleanup of dfn_candid from test_utils and integration tests, reduces redundancy and enhances the overall clarity and maintainability of the codebase.