A Service Nervous System, or SNS, enables a service to run under the control of a decentralized community, allowing the dapp or service to perform community-based fundraising and gain the censorship resistance needed for advanced tokenization. Service Nervous Systems are algorithmic Decentralized Autonomous Organizations (DAOs) that allow developers to implement decentralized, token-based governance systems for their dapps, similar to the Network Nervous System (NNS) for the Internet Computer. Each dapp should have a separate SNS, which would provide open governance solutions without any developer experience necessary. For a dapp that has an assigned SNS, anyone can purchase SNS tokens and participate in SNS governance, allowing developers to tokenize the dapp and kickstart initial funding and adoption.
Service Nervous System Canisters
An SNS is realized by a set of canisters, and if one of the SNS canisters is upgraded, it has to be guaranteed that the new version of this canister remains compatible with all other corresponding SNS canisters.
SNS adapts some key concepts directly from the NNS:
- neurons - facilitates stake-based voting that guarantees voters are invested in the respective governance token, and therefore are incentivized to vote in the best interest of the system at large
- proposals - allows users to make suggestions, e.g., how to evolve the associated dapp, and for others to vote on these decisions
Each SNS should consists of a governance canister, a ledger canister, a root canister, and a WASM modules canister. As with the NNS governance, it is expected that the governance canister is deployed with an associated ledger canister, where it is determined how much stake each neuron has. Each governance canister should be configured for easy deployment and proposal changes, which will allow a community to personalize the SNS for their needs.
The governance canister enables decentralized decision making, storing information on both proposals and neurons. Neurons facilitate stake-based voting as they contain staked SNS tokens, as anyone can become a government participant by staking SNS tokens in a neuron.
The ledger canister implements the ICRC-1 standard and contains the SNS tokens, unique tokens for each SNS. It also stores details on accounts, including the amount of tokens one holds and any history of transactions between the principals.
The root canister is the canister responsible for upgrading the other SNS canisters as well as the dapp canisters that the SNS controls.
The SNS wasm modules canister holds blessed SNS versions and upgrade paths and is stored on the NNS.
SNS Launch and Lifecycle
Anyone can deploy an SNS by making a call to the SNS wasm modules canister, which will take the latest versions of the SNS canisters, initialize them with the parameters given by the user, and deploy them on the SNS subnet. This call is not permissioned and anyone can deploy an SNS in this way if they provide sufficient cycles for the SNS canisters.
A developer can then hand over the control of their dapp to a newly deployed SNS, which at this stage has limited capabilities and is not fully decentralized, and ask the Internet Computer to start a decentralization sale for this SNS. In this the decentralization sale, any initial tokens are sold for ICP tokens. At the end of a successful decentralization sale, SNS tokens are owned by a large community and therefore SNS governance control is decentralized. Here, the ICP that has been collected during the decentralization sale can provide initial funding for the SNS project, and the IC maintains all SNS canister versions. However, there are still some maintenance tasks that have to be performed by an SNS community, such as deciding and voting on when an SNS should be upgraded to a new blessed version, adjusting the SNS parameters when needed, and making sure that the SNS canisters do not run out of cycles.
Currently, the SNS communities are responsible for individually topping up the cycles of all SNS canisters as well as all dapp canisters that are controlled by the SNS. This includes archive canisters that are spawn by the ledger canister to archive all blocks.
In the future, this will be simplified in a new feature that allows canister groups, where cycles can be managed across different canisters.