Service Nervous System (SNS)
Similarly to how the Network Nervous System (NNS) is the open tokenized DAO that controls the Internet Computer blockchain (IC), service nervous systems (SNSs) are algorithmic DAOs that allow developers to hand over control of their dapp to decentralized, token-based governance systems. This means, each dapp that would like to be under decentralized control will have a separate SNS.
Developers can now hand over their Web3 service to an SNS there are also other alternatives of how developers can get a DAO. The community can buy governance tokens to take ownership and control through the SNS DAO and shape the dapp’s future.
The SNS consists of a governance canister, a ledger canister with archive canisters and an index canister, a root canister, and a decentralization swap canister that is explained in the next section.
The ledger canister implements the ICRC-1 standard and contains SNS tokens, which are unique tokens for each SNS. It stores which accounts own how many SNS tokens and the history of transactions between the principals. The archive canisters stores the history of the ledger transactions and the index canister allows one to find all the transactions associated with an account.
The governance canister enables decentralized decision making. It stores proposals that are suggestions on how to evolve the dapp that the SNS governs and neurons that define who the governance participants are. Neurons facilitate stake-based voting as they contain staked SNS tokens. Everyone can become a government participant by staking SNS tokens in a neuron.
The root canister is responsible for upgrading the other SNS canisters and the dapp canisters that the SNS controls.
SNS launch process
SNS canisters are maintained and blessed by the IC community. In more detail, the blessed SNS versions and upgrade paths are stored on an NNS canister called the SNS wasm modules canister. Currently, and SNS is launched in two steps:
- First, the SNS canisters are created and their initial parameters are set by a manual call to the NNS canister called SNS-W (SNS wasm modules canister). The dapp’s control is then handed over to the SNS canisters, which are in a pre-decentralization-swap state with limited capabilities. In this state, the developer neurons exist and they can upgrade the dapp canisters through the SNS already.
- Second, an NNS proposal is submitted. If the proposal is adopted, a decentralization swap will be started for the SNS (see next). When voting on this proposal, the NNS voters can verify the parameters in the already existing SNS canisters as well as the swap parameters that are set in the proposal. If the proposal is rejected, the SNS launch fails and the dapp is handed back to the developers.
To ensure that malicious parties cannot simply perform the first step and fill the SNS subnet with non-approved SNS canisters, SNS-W contains a list of allowed principals that are allowed to install an SNS. A principal can be added to this list by NNS proposal, which will allow the principal to install exactly one SNS. After this one call, SNS-W automatically removes the principal from the list again, so this can only be done once.
SNS decentralization swap
A crucial part of launching an SNS is how it can be decentralized. That is, the newly created tokens must be distributed to a large community to ensure proper decentralization of voting power. There are of course many ways to do so. The first SNS version provides one simple way to achieve this: a developer can hand over their dapp to the ICP and ask it to start a decentralization swap for the newly created SNS. In the decentralization swap, a fixed number of newly created SNS tokens are given away. The swap collects ICP tokens and, in the end, the conversion rate is computed as the number of ICP collected by the number of SNS tokens - the tokens are swapped. After a successful decentralization swap, SNS tokens are thus owned by a large community and therefore the SNS governance control is decentralized. Moreover, the ICP that were collected in the decentralization swap provide initial funding for the SNS project.
If you are looking to decentralize a dapp, you can find more information in the developer documentation. If you want to participate, you can find more information on the SNS website.
There are some important 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. There is more information about how to participate in an SNS DAO and more technical details of how to contribute to managing an SNS DAO as a community member.