# NNS / SNS Update: Jan 10, 2025

**URL:** <https://forum.dfinity.org/t/nns-sns-update-jan-10-2025/39928>\
**Category:** Developers\
**Tags:** nns, release, sns\
**Created:** [January 10, 2025, 11:44pm UTC](https://forum.dfinity.org/t/nns-sns-update-jan-10-2025/39928 "2025-01-10T23:44:21Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![msumme](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/msumme/32/8646_2.png) [@msumme](https://forum.dfinity.org/u/msumme)\
**Post date:** [January 10, 2025, 11:44pm UTC](https://forum.dfinity.org/t/nns-sns-update-jan-10-2025/39928/1 "2025-01-10T23:44:21Z")

</div>

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/134781)  
[https://dashboard.internetcomputer.org/proposal/134780](https://dashboard.internetcomputer.org/proposal/134780)  
[https://dashboard.internetcomputer.org/proposal/134779](https://dashboard.internetcomputer.org/proposal/134779)  
[https://dashboard.internetcomputer.org/proposal/134778](https://dashboard.internetcomputer.org/proposal/134778)  
[https://dashboard.internetcomputer.org/proposal/134777](https://dashboard.internetcomputer.org/proposal/134777)  
[https://dashboard.internetcomputer.org/proposal/134776](https://dashboard.internetcomputer.org/proposal/134776)

### Cycles Minting

````auto
# 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

````auto
# 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

````auto
# 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

````auto
# 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

````auto
# 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

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

````

---

<div class="post-metadata">

**Author:** ![LaCosta](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/lacosta/32/20232_2.png) [@LaCosta](https://forum.dfinity.org/u/LaCosta)\
**Post date:** [January 13, 2025, 8:08am UTC](https://forum.dfinity.org/t/nns-sns-update-jan-10-2025/39928/2 "2025-01-13T08:08:40Z")

</div>

# [Proposal 134776](https://dashboard.internetcomputer.org/proposal/134776) – LaCosta | CodeGov

**Vote: ADOPT**

 ![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/e/8/e888bc71cd42a860ef3cbc0e6a20c3f0531a06f5.png)

**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](https://forum.dfinity.org/t/extend-cycles-minting-canister-functionality/37749).

[[b5192581cc](https://github.com/dfinity/ic/commit/b5192581cc)]: Creates changelog files for all canisters.

[[efd5dd7151](https://github.com/dfinity/ic/commit/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](https://dashboard.internetcomputer.org/proposal/134777) – LaCosta | CodeGov

**Vote: ADOPT**

 ![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/7/c/7c15bab70ac9824cf921a65ed13e68b97ae72856.png)

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

[[b5192581cc](https://github.com/dfinity/ic/commit/b5192581cc)]: Creates changelog files for all canisters.

[[5c6dc53561](https://github.com/dfinity/ic/commit/5c6dc53561)]: Script that adds entry for new release to CHANGELOG after a proposal was successfully executed.

[[68e52f27bb](https://github.com/dfinity/ic/commit/68e52f27bb)]: This is one of the last steps from the approved [proposal 132411](https://dashboard.internetcomputer.org/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/4f3b77e0a4)]: Creates changelog files to governance.

[[3f4397cf56](https://github.com/dfinity/ic/commit/3f4397cf56)]: The previous commit [d19a1b45ee](https://github.com/dfinity/ic/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](https://github.com/dfinity/ic/commit/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`](https://doc.rust-lang.org/std/ops/enum.Bound.html) it still allows to have a `MAX_NUM_INSTRUCTIONS_PER_BATCH` by configuring a `carry_on`.

[[a47dde8acf](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/d19a1b45ee) reviewed below.

[[a726b71742](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/586c57afa7)]: Refactors code of the function `process_machine_until_soft_limit` to clarify the voting code.

[[4c775dbb96](https://github.com/dfinity/ic/commit/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](https://dashboard.internetcomputer.org/proposal/106146).

[[bdb7c71b59](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://dashboard.internetcomputer.org/proposal/134778) – LaCosta | CodeGov

**Vote: ADOPT**

![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/b/8/b8713374090cb884572e97277574ef48a95ee314.png)

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

[[b5192581cc](https://github.com/dfinity/ic/commit/b5192581cc)]: Creates changelog files for all canisters.

[[4c775dbb96](https://github.com/dfinity/ic/commit/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](https://dashboard.internetcomputer.org/proposal/106146).

[[4d09678d23](https://github.com/dfinity/ic/commit/4d09678d23)]: Sorts Rust `#[derive(...)]` traits to maintain a consistent style

[[46e1372d21](https://github.com/dfinity/ic/commit/46e1372d21)]: Unifies `wasm-tools` under the same version `(*.212.0)`

# [Proposal 134779](https://dashboard.internetcomputer.org/proposal/134779) – LaCosta | CodeGov

**Vote: ADOPT**

![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/0/4/043ea16258ee1a5cdeae56423776a4bd942581d9.png)

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

[[dd459b9d5d](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/fc935aa768)]: The previous [proposal 134665](https://dashboard.internetcomputer.org/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](https://dashboard.internetcomputer.org/proposal/134780) – LaCosta | CodeGov

**Vote: ADOPT**

 ![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/1/6/16f692a997017de5e9fec6dc203de30ab5c65c78.png)

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

[[194648a9fd](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/18b239414f)]: The `dfn_core` library has been deprecated so this library has been replaced with `ic-cdk`.

[[4c775dbb96](https://github.com/dfinity/ic/commit/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](https://dashboard.internetcomputer.org/proposal/106146).

[[3e0cf89b23](https://github.com/dfinity/ic/commit/3e0cf89b23)]: Previously the Universal Canister wasm needed to be manually changed at build time following [specific instructions](https://github.com/dfinity/ic/blob/4fa5156b165b30d1c3984aa23be7be8e3e7402a9/rs/universal_canister/README.md). 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](https://github.com/dfinity/ic/commit/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](https://www.codegov.org/codegov-nns-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](https://www.codegov.org/).

---

<div class="post-metadata">

**Author:** ![cyberowl](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/cyberowl/32/3635_2.png) [@cyberowl](https://forum.dfinity.org/u/cyberowl)\
**Post date:** [January 13, 2025, 8:21am UTC](https://forum.dfinity.org/t/nns-sns-update-jan-10-2025/39928/3 "2025-01-13T08:21:59Z")

</div>

### Notes:

I have removed the duplicate commits from the proposals.

# proposal - [134776](https://dashboard.internetcomputer.org/proposal/134776) Cyberowl | CodeGov

 ![signal-2025-01-11-022617_002](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/0/0/00aa12eddafa14244e880ddac16f4f3ee5943b21.png)

### 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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://dashboard.internetcomputer.org/proposal/134777) Cyberowl | CodeGov

 ![Screenshot from 2025-01-11 02-24-59](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/4/4/44c66f1ca034c022473a017725b4b6a731144873.png)

### 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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/68e52f27bb)  
This change has been in the works for some time and periodic confirmation is enabled.

[194648a9fd](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/dfc8987d4b)  
Integration of logic to automatically extract the “Features & Fixes” section for NNS upgrade proposals from `unreleased_changelog.md` files if they exist.

[4f3b77e0a4](https://github.com/dfinity/ic/commit/4f3b77e0a4)  
Matches description `added unreleased_changelog.md and CHANGELOG.md to governance`

[3f4397cf56](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://dashboard.internetcomputer.org/proposal/134778) Cyberowl | CodeGov

 ![Screenshot from 2025-01-11 02-24-59](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/4/4/44c66f1ca034c022473a017725b4b6a731144873.png)

### 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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://dashboard.internetcomputer.org/proposal/134779) Cyberowl | CodeGov

 ![Screenshot from 2025-01-11 02-24-59](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/4/4/44c66f1ca034c022473a017725b4b6a731144873.png)

### 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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://dashboard.internetcomputer.org/proposal/134780) Cyberowl | CodeGov

 ![Screenshot from 2025-01-11 02-24-59](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/4/4/44c66f1ca034c022473a017725b4b6a731144873.png)

### 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](https://github.com/dfinity/ic/commit/18b239414f)  
Replace the legacy `dfn_*` dependencies with standardized `ic-cdk` and `ic-cdk-macros`. `dfn_core` lib got deprecated.

[3e0cf89b23](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://www.codegov.org/codegov-nns-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](https://www.codegov.org/).

---

<div class="post-metadata">

**Author:** ![ZackDS](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/zackds/32/40368_2.png) [@ZackDS](https://forum.dfinity.org/u/ZackDS)\
**Post date:** [January 13, 2025, 9:02am UTC](https://forum.dfinity.org/t/nns-sns-update-jan-10-2025/39928/4 "2025-01-13T09:02:17Z")

</div>

## Proposal #[134776](https://dashboard.internetcomputer.org/proposal/134776) for Cycles-Minting Canister — Zack | CodeGov

**Vote** : Adopted

**Reason** :  
Builds fine and the both hash for wasm and arguments match, as do the commits.

 ![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/9/4/94b1c958de5f0c88a51bc33ba242b70a66e3987a.png)

## Proposal #[134777](https://dashboard.internetcomputer.org/proposal/134777) for Governance — Zack | CodeGov

**Vote** : Adopted

**Reason** :  
Builds fine and the hash and commits match.

 ![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/1/8/18aa658bb4b3ddfc7dcfe60bac810f094c16ba5f.png)

## Proposal #[134778](https://dashboard.internetcomputer.org/proposal/134778) for Lifeline— Zack | CodeGov

**Vote** : Adopted

**Reason** :  
Builds fine and the hash and commits match.

 ![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/1/8/18aa658bb4b3ddfc7dcfe60bac810f094c16ba5f.png)

## Proposal #[134779](https://dashboard.internetcomputer.org/proposal/134779) for Registry — Zack | CodeGov

**Vote** : Adopted

**Reason** :  
Builds fine and the hash and commits match.

 ![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/1/8/18aa658bb4b3ddfc7dcfe60bac810f094c16ba5f.png)

`dd459b9d5d feat(NNS)`: compare node provider ID in addition to the operator when removing node directly  
This is fixing an error specific to one node provider who migrates from HSM to private-key operator identity.  
Adds the `make_data_center_record` with the provided `dc_id` function to the registry and  
the `get_node_provider_id_for_operator_id` function to `node_management` for retrieving the Node Provider ID associated with a given Node Operator ID from the Registry.  
So now in `node_management` the `do_remove_node_directly` compares the caller\_id (node operator) with the node’s node operator and in case it fails falls back to comparing the DC and the node provider ID for the caller and the node. Also added tests for backward compatibility.

`fc935aa768 feat(NNS)`: allow execution of proposals that remove non-existing nodes  
This comes after one node provider manually removed one of the three nodes listed in the proposal before it executed thus the proposal failed.  
Done by refactoring the Node Removal logic that is now a new function `get_node` that returns an `Option<NodeRecord>` while the `get_node_or_panic` function now uses `get_node` for  
node retrieval, and in Node Management it adds a step to `do_remove_nodes` logic to skip nodes that are not in the registry.

## Proposal #[134780](https://dashboard.internetcomputer.org/proposal/134780) for Root— Zack | CodeGov

**Vote** : Adopted

**Reason** :  
Builds fine and the hash and commits match.

 ![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/1/8/18aa658bb4b3ddfc7dcfe60bac810f094c16ba5f.png)

> **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](https://www.codegov.org/codegov-nns-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](https://www.codegov.org/codegov-sns-neurons/waterneuron) and [KongSwap](https://www.codegov.org/codegov-sns-neurons/kongswap) with a known neuron and credible Followees.  
>   
>   
> Learn more about CodeGov and its mission at [codegov.org](https://www.codegov.org/).

---

<div class="post-metadata">

**Author:** ![ZackDS](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/zackds/32/40368_2.png) [@ZackDS](https://forum.dfinity.org/u/ZackDS)\
**Post date:** [January 13, 2025, 9:05am UTC](https://forum.dfinity.org/t/nns-sns-update-jan-10-2025/39928/5 "2025-01-13T09:05:36Z")

</div>

## Proposal #[134781](https://dashboard.internetcomputer.org/proposal/134781) for SNS Governance — Zack | CodeGov

**Vote** : Adopted

**Reason** :  
Builds fine the hash and the listed commits match.

 ![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/9/9/99dd575a3a89f064efa8e668ed8292d09948ede7.png)

> **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](https://www.codegov.org/codegov-nns-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](https://www.codegov.org/codegov-sns-neurons/waterneuron) and [KongSwap](https://www.codegov.org/codegov-sns-neurons/kongswap) with a known neuron and credible Followees.  
>   
>   
> Learn more about CodeGov and its mission at [codegov.org](https://www.codegov.org/).

---

<div class="post-metadata">

**Author:** ![Zane](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/zane/32/6541_2.png) [@Zane](https://forum.dfinity.org/u/Zane)\
**Post date:** [January 13, 2025, 11:52am UTC](https://forum.dfinity.org/t/nns-sns-update-jan-10-2025/39928/6 "2025-01-13T11:52:41Z")

</div>

# Proposal 134776 – Zane | CodeGov

Vote: ADOPT

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

 ![134776](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/a/c/ac68b9a02454370f57e4ec4e7f463ed3545be5ad.png)

[efd5dd7151](https://github.com/dfinity/ic/commit/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](https://us1.discourse-cdn.com/flex023/uploads/dfn/optimized/3X/1/3/13ebdabcb793039ae00a92c0c4d5e8e43c8d3df7_2_690x17.png)

[b5192581cc](https://github.com/dfinity/ic/commit/b5192581cc) Added changelog markdown files for system canisters.

[5c6dc53561](https://github.com/dfinity/ic/commit/5c6dc53561) Same as description.

[dfc8987d4b](https://github.com/dfinity/ic/commit/dfc8987d4b) Retrieve feature and fixes list from unreleased\_changelog.md, if it exists, when generating proposal text.

[68e52f27bb](https://github.com/dfinity/ic/commit/68e52f27bb) Enabled feature flags for periodic confirmation.

[194648a9fd](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/4f3b77e0a4) Added unreleased\_changelog.md and CHANGELOG.md for governance canister.

[3f4397cf56](https://github.com/dfinity/ic/commit/3f4397cf56) When a neuron fails to spawn, set its maturity back to the original amount instead of the modulated one.

[a18576a759](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/76a634c31d) Migrate governance’s canister `Governance` global state from static to safer thread\_local.

[d19a1b45ee](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/0ab77a13c2) In `update_maturity_modulation` don’t log errors if they are caused by cycles minting canister not existing.

[586c57afa7](https://github.com/dfinity/ic/commit/586c57afa7) Moved ballots retrieval attempt and error handling out of while loop.

[4c775dbb96](https://github.com/dfinity/ic/commit/4c775dbb96) Added `wasm_memory_threshold` field to canister settings and `ProposeToUpdateCanisterSettingsCmd` struct.

[bdb7c71b59](https://github.com/dfinity/ic/commit/bdb7c71b59) Moved `maybe_run_validations` method from heartbeat to a timer which runs every 5 seconds.

[73f301f8ca](https://github.com/dfinity/ic/commit/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](https://us1.discourse-cdn.com/flex023/uploads/dfn/optimized/3X/2/0/20f9e4119dec748b563928ce30f65cc35b7db3fa_2_690x19.png)

[4d09678d23](https://github.com/dfinity/ic/commit/4d09678d23) Duplicate from previous release.

[46e1372d21](https://github.com/dfinity/ic/commit/46e1372d21) Same as description.

# Proposal 134779 – Zane | CodeGov

Vote: ADOPT

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

![134779](https://us1.discourse-cdn.com/flex023/uploads/dfn/optimized/3X/b/f/bfdd10e7605461393e7c751b984c7a45ef1de233_2_690x18.png)

[dd459b9d5d](https://github.com/dfinity/ic/commit/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](https://github.com/dfinity/ic/commit/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](https://us1.discourse-cdn.com/flex023/uploads/dfn/optimized/3X/a/c/acae56643ea11a78cd7ccf3e6aaeb50d6b4fc323_2_690x20.png)

[18b239414f](https://github.com/dfinity/ic/commit/18b239414f) Duplicate from previous release.

[3e0cf89b23](https://github.com/dfinity/ic/commit/3e0cf89b23) Duplicate from previous release.

[18fdb88272](https://github.com/dfinity/ic/commit/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](https://www.codegov.org/codegov-nns-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](https://www.codegov.org/).

---

<div class="post-metadata">

**Author:** ![1eo](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/1eo/32/25778_2.png) [@1eo](https://forum.dfinity.org/u/1eo)\
**Post date:** [January 17, 2025, 1:35pm UTC](https://forum.dfinity.org/t/nns-sns-update-jan-10-2025/39928/7 "2025-01-17T13:35:15Z")

</div>

# [Adopt Proposal 134776](https://dashboard.internetcomputer.org/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](https://us1.discourse-cdn.com/flex023/uploads/dfn/optimized/3X/7/6/76ac359c4a5912915d059149f92311d8e5a0fe2d_2_690x36.png)

## 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](https://dashboard.internetcomputer.org/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](https://us1.discourse-cdn.com/flex023/uploads/dfn/optimized/3X/7/3/73e4bd4cbe78e29ee78cb4b6214a9cc5d6fe78db_2_690x36.png)

## 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](https://dashboard.internetcomputer.org/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](https://us1.discourse-cdn.com/flex023/uploads/dfn/optimized/3X/c/8/c8c14b6244ccf8e14b53f15e57618da5854864bb_2_690x36.png)

## 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](https://dashboard.internetcomputer.org/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](https://us1.discourse-cdn.com/flex023/uploads/dfn/optimized/3X/2/c/2ce521d2708d5b8de704536dc5a87eff0495ccdd_2_690x36.png)

## 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](https://dashboard.internetcomputer.org/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](https://us1.discourse-cdn.com/flex023/uploads/dfn/optimized/3X/6/5/656b849aa65cf5ef6fbff8fab911587ea2e4e800_2_690x36.png)

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.
