Dear SNS users, developers of SNS-related frontends and tools,
The Governance team is preparing to propose a release of three new proposal types for the SNS:
RegisterExtension— registers an extension canister under the control of the DAO.ExecuteExtensionOperation— executes an operation of a priorly registered extension on behalf of the DAO.UpgradeExtension— upgrades a priorly registered extension.
The current use case for these proposals is to support the upcoming SNS Liquidity Pools feature, as discussed here. Here’s what we expect:
- When the NNS blesses the first extension, it will become available for registration. (This will be an extension of type Treasury Manager, providing two operations —
depositandwithdraw). This will not force any SNS to use the extension, but rather enable those SNSs that want to use it. Note that only an NNS-blessed extension Wasm will be possible to register, which is much different from, e.g., regular SNS-controlled dapp canisters. - The first SNS project that decides to use extensions (e.g., because that community would like to improve how their DEX-allocated assets are managed) will submit a
RegisterExtension. - When an extension is being registered, the community probably already known what it wants to use that extension for, so there must be a way to trigger the initial operation right after registration. Therefore, the
RegisterExtensionproposal can already include, e.g., the initial deposit amounts while registering a Treasury Manager extension. - After the extension is registered, it can be queried by anyone (e.g., to read audit-related info) and the SNS community can trigger its (privileged) operations via
ExecuteExtensionOperationproposals. These, of course, may also take input parameters, e.g., the deposit amounts indepositand the optional withdraw accounts forwithdraw(for the Treasury Manager example). - To upgrade an extension, the SNS can use the
ExtensionUpgradeArgproposal type. An extension can be upgraded only to another NNS-blessed Wasm version.
Important details:
- To avoid tailoring the SNS candid API to a particular type of extensions, we opted for arguments in a JSON-like format; this implies that the input argument schema needs to be communicated separately. For each new extension type, we plan to document it in the developer docs and provide an CLI tool that simplifies proposal creation when that makes sense.
- The proposal descriptions are going to be specific for each extension type, so the voters wouldn’t have to know anything about the argument schemas. For example, while registering a Treasury Manager extension, voters will see at a glance the initial deposit amounts (how much tokens will be allocated from the SNS treasury) in the proposal description.
- The topic of a
RegisterExtensionproposal depends on the extension type, e.g., registering a Treasury Manager extension will fall under the Treasury & asset management (critical) topic. Similarly, the topics ofExecuteExtensionOperationproposals vary on the specific operation being triggered by that proposal.
We are planning to propose enabling these new features in the next two weeks. Stay tuned, and please let us know here if you have any questions or concerns.

