Mistaken SNS-1 Upgrade Proposal Summary

Mistaken SNS-1 Upgrade Proposal Summary

TLDR;

  • When submitting the recent SNS-1 Upgrade proposal, a mistake was made when entering the user-supplied proposal summary.
  • The proposal’s automatically-generated payload is correct in that the SNS-1 Ledger is the next canister to be upgraded. The proposal can be voted on as normal and will succeed if adopted.
  • The mistake in the proposal summary was due to the “special-path” for SNS-1 upgrades announced in “What happened in the “failed” SNS-1 proposal to upgrade the SNS-1 ledger canister?

Hi everyone,

As the SNS-1 community has noticed, the recent proposal to upgrade SNS-1 to its next version has a proposal summary that is different from what the payload suggests is being upgraded. The summary states that the SNS-1 Root canister is the next canister to be upgraded, while the payload suggests that the SNS-1 Ledger is the next canister to be upgraded.

In this case, the proposal summary (which is user-provided and should always be checked against the payload) is incorrect, and the SNS-1 Ledger is indeed the next canister to be upgraded. If adopted, the upgrade of the ledger canister will succeed and SNS-1 will continue to function, and the next Upgrade proposal will upgrade SNS-1 Root.

The cause of the confusion with the proposal text is caused by the “special-path” upgrade that SNS-1 has inside of the SNS-W canister. As previously mentioned in “What happened in the “failed” SNS-1 proposal to upgrade the SNS-1 ledger canister?”, the SNS-1 diverged from the upgrade path set in the SNS-W canister and needed to have a “special-path” added to the SNS-W canister by the NNS. The next two SNS-1 upgrades would then follow this “special-path” until it could return to the “normal” path automatically. In Proposal 50 the proposal summary was based on the next upgrade in the normal path, which will result in the SNS-1 Root canister being upgraded to hash 8b2e9f5ac40f916b14dde2822450bde7846ed8980436c4dc2098da0c0bce731e when in fact there is one more upgrade step in this special-path before returning to the “normal” upgrade path.

To verify this yourself using dfx, you can execute the following command against the SNS-W canister (qaa6y-5yaaa-aaaaa-aaafa-cai):

$ dfx canister --network ic call qaa6y-5yaaa-aaaaa-aaafa-cai list_upgrade_steps 'record {
   limit=5:nat32; 
   sns_governance_canister_id=opt principal "zqfso-syaaa-aaaaq-aaafq-cai"; 
   starting_at=opt record {
      archive_wasm_hash = blob "|\a8\0c\b2\fe\e2\ba\e8\e6c\06\b1\d7\feC\1e\0a5\d1\f7l8K\e2\f4L,\ca3\c7*\03";
      root_wasm_hash = blob "\fe\19g\14hA\a2G\b2\f7\93\aea\e5\ef<kE\ec\fb\e1b\ec\aa\8a\f2F\bf^\073?";
      swap_wasm_hash = blob "\9d\12\e7\22\81\a0HgB\c6\b0\fd\c4\84\9b?y\f2\0bd\c1\d3\c4W\fei\86\c1c\99Pl";
      ledger_wasm_hash = blob "\8f\bb! \02\80\d6A3-\acF\db2<\ea\e1\98\c9\can\de\c9Q,I\8e\ef\e8\c08\86";
      governance_wasm_hash = blob "\f6\d4\9d\83\bc\c1\94\d6\b6c]\02b\95l8\8fg.\81\ea\fb\01\1c\d0\e4T\15\a7\15\f1q";
      index_wasm_hash = blob "ra\ab\c5j\b7\8d\83\c59\ab\13\cc\fa\bc\fd\927>\06\f4s\e3\a8\14\91\b2\0b\e0\15\05D";
   }
}'

# Expected Output
(
  record {
    steps = vec {
      [1] record {
        pretty_version = opt record {
          archive_wasm_hash = "7ca80cb2fee2bae8e66306b1d7fe431e0a35d1f76c384be2f44c2cca33c72a03";
          root_wasm_hash = "fe1967146841a247b2f793ae61e5ef3c6b45ecfbe162ecaa8af246bf5e07333f";
          swap_wasm_hash = "9d12e72281a0486742c6b0fdc4849b3f79f20b64c1d3c457fe6986c16399506c";
          ledger_wasm_hash = "8fbb21200280d641332dac46db323ceae198c9ca6edec9512c498eefe8c03886";
          governance_wasm_hash = "f6d49d83bcc194d6b6635d0262956c388f672e81eafb011cd0e45415a715f171";
          index_wasm_hash = "7261abc56ab78d83c539ab13ccfabcfd92373e06f473e3a81491b20be0150544";
        };
        version = opt record {
          archive_wasm_hash = blob "|\a8\0c\b2\fe\e2\ba\e8\e6c\06\b1\d7\feC\1e\0a5\d1\f7l8K\e2\f4L,\ca3\c7*\03";
          root_wasm_hash = blob "\fe\19g\14hA\a2G\b2\f7\93\aea\e5\ef<kE\ec\fb\e1b\ec\aa\8a\f2F\bf^\073?";
          swap_wasm_hash = blob "\9d\12\e7\22\81\a0HgB\c6\b0\fd\c4\84\9b?y\f2\0bd\c1\d3\c4W\fei\86\c1c\99Pl";
          ledger_wasm_hash = blob "\8f\bb! \02\80\d6A3-\acF\db2<\ea\e1\98\c9\can\de\c9Q,I\8e\ef\e8\c08\86";
          governance_wasm_hash = blob "\f6\d4\9d\83\bc\c1\94\d6\b6c]\02b\95l8\8fg.\81\ea\fb\01\1c\d0\e4T\15\a7\15\f1q";
          index_wasm_hash = blob "ra\ab\c5j\b7\8d\83\c59\ab\13\cc\fa\bc\fd\927>\06\f4s\e3\a8\14\91\b2\0b\e0\15\05D";
        };
      };
      [2] record {
        pretty_version = opt record {
          archive_wasm_hash = "7ca80cb2fee2bae8e66306b1d7fe431e0a35d1f76c384be2f44c2cca33c72a03";
          root_wasm_hash = "fe1967146841a247b2f793ae61e5ef3c6b45ecfbe162ecaa8af246bf5e07333f";
          swap_wasm_hash = "9d12e72281a0486742c6b0fdc4849b3f79f20b64c1d3c457fe6986c16399506c";
          ledger_wasm_hash = "6a162e9a8335c454f2a8329b096308152cc8b88dcdb7e6039edbbc7c6307a550";
          governance_wasm_hash = "f6d49d83bcc194d6b6635d0262956c388f672e81eafb011cd0e45415a715f171";
          index_wasm_hash = "7261abc56ab78d83c539ab13ccfabcfd92373e06f473e3a81491b20be0150544";
        };
        version = opt record {
          archive_wasm_hash = blob "|\a8\0c\b2\fe\e2\ba\e8\e6c\06\b1\d7\feC\1e\0a5\d1\f7l8K\e2\f4L,\ca3\c7*\03";
          root_wasm_hash = blob "\fe\19g\14hA\a2G\b2\f7\93\aea\e5\ef<kE\ec\fb\e1b\ec\aa\8a\f2F\bf^\073?";
          swap_wasm_hash = blob "\9d\12\e7\22\81\a0HgB\c6\b0\fd\c4\84\9b?y\f2\0bd\c1\d3\c4W\fei\86\c1c\99Pl";
          ledger_wasm_hash = blob "j\16.\9a\835\c4T\f2\a82\9b\09c\08\15,\c8\b8\8d\cd\b7\e6\03\9e\db\bc|c\07\a5P";
          governance_wasm_hash = blob "\f6\d4\9d\83\bc\c1\94\d6\b6c]\02b\95l8\8fg.\81\ea\fb\01\1c\d0\e4T\15\a7\15\f1q";
          index_wasm_hash = blob "ra\ab\c5j\b7\8d\83\c59\ab\13\cc\fa\bc\fd\927>\06\f4s\e3\a8\14\91\b2\0b\e0\15\05D";
        };
      };
      [3] record {
        pretty_version = opt record {
          archive_wasm_hash = "7ca80cb2fee2bae8e66306b1d7fe431e0a35d1f76c384be2f44c2cca33c72a03";
          root_wasm_hash = "8b2e9f5ac40f916b14dde2822450bde7846ed8980436c4dc2098da0c0bce731e";
          swap_wasm_hash = "9d12e72281a0486742c6b0fdc4849b3f79f20b64c1d3c457fe6986c16399506c";
          ledger_wasm_hash = "6a162e9a8335c454f2a8329b096308152cc8b88dcdb7e6039edbbc7c6307a550";
          governance_wasm_hash = "f6d49d83bcc194d6b6635d0262956c388f672e81eafb011cd0e45415a715f171";
          index_wasm_hash = "7261abc56ab78d83c539ab13ccfabcfd92373e06f473e3a81491b20be0150544";
        };
        version = opt record {
          archive_wasm_hash = blob "|\a8\0c\b2\fe\e2\ba\e8\e6c\06\b1\d7\feC\1e\0a5\d1\f7l8K\e2\f4L,\ca3\c7*\03";
          root_wasm_hash = blob "\8b.\9fZ\c4\0f\91k\14\dd\e2\82$P\bd\e7\84n\d8\98\046\c4\dc \98\da\0c\0b\ces\1e";
          swap_wasm_hash = blob "\9d\12\e7\22\81\a0HgB\c6\b0\fd\c4\84\9b?y\f2\0bd\c1\d3\c4W\fei\86\c1c\99Pl";
          ledger_wasm_hash = blob "j\16.\9a\835\c4T\f2\a82\9b\09c\08\15,\c8\b8\8d\cd\b7\e6\03\9e\db\bc|c\07\a5P";
          governance_wasm_hash = blob "\f6\d4\9d\83\bc\c1\94\d6\b6c]\02b\95l8\8fg.\81\ea\fb\01\1c\d0\e4T\15\a7\15\f1q";
          index_wasm_hash = blob "ra\ab\c5j\b7\8d\83\c59\ab\13\cc\fa\bc\fd\927>\06\f4s\e3\a8\14\91\b2\0b\e0\15\05D";
        };
      };
      record {
        pretty_version = opt record {
          archive_wasm_hash = "601d27aac96b94dfb199ad0872425ac6978a7e20db3722e6c3b8780b04ff8270";
          root_wasm_hash = "8b2e9f5ac40f916b14dde2822450bde7846ed8980436c4dc2098da0c0bce731e";
          swap_wasm_hash = "9d12e72281a0486742c6b0fdc4849b3f79f20b64c1d3c457fe6986c16399506c";
          ledger_wasm_hash = "6a162e9a8335c454f2a8329b096308152cc8b88dcdb7e6039edbbc7c6307a550";
          governance_wasm_hash = "f6d49d83bcc194d6b6635d0262956c388f672e81eafb011cd0e45415a715f171";
          index_wasm_hash = "7261abc56ab78d83c539ab13ccfabcfd92373e06f473e3a81491b20be0150544";
        };
        version = opt record {
          archive_wasm_hash = blob "\60\1d\27\aa\c9k\94\df\b1\99\ad\08rBZ\c6\97\8a~ \db7\22\e6\c3\b8x\0b\04\ff\82p";
          root_wasm_hash = blob "\8b.\9fZ\c4\0f\91k\14\dd\e2\82$P\bd\e7\84n\d8\98\046\c4\dc \98\da\0c\0b\ces\1e";
          swap_wasm_hash = blob "\9d\12\e7\22\81\a0HgB\c6\b0\fd\c4\84\9b?y\f2\0bd\c1\d3\c4W\fei\86\c1c\99Pl";
          ledger_wasm_hash = blob "j\16.\9a\835\c4T\f2\a82\9b\09c\08\15,\c8\b8\8d\cd\b7\e6\03\9e\db\bc|c\07\a5P";
          governance_wasm_hash = blob "\f6\d4\9d\83\bc\c1\94\d6\b6c]\02b\95l8\8fg.\81\ea\fb\01\1c\d0\e4T\15\a7\15\f1q";
          index_wasm_hash = blob "ra\ab\c5j\b7\8d\83\c59\ab\13\cc\fa\bc\fd\927>\06\f4s\e3\a8\14\91\b2\0b\e0\15\05D";
        };
      };
...
    };
  },
)

I’ve taken the liberty to include some annotations to explain what the steps in this response indicate. When given any sns_governance_canister_id, the SNS-W will check if there are any “special-paths” that the SNS must take. In this case the SNS-1 has version [1] running. The next version [2] is on the “special-path” and is the last step that must be taken before returning to the normal path. This was automatically pulled by SNS-1 during proposal submission and matches what is displayed in the proposal. The following version [3] is the next step in the upgrade path, and is what a normal SNS-1 would see given the last upgrade proposal 36, and is why the inputted proposal text indicated SNS-1 Root would be upgraded next.

Special thanks to the SNS-1 community for diligently monitoring the proposals and identifying the issue.

4 Likes

I had assumed the upgrade was behind from the previous rejection and that maybe something was just miscommunicated.

Thanks for the clarification and the thorough explanation of how those upgrades work!

1 Like

Hi @nolyoi and SNS-1 community,

The proposal was executed and the Ledger canister was upgraded successfully! Onto the next!

As determining which canister should be upgraded next is handled autonomously by the SNS Governance canister and doesn’t require submitting the next Wasm binary in the proposal, it is actually quite easy to submit the upgrade proposal via quill. We encourage other members of the SNS-1 community to submit these kinds of proposals as well!

There are some examples of how to submit proposals via quill on the SNS testflight documention page. In this case the proposal to be submitted is UpgradeSnsToNextVersion via the quill sns make-proposal.

1 Like