ICPWatch
Get alerts
Application canisters

Upgrade NNS Canister: qoctq-giaaa-aaaaa-aaaea-cai to wasm with hash: f6846d46b78a1e7c0f33e862e1831cd2b745ca33027caaeb01d8d469f7fbc8b3

#144564 · Open · 4 d left · proposed Oct 24, 2026

Yes 94.3%0.4% of voting power has votedNo 5.7%
tally read NNS governance canister, list_proposals
Action
Install Code
Proposer neuron
63
Created
Voting ends
Oct 28, 2026 (in 4 d)

Summary

Upgrade frontend NNS Dapp canister to commit 906b1cfb3889c0a6248fc4257f8913e57afdf4c2

Wasm sha256 hash: f6846d46b78a1e7c0f33e862e1831cd2b745ca33027caaeb01d8d469f7fbc8b3 (https://github.com/dfinity/nns-dapp/actions/runs/39579778830)

Change Log

Fixed

  • The proposal detail page no longer parses the text fields of a payload as

JSON, so a text that nests JSON thousands of levels deep no longer breaks the page.

Security

  • The "Hide Balance" option now also masks the balances in the accessible names

on the Portfolio page. Before, the cards kept the exact amounts in their aria-label attributes, so a screen reader announced them.

  • Impose a Candid decoding quota on every exported method that takes an argument. The quota limits the DoS surface from decoding bombs.
  • The sign-out message in the URL is now limited to known messages. Before, a

crafted link could show any text as an official toast.

  • Check and escape the canister install arguments that the canister puts in the

Content-Security-Policy of every page. A value that is not a web address could previously end the content attribute and add live HTML to the page. The install or the upgrade now fails if a value is not a web address. The check also limits the ROBOTS argument to the robots meta tag.

  • The import token validation no longer sends the user principal to the entered

canisters. The ledger and index canister IDs come from the form or from the URL, so the two validation calls now use the anonymous identity.

Commit Log

+ bash -xc "git log --format='%C(auto) %h %s' 30787a551..906b1cfb3"
 906b1cfb3 chore(deps): bump sha2 from 0.11.0 to 0.11.1 (#8109)
 d3dcbd6f6 chore(deps): bump candid from 0.10.37 to 0.10.38 (#8107)
 cde69a920 chore(deps): bump tokio from 1.53.2 to 1.53.3 (#8106)
 61a466dae chore(deps): fix open npm Dependabot alerts (#8111)
 46e2efe0e bot: Update IC Cargo Dependencies to release-2026-10-16_03-29-base (#8104)
 f259eba1f chore(deps): bump actions/create-github-app-token from 3.2.0 to 3.3.0 (#8105)
 8a32e4938 fix(proposals): keep summary content inside the summary card (#8112)
 c8cf0df04 chore(frontend): bump @dfinity/gix-components to 10.0.5 (#8110)
 a05d9027a fix(proposals): stop parsing payload texts as JSON (#8052)
 c27abab01 fix(imported-tokens): validate the entered canisters anonymously (#8039)
 76ce00ab6 fix(security): check and escape install arguments in the CSP meta tag (#8029)
 7a690679d chore(ci): add least-privilege permissions to build.yml and checks.yml (#8053)
 5a7d46cd3 bot: Update snsdemo to release-2026-10-14 (#8103)
 5e3d048e3 chore(ci): limit GITHUB_TOKEN to read-only in ten workflows (#8054)
 3e7d4ed57 fix(neurons): serialize the claim or refresh of a neuron (#8086)
 cd33bb03e bot: Update IC Cargo Dependencies to release-2026-10-08_03-33--all-in-one (#8096)
 1b70a7731 bot: Update rust version to 1.99.1 (#8102)
 2134ee14c chore(deps): bump actions/setup-node from 7.0.0 to 7.1.0 (#8100)
 1e248712f chore(deps): bump actions/download-artifact from 8.0.1 to 8.0.2 (#8098)
 85afcf11d bot: Update rust version to 1.99.0 (#8094)
 3cb1504e6 chore(deps): bump ic-management-canister-types from 0.10.0 to 0.11.0 (#8097)
 1102e34a9 chore(deps): bump actions/upload-artifact from 7.0.1 to 7.0.2 (#8099)
 3be338ead bot: Update SNS Aggregator Response (#8101)
 94b6cde82 chore(proposals): remove helpers left from the nns-dapp payload path (#8092)
 bec69e868 fix(auth): limit the sign-out toast message to a known allowlist (#8037)
 45706ec25 bot: Update snsdemo to release-2026-10-07 (#8095)
 e070209bf fix(backend): apply a Candid decoding quota to every endpoint (#8021)
 18ca45f0f fix(backend): check the account limit only when add_account creates an account (#8041)
 d7f8c2620 bot: Update SNS Aggregator Response (#8093)
 9c5d316d5 fix(portfolio): keep the balance out of the aria labels in privacy mode (#8044)
 ad9af6123 chore(frontend): bump @zondax/ledger-icp to 4.0.0 (#8083)
 f164947c4 bot: Update IC Cargo Dependencies to release-2026-10-02_03-31--all-in-one (#8090)
 f68214682 bot: Update snsdemo to release-2026-09-30 (#8089)
 7b80938f5 chore(deps): bump lazy_static from 1.5.0 to 1.5.1 (#8091)
 05e06b135 Update changelog after release (#8087)
 5ae1dec66 bot: Update SNS Aggregator Response (#8084)
 5fec48751 fix(release): download the 90-day CI wasm artifacts (#8085)
 0f590ba3a chore(deps): bump docker/build-push-action from 7.3.0 to 7.4.0 (#8072)
 24a63b373 chore(deps): bump docker/setup-buildx-action from 4.3.0 to 4.4.1 (#8071)
 d90ff9f3e bot: Update IC Cargo Dependencies to release-2026-09-25_03-28-base (#8081)
 b1496a55c bot: Update snsdemo to release-2026-09-23 (#8080)
 db930aba8 bot: Update SNS Aggregator Response (#8078)

Wasm Verification

To build the wasm module yourself and verify its hash, run the following commands from the root of the nns-dapp repo:

git fetch  # to ensure you have the latest changes.
git checkout "906b1cfb3889c0a6248fc4257f8913e57afdf4c2"
git merge-base --is-ancestor HEAD origin/main && echo "OK" || echo "Commit is not on main branch!"
./scripts/docker-build
sha256sum nns-dapp.wasm.gz

You may also want to verify the canister arguments. In the proposal they are binary, which is not very readable. Docker provides both binary and text formats and you can verify that the text format corresponds to the binary arg_hash field in the proposal.

cat nns-dapp-arg-mainnet.did
didc encode "$(cat nns-dapp-arg-mainnet.did)" | xxd -r -p | sha256sum

Official view: dashboard.internetcomputer.org/proposal/144564