NNS Updates 2025-04-25

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

Proposals to be Submitted

Governance

# Upgrade the Governance Canister to Commit 0084cbd

__Proposer__: jason.zhu at dfinity.org

__Source code__: [0084cbd1bdfa69146fef27d9e6a58e4992e85ae1][new-commit]

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


## Features & Fixes

###  Fixed

* Use `StableBTreeMap::init` instead of `::new` for voting power snapshots.


## New Commits

```
$ git log --format="%C(auto) %h %s" 1c46b8a2c717616bca1b5ba264e7b3ff81a3ce52..0084cbd1bdfa69146fef27d9e6a58e4992e85ae1 --  ./rs/nns/governance ./rs/sns/init
 0084cbd1bd refactor(nns): Clean up the timer task AdjustNeuronStorage (#4876)
 d127acbebc refactor(nns): Clean up migrate_active_neurons_to_stable_memory (#4875)
 bed9c76e63 refactor(nns): Clean up allow_active_neurons_in_stable_memory (#4859)
 12e098440c fix(nns): Use StableBTreeMap::init instead of ::new for voting power snapshots (#4877)
 eaa82be351 chore(nervous-system): Update changelog for release 2025-04-15 (#4831)
 a10bf7bbe6 feat(nns): Process the finalization of maturity disbursements (#4842)
```


## Current Version

__Current git hash__: 1c46b8a2c717616bca1b5ba264e7b3ff81a3ce52

__Current wasm hash__: 4c4e72ee0d668d655ecd25d83f2063560f8b62ee435fe8c4d2def4193ac65ddb


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


### WASM Verification

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

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

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

Node-rewards

# Upgrade the Node-rewards Canister to Commit 0084cbd

__Proposer__: jason.zhu at dfinity.org

__Source code__: [0084cbd1bdfa69146fef27d9e6a58e4992e85ae1][new-commit]

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


## Features & Fixes

###  Fixed

* Fixed a bug with the registry client that prevented the canister from reading registry data when there were deletions.
* Limit 'get_node_providers_monthly_xdr_rewards' to only be callable from NNS Governance.
* Use `StableBTreeMap::init` instead of `::new` for registry state.


## New Commits

```
$ git log --format="%C(auto) %h %s" 7575e49a4afa83524c06ad72ce40f588eca93ae2..0084cbd1bdfa69146fef27d9e6a58e4992e85ae1 --  ./rs/node_rewards/canister ./rs/node_rewards ./rs/registry/node_provider_rewards
 f7922dfb5f fix(node_rewards): Use StableBTreeMap::init instead of ::new (#4878)
 4ad316e04d test(node_rewards): Migrate tests from Registry's node reward calculation (#4855)
 4ac73ac87d feat(node_rewards): limit caller to governance for xdr rewards (#4844)
 8bb84553e8 test(node_rewards): Create a test to prove same results as registry (#4754)
 971eecc54a chore(nns): update changelogs (#4793)
```


## Current Version

__Current git hash__: 7575e49a4afa83524c06ad72ce40f588eca93ae2

__Current wasm hash__: 10de2940ee316459ef847d123f97773c252d148bd489248dfbf60b1cab385c2d


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


### WASM Verification

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

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

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

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

This should match `wasm_module_hash` field of this proposal.

Registry

# Upgrade the Registry Canister to Commit 0084cbd

__Proposer__: jason.zhu at dfinity.org

__Source code__: [0084cbd1bdfa69146fef27d9e6a58e4992e85ae1][new-commit]

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


## Features & Fixes

###  Changed

* `get_node_providers_monthly_xdr_rewards` can now take an optional paramter to specify the Registry version to use when
  calculating the rewards.


## New Commits

```
$ git log --format="%C(auto) %h %s" 7575e49a4afa83524c06ad72ce40f588eca93ae2..0084cbd1bdfa69146fef27d9e6a58e4992e85ae1 --  ./rs/registry/canister
 7f58e8e04f feat(registry): Added `dechunkify` and `decode_high_capacity_registry_value`. (#4870)
 93ad8c986c refactor(registry): Drop support for legacy registry upgrade format. (#4867)
 367862f134 refactor(registry): There is no `gen` directory in `registry/canister`. (#4868)
 ca2d5e7dfc feat(registry): Added `maybe_chunkify`... (#4751)
 e966556bdf refactor(crypto): CRP-2619 rename ChainKeySigningSubnetList to ChainKeyEnabledSubnetList (#4819)
 c00595a6d7 feat(registry): Node Rewards can target a specific version (#4828)
 ecee8457c4 feat(registry): Library for chunkifying whale registry mutations. (#4761)
```


## Current Version

__Current git hash__: 7575e49a4afa83524c06ad72ce40f588eca93ae2

__Current wasm hash__: 295b7ae988a2af5bea708e1c2a512d718640e40733a4804e463de66b262c5873


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


### WASM Verification

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

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

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

Proposal 136370 – LaCosta | CodeGov

Vote: ADOPT

Governance Canister

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

[bed9c76e63], [d127acbebc] & [0084cbd1bd]: After all neurons have been migrated to stable memory and since there is no need anymore for allow_active_neurons_in_stable_memory, related code, feature flags and timer tasks therefore they have been cleaned up.

[12e098440c]: Changes the StableBTreeMaps fields intialization neuron_id_to_voting_power_maps and voting_power_totals from StableBTreeMap::new(memory) to StableBTreeMap::init(memory) since new creates a new, empty BTreeMap instance and init initializes a BTreeMap that if the memory provided already contains a BTreeMap, then that map is loaded which is the desired behavior.

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

[a10bf7bbe6]: Adds an async timer task FinalizeMaturityDisbursementsTask to process maturity disbursements that reached the finalization. The task is behind a feature flag. The functions finalize_maturity_disbursement and try_finalize_maturity_disbursement contain the finalization logic with the next_maturity_disbursement_to_finalize function responsible for identifying the next maturity disbursement to finalize making sure the neuron is not locked and other error handling.

Proposal 136371 – LaCosta | CodeGov

Vote: ADOPT

Registry Canister

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

[7f58e8e04f]: Adds two new functions to the chunkify library. dechunkify that concatenates chunks and decode_high_capacity_registry_value decodes HighCapacityRegistryValue, it handles thre content types, empty, DeletionMarker and LargeValueChunkKeys.

[93ad8c986c]: Drops support for legacy registry update format in order to make changes easier.

[367862f134]: Removes unixestent directory gen in bazel.

[ca2d5e7dfc]: Adds the IS_CHUNKIFYING_LARGE_VALUES_ENABLED feature flag to control whether chunkifying is active or not, defaulted to false. Integrates chunkification into the registry with the maybe_chunkify_and_encode function that if chunkification is disabled encodes and returns the mutation, otherwise calls maybe_chunkify which can potentially converts the request into a HighCapacityRegistryAtomicMutateRequest if the input is long enough.

[e966556bdf]: Renames ChainKeySigningSubnetList to ChainKeyEnabledSubnetList which is then also reflected in comments, variables names, module names and more.

[c00595a6d7]: Adds a new struct GetNodeProvidersMonthlyXdrRewardsRequest with an optional field registry_version which if unspecified defaults to the latest registry version. The function get_node_providers_monthly_xdr_rewards_ and consequent functions are updated to take Option as input to specify the registry version and use it where necessary.

[ecee8457c4]: Implements a library to chunkify large/whale registry mutations. A threshold of MIN_CHUNKABLE_VALUE_LEN = 10,000 is used to determine when a value is chunked or not. The function chunkify_composite_mutation converts a RegistryAtomicMutateRequest into a HighCapacityRegistryAtomicMutateRequest by iterating through each individual mutation and calling chunkify_prime_mutation on it to decide if it is converted or not.

Proposal 136372 – LaCosta | CodeGov

Vote: ADOPT

Node-rewards Canister

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

[f7922dfb5f]: Changes the StableBTreeMaps intialization from StableBTreeMap::new(memory) to StableBTreeMap::init(memory) since new creates a new, empty BTreeMap instance and init initializes a BTreeMap that if the memory provided already contains a BTreeMap, then that map is loaded which is the desired behavior.

[4ad316e04d]: Copies and adapts unit tests from the registry’s get_node_providers_monthly_xdr_rewards.rs to the Node Rewards canister

[4ac73ac87d]: Only allows the Governance Canister to call get_node_providers_monthly_xdr_rewards.

[8bb84553e8]: Adds tests to compare the reward calculations results from node-rewards and registry canisters to verify that they are identical.

[971eecc54a]: Updates change logs to include adopted proposals and corresponding changes.

About CodeGov

CodeGov has a team of developers who review and vote independently on the following proposal topics: IC-OS Version Election, Protocol Canister Management, Subnet Management, Node Admin, and Participant Management. The CodeGov NNS known neuron is configured to follow our reviewers on these technical topics. We also have a group of Followees who vote independently on the Governance and the SNS & Neuron’s Fund topics. We strive to be a credible and reliable Followee option that votes on every proposal and every proposal topic in the NNS. We also support decentralization of SNS projects such as WaterNeuron, KongSwap, and Alice with a known neuron and credible Followees.

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

1 Like

proposal - [136370, 136371, 136372] – Cyberowl | CodeGov

Checks

Proposals:
136370
136371
136372

Vote: ADOPT, ADOPT, ADOPT
Hashes Match: MATCH, MATCH, MATCH
Proposer Checks: MATCH, MATCH, MATCH
Target Canisters: MATCH, MATCH, MATCH
Feedback: NONE
Reason:
I successfully built and verified the hash. All the commit descriptions match their code changes.

Commits Summary

proposal/136370

0084cbd1bd
Removes batch_adjust_neurons_storage from the governance canister, simplifying timer scheduling and code maintenance without affecting core functionality. No replacement is added.

d127acbebc
Removes the migrate_active_neurons_to_stable_memory flag and all related migration logic from the governance canister.

bed9c76e63
Completes the migration of all neurons in the governance canister to stable memory by removing the allow_active_neurons_in_stable_memory flag, associated validation logic, and heap-based benchmarks and tests.

12e098440c
Matches description Use StableBTreeMap::init instead of ::new for voting power snapshots.

eaa82be351
Update changelog

a10bf7bbe6
Adds a mandatory 7-day cooling-off period and a 95-105 % “maturity modulation” to every request, and an automated timer task that finalizes disbursements by minting the modulated ICP once the delay expires, complete with retry logic and neuron-locking safeguards.

proposal/136371

7f58e8e04f
Registry changes add dechunkify and decode_high_capacity_registry_value functions, enabling retrieval and decoding of large chunked data.

93ad8c986c
Drop support for the legacy ReprVersion::Unspecified format and only supporting ReprVersion::Version1.

367862f134
Matches description: There is no gen directory in registry/canister

ca2d5e7dfc
Add support for chunking large mutations in the registry canister, controlled by a new feature flag (IS_CHUNKIFYING_LARGE_VALUES_ENABLED). Splits oversized mutations into manageable chunks, update how mutations are stored, and enforce a 10 MiB size limit.

e966556bdf
Rename ChainKeySigningSubnetList to ChainKeyEnabledSubnetList across codebase, updating related functions, constants, protobufs, tests, and documentation to clarify that the registry tracks subnets where chain keys are enabled, not specifically signing.

Might be because they don’t want to break clients but some inconsistencies:

Update get_all_chain_key_signing_subnet_list_records to get_all_chain_key_enabled_subnet_list_records in common.rs.

Update chain_key_signing_subnet_list to chain_key_enabled_subnet_list in recover_subnet.rs.

Update get_master_public_key_id_from_signing_subnet_list_key to get_master_public_key_id_from_enabled_subnet_list_key in keys.rs.

c00595a6d7
Add the ability to query node provider rewards at a specific registry version by introducing a GetNodeProvidersMonthlyXdrRewardsRequest struct and updating related APIs, logic, and tests.

ecee8457c4
The ic-registry-canister-chunkify module was added to support breaking large registry mutations into smaller chunks.

proposal/136372

f7922dfb5f
Matches description Use StableBTreeMap::init instead of ::new.

4ad316e04d
Most of the diff reorganized code, moving FakeRegistry into a dedicated fake module and restructuring node rewards tests into a cleaner folder layout. However, it also added new functionality, like version-aware methods in FakeRegistry, JSON-based reward table parsing in tests, and more thorough historical rewards testing.

4ac73ac87d
Restricts the get_node_providers_monthly_xdr_rewards method so only the Governance canister can call it, using a panic check and updating dependencies to access the governance canister ID.

8bb84553e8
Adds integration tests to verify that the new node rewards canister produces identical results to the old registry canister, using both synthetic and real-world state data. It also fixes a bug in the registry client for reading deletions, updates error messages for consistency, and improves test utilities for querying specific registry versions.

971eecc54a
Update changelogs

If you like the review please follow:

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.

1 Like

Proposal #136370 for Governance — Zack | CodeGov

Vote: Adopted

Reason: The build is reproducible and the wasm hash is a match.
The canister id rrkah-fqaaa-aaaaa-aaaaq-cai is correct and the install mode is upgrade.

Proposal #136371 for Registry — Zack | CodeGov

Vote: Adopted

Reason: The build is reproducible and the wasm hash is a match.
The canister id rwlgt-iiaaa-aaaaa-aaaaa-cai is correct and the install mode is upgrade.

Proposal #136372 for Node-rewards-canister — Zack | CodeGov

Vote: Adopted

Reason: The build is reproducible and the wasm hash is a match.
The canister id sgymv-uiaaa-aaaaa-aaaia-cai is correct and the install mode is upgrade.

About CodeGov

CodeGov has a team of developers who review and vote independently on the following proposal topics: IC-OS Version Election, Protocol Canister Management, Subnet Management, Node Admin, and Participant Management. The CodeGov NNS known neuron is configured to follow our reviewers on these technical topics. We also have a group of Followees who vote independently on the Governance and the SNS & Neuron’s Fund topics. We strive to be a credible and reliable Followee option that votes on every proposal and every proposal topic in the NNS. We also support decentralization of SNS projects such as WaterNeuron, KongSwap, and Alice with a known neuron and credible Followees.

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

Adopt proposal 136370

Proposal

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

image

Code Review

  • Removes allow_active_neurons_in_stable_memory code, flags, and tasks post-neuron migration to stable memory.
  • Uses StableBTreeMap::init instead of new for neuron_id_to_voting_power_maps and voting_power_totals to load existing maps.
  • Updates changelogs with adopted proposals.
  • Adds FinalizeMaturityDisbursementsTask (flag-gated) for maturity disbursement finalization, with finalize_maturity_disbursement, try_finalize_maturity_disbursement, and next_maturity_disbursement_to_finalize for logic and error handling.

Adopt proposal 136371

Proposal

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

image

Code Review

  • Adds dechunkify and decode_high_capacity_registry_value to chunkify library for handling HighCapacityRegistryValue.
  • Drops legacy registry update format.
  • Removes nonexistent gen directory in Bazel.
  • Adds IS_CHUNKIFYING_LARGE_VALUES_ENABLED flag (default: false). maybe_chunkify_and_encode handles mutation encoding or chunkification into HighCapacityRegistryAtomicMutateRequest.
  • Renames ChainKeySigningSubnetList to ChainKeyEnabledSubnetList.
  • Adds GetNodeProvidersMonthlyXdrRewardsRequest with optional registry_version. Updates get_node_providers_monthly_xdr_rewards_ to use it.
  • Adds chunkify library with MIN_CHUNKABLE_VALUE_LEN = 10,000. chunkify_composite_mutation converts mutations to HighCapacityRegistryAtomicMutateRequest.

Adopt proposal 136372

Proposal

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

image

Code Review

  • Switches StableBTreeMap to init from new for existing map loading.
  • Adapts registry’s get_node_providers_monthly_xdr_rewards.rs tests for node-rewards.
  • Limits get_node_providers_monthly_xdr_rewards to Governance Canister.
  • Tests node-rewards vs. registry reward calculations for consistency.
  • Updates changelogs with adopted proposals.

Proposal 136370 - Zane | CodeGov

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

136370

0084cbd1bd Cleaned up logic that was used to migrate neurons to stable memory. Matches description.

d127acbebc Deleted migrate_active_neurons_to_stable_memory feature flag alongside logic used to toggle between different codepaths based on the flag’s state, e.g deciding location to store neurons. The default and only supported behavior now is using stable memory. Matches description.

bed9c76e63 Deleted allow_active_neurons_in_stable_memory feature flag and related methods to fetch/toggle it, the feature has been enabled for a while on mainnet so the flag is no longer needed. Neuron store’s logic has been simplified by removing: dead codepaths, i.e whenever allow_active_neurons_in_stable_memory was false, tests to check presence of active neurons in stable memory and benches where the feature was disabled. While ones where the flag was manually enabled have been refactored since it is no longer needed (and the method to do no longer exists anyway). StableNeuronStoreValidator struct has also been removed alongside its implementation.

12e098440c Replaced StableBTreeMap::new in VotingPowerSnapshots’ constructor with StableBTreeMap::init, the former would create a new instance a of BTreeMap on each upgrade, discarding old data, while the latter checks whether the memory provided already contains a BTreeMap and loads it if there is, otherwise a new empty BTreeMap instance is created.

eaa82be351 Updated changelogs files.

a10bf7bbe6 Implemented timer task to finalize neuron maturity disbursals, this is only scheduled if the related feature flag is enabled, which currently isn’t on mainnet. The timer will be scheduled to run either as soon as the first maturity disbursal event has to be processed or after 7 days if no disbursements are pending, in this case it would not make sense to execute it sooner as once created maturity disbursals have a 7 days wait period anyways. Though if the neuron linked to the first eligible disbursal happens to be locked a retry interval of 60 seconds is used instead. On each run the task attempts to finalize the maturity disbursement for the first eligible neuron, after all relevant data is fetched and maturity modulation is applied, an async lock is obtained on the neuron, the disbursement is popped from it and the ledger is called to mint the necessary amount, if at any point one of these operations fails, an error is returned and if the minting can’t be processed then the neuron mutations are reverted by inserting back the maturity disbursement to it so it isn’t lost and can be retried in the next execution. In the unlikely scenario where both the minting and mutation revert fail, the lock on the neuron will be retained so the issue can be further investigated. If the finalization completes successfully, following runs are scheduled using the same logic described above, otherwise in case of errors a 60 seconds retry is used as fallback.

Proposal 136371 - Zane | CodeGov

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

136371

ecee8457c4 Introduced ic-registry-canister-chunkify package which contains a library module to handle chunking of high capacity registry mutations. In this commit two methods have been implemented: chunkify_prime_mutation converts a RegistryMutation into the appropriate HighCapacityRegistryMutation equivalent, if the length of value to mutate is smaller than MIN_CHUNKABLE_VALUE_LEN then it can be used as is, otherwise the content is chunked, inserted into a provided stable structure that indexes each chunk by its hash so it can later be fetched and finally a vector of hashes is returned. Similarly chunkify_composite_mutation maps a RegistryAtomicMutateRequest into
HighCapacityRegistryAtomicMutateRequest by converting all the mutations in the request to HighCapacity by calling chunkify_prime_mutation on them.

7f58e8e04f Added dechunkify and decode_high_capacity_registry_value helper methods to ic-registry-canister-chunkify. The former reconstitues the mutation’s content, assuming the hashes provided are correct and all the chunks are stored locally. The latter decodes the content of a HighCapacityRegistryValue, if this is empty or a deletion_marker set to false it will be decoded as a 0 length value, if the deletion marker is unexpectedly set to true None is returned instead. For LargeValueChunkKeys dechunkify is used to piece together the chunked value before it is decoded.

93ad8c986c Removed logic to support legacy registry upgrade format, i.e ReprVersion::Unspecified.

367862f134 Removed gen/**/*.rs directory from LIB_SRCS build variable and registry_canister_test test target in the registry canister bazel build config as it doesn’t exist.

ca2d5e7dfc Integrate ic-registry-canister-chunkify into the registry canister and gate the chunking functionality behind IS_CHUNKIFYING_LARGE_VALUES_ENABLED feature flag, which is currently disabled and has to be toggled by using methods only available in test builds. In changelog_insert, the new maybe_chunkify_and_encode method is called when encoding RegistryAtomicMutateRequest. If the flag is disabled the old behavior is preserved, otherwise RegistryAtomicMutateRequest is converted into HighCapacityRegistryAtomicMutateRequest, with the request being transcribed if it is small or chunked using chunkify_composite_mutation, which saves the chunked content into CHUNKS global state. If input’s encoded length is greater than MAX_CHUNKABLE_ATOMIC_MUTATION_LEN, i.e 10MiB, a panic will occur.

e966556bdf Changed some methods/struts/variables to use “chain key enabled” nomenclature instead of “chain key signing”.

c00595a6d7 Added optional registry_version field to GetNodeProvidersMonthlyXdrRewardsRequest, in get_node_providers_monthly_xdr_rewards this is used to allow fetching of monthly rewards calculated using a rewards table, node operators/data centers lists specific to a certain registry version. If the registry version is not provided the latest one is used as default.

Proposal 136372 - Zane | CodeGov

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

136372

f7922dfb5f Replaced usage of StableBTreeMap::new for REGISTRY_DATA_STORE_BTREE_MAP initialization with StableBTreeMap::init so that the map is preserved across upgrades.

4ad316e04d Moved FakeRegistry definition and implementation to “fake” submodule and reward calculation tests from /node_rewards/canister/src/test.rs to a dedicate get_node_providers_monthly_xdr_rewards module, tests have also been copied from registry canister’s get_node_providers_monthly_xdr_rewards.rs. In nns integration tests test_list_node_provider_rewards has been refactored so that an array of features can be passed to it and used when setting up the nns canisters, the method has been renamed to do_test_list_node_provider_rewards and two variants of it have been created, one preserving old behavior and one that builds the governance canister in test mode so that USE_NODE_PROVIDER_REWARD_CANISTER feature flag is enabled and the node reward canister is used instead of the registry.

4ac73ac87d Check caller in get_node_providers_monthly_xdr_rewards and panic if its not the governance canister. Updated existing integration test to call said method as governance canister and added a new test to ensure the limit is properly enforced.

8bb84553e8 Added new tests to ensure consistency between responses provided by registry and node rewards canisters.

971eecc54a Updated changelogs files.

About CodeGov

CodeGov has a team of developers who review and vote independently on the following proposal topics: IC-OS Version Election, Protocol Canister Management, Subnet Management, Node Admin, and Participant Management. The CodeGov NNS known neuron is configured to follow our reviewers on these technical topics. We also have a group of Followees who vote independently on the Governance and the SNS & Neuron’s Fund topics. We strive to be a credible and reliable Followee option that votes on every proposal and every proposal topic in the NNS. We also support decentralization of SNS projects such as WaterNeuron, KongSwap, and Alice with a known neuron and credible Followees.

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