diff --git a/docs/developer-docs/integrations/index.md b/docs/developer-docs/integrations/index.md index f2d299b4e5..ffa1ed9ba9 100644 --- a/docs/developer-docs/integrations/index.md +++ b/docs/developer-docs/integrations/index.md @@ -42,12 +42,12 @@ Rosetta is an open standard introduced by Coinbase to simplify the integration o ## Service Nervous System (SNS) Similar to how the NNS is the open tokenized DAO that controls the IC, SNSs are algorithmic DAOs that allow developers to create decentralized, token-based governance systems for their dapps. This section provides an [overview of the SNS documentation](./sns/index.md) and then provides the documentation aimed at developers. -* [An introduction to the SNS.](./sns/lifecycle-sns/sns-intro-highlevel.md) +* [An introduction to the SNS.](./sns/introduction/sns-intro-high-level.md) * [An introduction to how to prepare for an SNS launch.](./sns/tokenomics/index.md) -* [SNS integration documentation.](./sns/integrate-sns/index.md) -* [SNS testing documentation.](./sns/get-sns/get-sns-intro.md) -* [An introduction to the SNS launch.](./sns/launch-sns/launch-sns.md) -* [Information on how to manage an SNS.](./sns/managing-sns/manage-sns-intro.md) +* [SNS integration documentation.](./sns/integrating/index.md) +* [SNS testing documentation.](./sns/testing/testing-before-launch.md) +* [An introduction to the SNS launch.](./sns/launching/launch-summary.md) +* [Information on how to manage an SNS.](./sns/managing/manage-sns-intro.md) ## Threshold ECDSA A threshold ECDSA implementation on a blockchain can be viewed as the on-chain pendant to a hardware security module (HSM) that stores private keys securely and issues signatures on request of the eligible entities, and only to those. It is particularly important to facilitate direct integration with (ECDSA-based) blockchains. @@ -61,4 +61,3 @@ A threshold ECDSA implementation on a blockchain can be viewed as the on-chain p - diff --git a/docs/developer-docs/integrations/sns/index.md b/docs/developer-docs/integrations/sns/index.md index 80b648b410..286f3f8508 100644 --- a/docs/developer-docs/integrations/sns/index.md +++ b/docs/developer-docs/integrations/sns/index.md @@ -10,10 +10,10 @@ This page provides an overview of how the SNS developer documentation is organiz ## Introduction to the SNS This section gives a high level overview of the SNS lifecycle, including the architecture and how an SNS is launched. You will find -* [SNS introduction](./lifecycle-sns/sns-intro-highlevel.md) giving a quick introduction. -* [SNS architecture](./lifecycle-sns/sns-architecture.md) explaining how SNSs are deployed and upgraded and what canisters are involved. -* [SNS launch](./lifecycle-sns/sns-launch.md) explaining all the steps that are involved in launching an SNS. -* [Alternative DAOs](./lifecycle-sns/dao-alternatives.md) presenting alternatives ways how to get a DAO. +* [SNS introduction](./introduction/sns-intro-high-level.md) giving a quick introduction. +* [SNS architecture](./introduction/sns-architecture.md) explaining how SNSs are deployed and upgraded and what canisters are involved. +* [SNS launch](./launching/launch-summary.md) explaining all the steps that are involved in launching an SNS. +* [Alternative DAOs](./introduction/dao-alternatives.md) presenting alternatives ways how to get a DAO. ## Preparing an SNS launch This section introduces the ideas and tools needed when considering to form a DAO, including less technical aspects, such as planning the tokenomics, as well as more @@ -32,26 +32,27 @@ This section not only targets developers that have a dapp that they would like t want to build services that integrate with SNSs, such as wallet dapps or decentralized exchanges. It includes -* [An introduction to SNS integration](./integrate-sns/index.md). -* [Guidelines how to integrate with the ledger canister](./integrate-sns/ledger-integration.md). -* [Guidelines how to integrate with the index canister](./integrate-sns/index-integration.md). +* [An introduction to SNS integration](./integrating/index.md). +* [Guidelines how to integrate with the ledger canister](./integrating/ledger-integration.md). +* [Guidelines how to integrate with the index canister](./integrating/index-integration.md). ## SNS testing An important part of preparing an SNS launch, integrating with an SNS, and managing an SNS, is testing. This section provides -* [An introduction to SNS testing](./get-sns/get-sns-intro.md). -* [Guidelines how to test an SNS locally](./get-sns/local-testing.md), including the SNS lauch. -* [Guidelines how to test the operation of the dapp under SNS control](./get-sns/testflight.md), including on mainnet. +* [An introduction to SNS testing](./testing/testing-before-launch.md). +* [Guidelines how to test an SNS locally](./testing/local-testing.md), including the SNS lauch. +* [Guidelines how to test the operation of the dapp under SNS control](./testing/testflight.md), including on the mainnet. + ## SNS launch -This parts explains how an [SNS is launched on mainnet](./launch-sns/launch-sns.md). +This parts explains how an [SNS is launched on mainnet](./launching/launch-steps.md). ## Managing an SNS After an SNS is launched, the SNS community needs to manage it, including ensuring that the canisters have enough cycles, govern the dapp, and manage SNS canister upgrades. This section includes -* [An introduction to managing an SNS](./managing-sns/manage-sns-intro.md). -* [Tips regarding cycles management for the canisters](./managing-sns/cycles-usage.md). +* [An introduction to managing an SNS](./managing/manage-sns-intro.md). +* [Tips regarding cycles management for the canisters](./managing/cycles-usage.md). diff --git a/docs/developer-docs/integrations/sns/integrate-sns/_category_.yml b/docs/developer-docs/integrations/sns/integrating/_category_.yml similarity index 100% rename from docs/developer-docs/integrations/sns/integrate-sns/_category_.yml rename to docs/developer-docs/integrations/sns/integrating/_category_.yml diff --git a/docs/developer-docs/integrations/sns/integrate-sns/index-integration.md b/docs/developer-docs/integrations/sns/integrating/index-integration.md similarity index 100% rename from docs/developer-docs/integrations/sns/integrate-sns/index-integration.md rename to docs/developer-docs/integrations/sns/integrating/index-integration.md diff --git a/docs/developer-docs/integrations/sns/integrate-sns/index.md b/docs/developer-docs/integrations/sns/integrating/index.md similarity index 82% rename from docs/developer-docs/integrations/sns/integrate-sns/index.md rename to docs/developer-docs/integrations/sns/integrating/index.md index 2478d5a292..3bb1632167 100644 --- a/docs/developer-docs/integrations/sns/integrate-sns/index.md +++ b/docs/developer-docs/integrations/sns/integrating/index.md @@ -11,6 +11,6 @@ For example, DEXs might have to interact with the SNS ledger canister. As these considerations are not only relevant for the SNS launch but during the full SNS lifecycle, we explain them in this separate section. You can find more information on -* The [ledger canister integration](../integrate-sns/ledger-integration.md). -* The [index canister integration](../integrate-sns/index-integration.md). +* The [ledger canister integration](../integrating/ledger-integration.md). +* The [index canister integration](../integrating/index-integration.md). * Swap and governance frontend integration to follow. diff --git a/docs/developer-docs/integrations/sns/integrate-sns/ledger-integration.md b/docs/developer-docs/integrations/sns/integrating/ledger-integration.md similarity index 100% rename from docs/developer-docs/integrations/sns/integrate-sns/ledger-integration.md rename to docs/developer-docs/integrations/sns/integrating/ledger-integration.md diff --git a/docs/developer-docs/integrations/sns/lifecycle-sns/_category_.yml b/docs/developer-docs/integrations/sns/introduction/_category_.yml similarity index 100% rename from docs/developer-docs/integrations/sns/lifecycle-sns/_category_.yml rename to docs/developer-docs/integrations/sns/introduction/_category_.yml diff --git a/docs/developer-docs/integrations/sns/lifecycle-sns/dao-alternatives.md b/docs/developer-docs/integrations/sns/introduction/dao-alternatives.md similarity index 100% rename from docs/developer-docs/integrations/sns/lifecycle-sns/dao-alternatives.md rename to docs/developer-docs/integrations/sns/introduction/dao-alternatives.md diff --git a/docs/developer-docs/integrations/sns/lifecycle-sns/sns-architecture.md b/docs/developer-docs/integrations/sns/introduction/sns-architecture.md similarity index 99% rename from docs/developer-docs/integrations/sns/lifecycle-sns/sns-architecture.md rename to docs/developer-docs/integrations/sns/introduction/sns-architecture.md index 641f44ddb9..71e5272772 100644 --- a/docs/developer-docs/integrations/sns/lifecycle-sns/sns-architecture.md +++ b/docs/developer-docs/integrations/sns/introduction/sns-architecture.md @@ -26,7 +26,7 @@ called the **SNS wasm modules canister (SNS-W)**. When an SNS is created, SNS-W is involved and responsible for deploying the latest version of the SNS canister. When the SNS should be updated, this happens by an NNS proposal that adds a new version of the -SNS cansiters to SNS-W. +SNS canisters to SNS-W. Each SNS community can then simply decide to adopt these new, approved versions in their SNS instance. ### Customizability diff --git a/docs/developer-docs/integrations/sns/lifecycle-sns/sns-intro-highlevel.md b/docs/developer-docs/integrations/sns/introduction/sns-intro-high-level.md similarity index 100% rename from docs/developer-docs/integrations/sns/lifecycle-sns/sns-intro-highlevel.md rename to docs/developer-docs/integrations/sns/introduction/sns-intro-high-level.md diff --git a/docs/developer-docs/integrations/sns/launch-sns/launch-sns.md b/docs/developer-docs/integrations/sns/launch-sns/launch-sns.md deleted file mode 100644 index f7b07b1eb4..0000000000 --- a/docs/developer-docs/integrations/sns/launch-sns/launch-sns.md +++ /dev/null @@ -1,77 +0,0 @@ -# SNS launch -## Overview -An SNS can be launched in production by following the steps explained on a -high level [here](../lifecycle-sns/sns-launch.md). -Technically, these are the same steps that the -[SNS local testing repository](../get-sns/local-testing.md) guides you through, -with the difference that the commands target the canisters on the mainnet. - -To make the most important commands and what they need to look like for -mainnet more accessible, they are listed below. - -## Submitting an NNS proposal to approve the SNS {#SNS-launch-command-NNSproposal1} -After preparations and choosing the parameters -([Step 1: Preparation](../lifecycle-sns/sns-launch.md/#SNS-launch-step-preparation), -an [NNS proposal approves the creation of the SNS](#SNS-launch-step-NNSapproval). -Anyone who owns and NNS neuron with enough stake can submit such a proposal -that lists a principal wallet in SNS-W who can then deploy the SNS canisters. -For the larger context, you can consider how this command is used in the SNS -local testing repository -[here](https://github.com/dfinity/sns-testing/blob/main/deploy_sns.sh#L18-L23). -``` -ic-admin \ - --nns-url "${NETWORK_URL}" propose-to-update-sns-deploy-whitelist \ - --added-principals "${WALLET}" \ - --proposal-title "Let me SNS!" \ - --summary "This proposal whitelists developer's principal to deploy SNS" -``` - -For the ic-admin command you could substitute `NETWORK_URL` with `https://nns.ic0.app` and for the `dfx` -there is a shorthand where you can just provide `dfx canister -- network ic`. - - - -## SNS canister creation calling SNS-W {#SNS-launch-command-SNSW} -After the wallet canister is listed in SNS-W, -the [SNS canisters are created triggered by a manual call to SNS-W](../lifecycle-sns/sns-launch.md/#SNS-launch-step-deployment). -You can find this command in an example in the SNS local testing repository [here](https://github.com/dfinity/sns-testing/blob/main/deploy_sns.sh#L33) -``` -sns deploy --network "${NETWORK}" --init-config-file "${CONFIG}" --save-to "sns_canister_ids.json" -``` - -## Submitting an NNS proposal to start the SNS swap {#SNS-launch-command-NNSproposal2} -After the SNS canisters are deployed and the dapp's control is handed over to -the SNS, an [NNS proposal starts the swap](../lifecycle-sns/sns-launch.md/#SNS-launch-step-startSwap). -Again, anyone who owns an NNS neuron with enough stake can submit this proposal. -Of course it is crucial to set the right parameters in this proposal. -You can also find an example how this command is used in the SNS local testing -[here](https://github.com/dfinity/sns-testing/blob/main/open_sns_sale.sh#L11-L26). -``` -ic-admin \ - --nns-url "${NETWORK_URL}" propose-to-open-sns-token-swap \ - --min-participants 3 \ - --min-icp-e8s 5000000000 \ - --max-icp-e8s 50000000000 \ - --min-participant-icp-e8s 100000000 \ - --max-participant-icp-e8s 20000000000 \ - --swap-due-timestamp-seconds "${DEADLINE}" \ - --sns-token-e8s 500000000000 \ - --target-swap-canister-id "${SNS_SWAP_ID}" \ - --community-fund-investment-e8s 5000000000 \ - --neuron-basket-count 3 \ - --neuron-basket-dissolve-delay-interval-seconds 31536000 \ - --proposal-title "Decentralize this SNS" \ - --summary "Decentralize this SNS" -``` - - -## Finalizing the SNS swap {#SNS-launch-command-finalizingswap} -When the swap ends, either because its deadline is reached or because the maximum -ICP have been collected, its finalization has to be triggered by a manual call -to the SNS swap that can be done by anyone. -You can find this command with more context in the SNS local testing repository -[here](https://github.com/dfinity/sns-testing/blob/main/finalize_sns_sale.sh#L8). - -``` -dfx canister --network "${NETWORK}" call finalize_swap '(record {})' -``` diff --git a/docs/developer-docs/integrations/sns/launch-sns/_category_.yml b/docs/developer-docs/integrations/sns/launching/_category_.yml similarity index 100% rename from docs/developer-docs/integrations/sns/launch-sns/_category_.yml rename to docs/developer-docs/integrations/sns/launching/_category_.yml diff --git a/docs/developer-docs/integrations/sns/launching/launch-steps.md b/docs/developer-docs/integrations/sns/launching/launch-steps.md new file mode 100644 index 0000000000..6353817f26 --- /dev/null +++ b/docs/developer-docs/integrations/sns/launching/launch-steps.md @@ -0,0 +1,121 @@ +# SNS launch steps + +## Overview +At a high level, the stages for launching an SNS in production are explained [here](../launching/launch-summary.md). + +This article lists the technical commands and steps a developer needs to complete the stages for an SNS launch. + +At a low level, the [SNS local testing repository](../testing/local-testing.md) guides you through the same, +with the difference that the commands target the canisters on the mainnet. + +## Requirements + +### 1. IC SDK + +See: [installing the IC SDK](../../../setup/install). + +### 2. `ic-admin` + +See: [installing the `ic-admin`](../../../setup/ic-admin.md). + +### 3. `sns` CLI + +:::note +The version of the sns CLI that is bundled with your dfx version may not have the latest commands described in the Usage section. If needed, it is recommended to build and use the sns CLI tool yourself. +::: + +```bash +git clone git@github.com:dfinity/ic.git +cd ic +bazel build //rs/sns/cli:sns +ls bazel-bin/rs/sns/cli/sns +``` +## Stages + +### 1. Dapp developers choose the initial parameters of the SNS for a dapp + +Typically, dapp developers typically choose initial parameters that will be used in subsequent proposals. + +### 2. Dapp developers submit NNS proposal so they can deploy to the SNS subnet + +Anyone who owns an NNS neuron with enough stake can submit a proposal +that lists a principal wallet in [SNS-W](../introduction/sns-architecture.md#SNS-W) who can then deploy the SNS canisters. + +To create such a proposal, a common path is to use `ic-admin` and run the following: + +```bash +ic-admin \ + --nns-url "${NETWORK_URL}" propose-to-update-sns-deploy-whitelist \ + --added-principals "${WALLET}" \ + --proposal-title "Let me SNS!" \ + --summary "This proposal whitelists developer's principal to deploy SNS" +``` + +* One can substitute `WALLET` with the principal in question. +* One can substitute `NETWORK_URL` with `https://nns.ic0.app`. + +### 3. Proposal #1 (of 3) is passed or rejected + +### 4. Dapp developers trigger the SNS canisters to be created on SNS subnet + +After the wallet canister is listed in SNS-W, +the SNS canisters are created triggered by a manual call to SNS-W. + +The `sns CLI` command to trigger the creation of SNS canisters on the SNS subnet: + +```bash +sns deploy --network "${NETWORK}" --init-config-file "${CONFIG}" --save-to "sns_canister_ids.json" +``` + +### 5. Dapp developers submit an SNS proposal to handover control of their dapp to the SNS + +After the SNS canisters are deployed and the dapp's control is handed over to +the SNS, an NNS proposal starts the swap. + +Again, anyone who owns an NNS neuron with enough stake can submit this proposal. +Of course it is crucial to set the right parameters in this proposal. +You can also find an example how this command is used in the SNS local testing +[here](https://github.com/dfinity/sns-testing/blob/main/open_sns_sale.sh#L11-L26). +``` +ic-admin \ + --nns-url "${NETWORK_URL}" propose-to-open-sns-token-swap \ + --min-participants 3 \ + --min-icp-e8s 5000000000 \ + --max-icp-e8s 50000000000 \ + --min-participant-icp-e8s 100000000 \ + --max-participant-icp-e8s 20000000000 \ + --swap-due-timestamp-seconds "${DEADLINE}" \ + --sns-token-e8s 500000000000 \ + --target-swap-canister-id "${SNS_SWAP_ID}" \ + --community-fund-investment-e8s 5000000000 \ + --neuron-basket-count 3 \ + --neuron-basket-dissolve-delay-interval-seconds 31536000 \ + --proposal-title "Decentralize this SNS" \ + --summary "Decentralize this SNS" +``` + +### 6. Proposal #2 (of 3) is passed or rejected + +Nothing technical for dapp developers to do. Community votes. + +### 7. Proposal to start the decentralization swap + +### 8. Proposal #3 (of 3) is passed or rejected + +Nothing technical for dapp developers to do. Community votes. + +### 9. SNS participants participate in the decentralization swap + +Nothing technical for dapp developers to do. Community participates in the swap. + +### 10. SNS canisters become SNS DAO + +When the swap ends, either because its deadline is reached or because the maximum +ICP have been collected, its finalization has to be triggered by a manual call +to the SNS swap that can be done by anyone. +You can find this command with more context in the SNS local testing repository +[here](https://github.com/dfinity/sns-testing/blob/main/finalize_sns_sale.sh#L8). + +``` +dfx canister --network "${NETWORK}" call finalize_swap '(record {})' +``` diff --git a/docs/developer-docs/integrations/sns/launching/launch-summary.md b/docs/developer-docs/integrations/sns/launching/launch-summary.md new file mode 100644 index 0000000000..00cdd4debc --- /dev/null +++ b/docs/developer-docs/integrations/sns/launching/launch-summary.md @@ -0,0 +1,530 @@ +# Stages of an SNS launch + +## Overview + +A crucial purpose of an SNS launch is to decentralize the control of an SNS and thereby of +the dapp that the SNS governs. + +Thereby, new tokens must be distributed to a large community to ensure +proper decentralization of the voting power. There are of course many ways to do so. + +The current SNS version provides one simple way to achieve this: a developer can hand over their dapp to the NNS and ask it to start a decentralization +swap for the newly created SNS. + +We first explain the decentralization swap and then the stages for an SNS launch. + +## Key concepts + +### Decentralization swap + +The launch of each SNS includes a separate **decentralization swap canister** that +is owned and run by the IC. +In more detail, it is controlled by the NNS root canister. + +* The swap canister is set up at the start with a defined amount of SNS tokens to be + distributed publicly. + +* During the decentralization swap, participants can send ICP to the swap canister + to contribute to the dapp’s funding. + +* At the swap's end the collected ICP are “swapped” for the SNS tokens; the + participants get staked SNS tokens in the form of SNS neurons and the SNS gets the + collected ICP. Each swap participant will receive their portion of the pool of SNS + tokens, pro-rated by their share of the overall number of ICP contributed. + For example, if the swap canister initially held 1000 SNS tokens and 500 ICP tokens + were collected during the decentralization swap, then the exchange rate would be 2:1 + and each participant would get 2 SNS tokens for each ICP token they contributed. + +## Stages +Handing over a dapp's control to a newly created SNS proceeds in the following high level stages. +Note that the NNS community's approval is relevant in two stages (stages 3, 7, and 9). + +### 1. Dapp developers choose the initial parameters of the SNS for a dapp + As these parameters define not only the token name but also the tokenomics and how the governance + will work, this usually requires a lot of preparation and community engagement already + (see [here](../tokenomics/sns-checklist.md) for more information). + + What we have at this stage: + +#### Table 1 + + + + + + + + + + + + + + + + + + + + + + +
SNS ProcessState
Decentralization swap statePending
NNS Proposal #1Not Created
SNS Proposal #1Not Created
NNS Proposal #2Not Created
+ +#### Table 2 + + + + + + + + + + + + +
CanistersStateControlled by
a dappoperationaldapp developer principal
+ +### 2. Dapp developers submit NNS proposal so they can deploy to the SNS subnet + +To ensure that malicious parties cannot simply fill the SNS subnet with un-approved SNSs, the +canister which is responsible for deploying SNSs, [SNS-W](../introduction/sns-architecture.md#SNS-W), +contains a list of principals that are allowed to do so. Therefore, a developer launching an SNS needs to ask the NNS community for approval to be added to this list. If the proposal is adopted, the defined principal is allowed to install exactly one SNS. + +What we have at this stage: + +#### Table 1 + + + + + + + + + + + + + + + + + + + + + + +
SNS ProcessState
Decentralization swap statePending
NNS Proposal #1Submitted
SNS Proposal #1Not Created
NNS Proposal #2Not Created
+ +#### Table 2 + + + + + + + + + + + + + + + + + +
Objects in an app subnetStateControlled by
a dappoperationaldapp developer principal
a principal that can deploy to SNS subnetpending NNS approvaldapp developer principal
+ + +### 3. Proposal #1 (of 3) is passed or rejected + +This is the **first of three** proposals that need to successfully pass. + +If this NNS proposal passes and the developer's principal is added the list of principals that can deploy to the SNS subnet, it does **not** guarantee the rest of the next stages will complete. + +If the proposal is adopted successfully, at the end of this step, we have: + +#### Table 1 + + + + + + + + + + + + + + + + + + + + + + +
SNS ProcessState
Decentralization swap statePending
NNS Proposal #1Approved
SNS Proposal #1Not Created
NNS Proposal #2Not Created
+ +#### Table 2 + + + + + + + + + + + + +
Objects in an app subnetStateControlled by
a dappoperationaldapp developer principal
+ +#### Table 3 + + + + + + + + + + + + +
Objects in the SNS subnetStateControlled by
a principal that can deploy to SNS subnetready for 1-time usedapp developer principal
+ + +### 4. Dapp developers trigger the SNS canisters to be created on SNS subnet + +When all initial parameters are specified and the NNS approved the SNS launch, +the SNS canisters can be created by a manual call to [SNS-W](../introduction/sns-architecture.md#SNS-W). +This will initiate the creation of the SNS canisters and set their initial parameters as +chosen in [Step 1](#SNS-launch-step-preparation). + +**The SNS canisters are created in pre-decentralization-swap mode.** + +After the SNS canister creation, the canisters exist but are not yet fully functional - the SNS is in **pre-decentralization-swap mode**. + +At this point, the SNS ledger has two accounts: + +* The **treasury** that is owned by the SNS governance canister and which can be used in the future according to the SNS community's wishes. +* Some pre-allocated tokens to be used in the initial decentralization swap. + +To ensure that no one can transfer tokens and distribute them, or start token markets prematurely, all remaining initial tokens are locked in neurons. +Moreover, in pre-decentralization-swap mode, the initial neurons cannot modify the SNS or transfer the treasury tokens. + +If successful, at the end of stage, we the following has changed: + +#### Table 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Objects in the SNS subnetStateControlled by
a principal that can deploy to SNS subnetrevoked because it is 1-time useNA
SNS root on the SNS subnetpre-decentralization swap modeinitial developer neurons
initial developer neuronspre-decentralization swap modedapp developer principal
treasury account on the SNS Ledgerpre-decentralization swap modeSNS governance
swap account on the SNS Ledgerpre-decentralization swap modeSNS swap
+ +### 5. Dapp developers submit an SNS proposal to handover control of their dapp to the SNS. + Before the decentralization swap, the developers hand over the control of the dapp to the SNS. + + This includes adding the SNS root canister as the controller of the dapp and removing + yourself (and possibly other developers) from the list of + controllers. Also, this includes "registering" the dapp with the SNS so that SNS + root is aware that it controls these canisters. + + The registration is done by **SNS proposal**. + + As there are already initial neurons, this, + as well as potential upgrades to the dapp, can be realized by SNS proposals and by the + majority of initial neurons voting in favor of them. + The initial neurons cannot do other things, such as changing + the SNS parameters, as the SNS governance canister is still in + pre-decentralization-swap mode. + +If successful, at the end of stage, we the following has changed: + +#### Table 1 + + + + + + + + + + + + + + + + + + + + + + +
SNS ProcessState
Decentralization swap statePending
NNS Proposal #1Approved
SNS Proposal #1Submitted
NNS Proposal #2Not Created
+ +### 6. Proposal #2 (of 3) is passed or rejected + +The initial SNS developer neurons are declared in the initial parameters and available at SNS installation. + +If successful, at the end of stage, we the following has changed: + +#### Table 1 + + + + + + + + + + + + + + + + + + + + + + +
SNS ProcessState
Decentralization swap statePending
NNS Proposal #1Approved
SNS Proposal #1Approved
NNS Proposal #2Not Created
+ +#### Table 2 + + + + + + + + + + + + +
Objects in an app subnetStateControlled by
a dappoperationalSNS root
+ +### 7. Proposal to start the decentralization swap.{#SNS-launch-step-startSwap} + +This proposal defines the conditions for the decentralization swap (e.g. how many ICP tokens should at least and at most be collected). + +If successful, at the end of stage, we the following has changed: + +#### Table 1 + + + + + + + + + + + + + + + + + + + + + + +
SNS ProcessState
Decentralization swap statePending
NNS Proposal #1Approved
SNS Proposal #1Approved
NNS Proposal #2Submitted
+ +### 8. Proposal #3 (of 3) is passed or rejected + +This is the **last of three** proposals that need to successfully pass for the process to continue. + +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 NNS proposal is adopted, the swap is started after a specified delay. +* If the NNS proposal is rejected, the SNS launch is aborted and the dapp’s control is handed +back to the original developers of the dapp. + +If successful, at the end of stage, we the following has changed: + + +#### Table 1 + + + + + + + + + + + + + + + + + + + + + + +
SNS ProcessState
Decentralization swap stateOpen
NNS Proposal #1Approved
SNS Proposal #1Approved
NNS Proposal #2Approved
+ +### 9. SNS participants participate in the decentralization swap. + + When the swap starts, the swap canister holds the number + of SNS tokens that were specified. End users can + participate in the decentralization swap by transferring ICP tokens to the + swap canister. + + +### 10. SNS canisters become SNS DAO.{#SNS-launch-step-genesis} + + When the decentralization swap ends, it is first established whether + it was successful, e.g., enough ICP have been collected. If the swap was successful, + the exchange rate is determined and all SNS tokens are given to the swap participants in + neurons. + + Currently, this process needs to be triggered by a call to the swap canister that anyone + can make. + + Once all neurons are created, the SNS should be under decentralized control + and the pre-decentralization-swap mode is reverted. + Thus, the governance canister is set to be fully functional. + If the swap is not successful, the decentralization attempt failed and everything + is reverted to the state before the SNS launch attempt, including that the dapp’s control + is handed back to the original developers of the dapp, and the + collected ICP are refunded to the swap participants. + + +If successful, at the end of stage, we have: + +#### Table 1 + + + + + + + + + + + + + + + + + + + + + + +
SNS ProcessState
Decentralization swap stateCommitted
NNS Proposal #1Approved
SNS Proposal #1Approved
NNS Proposal #2Approved
+ +#### Table 2 + + + + + + + + + + + + +
Objects in an app subnetStateControlled by
A dappoperationalSNS DAO
+ +#### Table 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Objects in the SNS subnetStateControlled by
a principal that can deploy to SNS subnetrevoked because it is 1-time useNA
SNS rootnormal modeSNS DAO
initial developer neuronsnormal modedapp developer principal
treasury account on the SNS Ledgernormal modeSNS DAO
swap account on the SNS LedgeremptySNS DAO
SNS neuronsnormal modeswap participant principals
diff --git a/docs/developer-docs/integrations/sns/lifecycle-sns/sns-launch.md b/docs/developer-docs/integrations/sns/lifecycle-sns/sns-launch.md deleted file mode 100644 index 8264899d41..0000000000 --- a/docs/developer-docs/integrations/sns/lifecycle-sns/sns-launch.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -sidebar_position: 3 ---- -# SNS launch -## Overview - -A crucial purpose of an SNS launch is to decentralize the control of the SNS and thereby of -the dapp that the SNS governs. -Thereby, new tokens must be distributed to a large community to ensure -proper decentralization of the voting power. There are of course many ways to do so. -The current 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. - -We first explain the decentralization swap and then the steps included in an SNS launch. - -## Decentralization swap - -The launch of each SNS includes a separate **decentralization swap canister** that -is owned by the IC which will run the swap. -In more detail, it is controlled by the NNS root canister. - -* The swap canister is set up at the start with a defined amount of SNS tokens to be - distributed publicly. - -* During the decentralization swap, participants can send ICP to the swap canister - to contribute to the dapp’s funding. - -* At the swap's end the collected ICP are “swapped” for the SNS tokens; the - participants get staked SNS tokens in the form of SNS neurons and the SNS gets the - collected ICP. Each swap participant will receive their portion of the pool of SNS - tokens, pro-rated by their share of the overall number of ICP contributed. - For example, if the swap canister initially held 1000 SNS tokens and 500 ICP tokens - were collected during the decentralization swap, then the exchange rate would be 2:1 - and each participant would get 2 SNS tokens for each ICP token they contributed. - -After a successful decentralization swap, SNS tokens are owned by a large -community and therefore the SNS governance control is decentralized. -Moreover, the decentralization swap sets a market price for the SNS token and -every swap participant receives SNS tokens at that price. -The ICP that were collected in the decentralization swap provide initial -funding for the SNS project in a SNS-owned treasury. - - -## SNS launch process -Handing over a dapp's control to a newly created SNS proceeds in the following high level steps. -Note that the NNS community's approvals is relevant in two steps (Step XX and XX). - -- #### Step 1: Preparation.{#SNS-launch-step-preparation} - Technically, the first step to initialize an SNS is to choose the initial parameters of the SNS. - As these parameters define not only the token name but also the tokenomics and how the governance - will work, this usually requires a lot of preparation and community engagement already - (see [here](../tokenomics/sns-checklist.md) for more information). - -- #### Step 2: A NNS proposal approves the creation of the SNS{#SNS-launch-step-NNSapproval} - To ensure that malicious parties cannot simply fill the SNS subnet with non-approved SNSs, the - canister which is responsible for deploying SNSs, [SNS-W](sns-architecture.md#SNS-W), - contains a list of principals that are allowed to do so. - The first step in launching an SNS is asking the NNS community for approval to be added to - this list. - If the proposal is adopted, the defined principal is allowed to install exactly one SNS. - -- #### Step 3: The SNS canisters are created by a manual call to SNS-W.{#SNS-launch-step-deployment} - When all initial parameters are specified and the NNS approved the SNS launch, - the SNS canisters can be created by a manual call to [SNS-W](sns-architecture.md#SNS-W). - This will initiate the creation of the SNS canisters and set their initial parameters as - chosen in [Step 1](#SNS-launch-step-preparation). - -- #### Step 3: Pre-decentralization-swap mode. - After the SNS canister creation, the canisters exist but are not yet - fully functional - the SNS is in **pre-decentralization-swap mode**. - At this point, the SNS ledger only has two accounts with - liquid tokens, the **treasury** - that is owned by the SNS governance canister and which - can be used in the future according - to the SNS community's wishes, and some pre-allocated tokens to be used in the initial - decentralization swap. - To ensure that no one can transfer tokens, and distribute - them or start token markets - prematurely, all remaining inital tokens are locked in neurons. - Moreover, in pre-decentralization-swap mode, - the initial neurons cannot modify the SNS or - transfer the treasury tokens. - -- #### Step 4: Dapp control handover. - Before the decentralization swap, - the developers hand over the control of the dapp to the SNS. - This includes adding the SNS root canister as the controller of the dapp and removing - yourself (and possibly other developers) from the list of - controllers. Also, this - includes "registering" the dapp with the SNS so that SNS - root is aware that it controls - these canisters. - The registration is done by SNS proposal. - As there are already initial neurons (from Step 2), this, - as well as potential upgrades - to the dapp, can be realized by SNS proposals and by the - majority of - initial neurons voting in favor of them. - The initial neurons cannot do other things, such as changing - the SNS parameters, as the SNS governance canister is still in - pre-decentralization-swap mode. - -- #### Step 5: A NNS proposal starts the decentralization swap.{#SNS-launch-step-startSwap} - The decentralization swap - is started by an NNS proposal that can be submitted by - anyone and defines the conditions for the - decentralization swap, for example - how many ICP tokens should at least and at most be collected. - - 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. - - If the NNS proposal is adopted, the swap is started after a specified delay. - If the NNS proposal is rejected, the SNS launch is aborted and the dapp’s control is handed - back to the original developers of the dapp. - -- #### Step 6: Decentralization swap. - When the swap starts, the swap canister holds the number - of SNS tokens that were specified. End users can - participate in the decentralization swap by transferring ICP tokens to the - swap canister. - -- #### Step 7: SNS genesis.{#SNS-launch-step-genesis} - When the decentralization swap ends, it is first established whether - it was successful, e.g., enough ICP have been collected. If the swap was successful, - the exchange rate is determined and all SNS tokens are given to the swap participants in - neurons. - Currently, this process needs to be triggered by a call to the swap cansiter that anyone - can make. - Once all neurons are created, the SNS should be under decentralized control - and the pre-decentralization-swap mode is reverted. - Thus, the governance canister is set to be fully functional. - If the swap is not successful, the decentralization attempt failed and everything - is reverted to the state before the SNS launch attempt, including that the dapp’s control - is handed back to the original developers of the dapp, and the - collected ICP are refunded to the swap participants. - - - - diff --git a/docs/developer-docs/integrations/sns/managing-sns/_category_.yml b/docs/developer-docs/integrations/sns/managing/_category_.yml similarity index 100% rename from docs/developer-docs/integrations/sns/managing-sns/_category_.yml rename to docs/developer-docs/integrations/sns/managing/_category_.yml diff --git a/docs/developer-docs/integrations/sns/managing-sns/cycles-usage.md b/docs/developer-docs/integrations/sns/managing/cycles-usage.md similarity index 100% rename from docs/developer-docs/integrations/sns/managing-sns/cycles-usage.md rename to docs/developer-docs/integrations/sns/managing/cycles-usage.md diff --git a/docs/developer-docs/integrations/sns/managing-sns/manage-sns-intro.md b/docs/developer-docs/integrations/sns/managing/manage-sns-intro.md similarity index 98% rename from docs/developer-docs/integrations/sns/managing-sns/manage-sns-intro.md rename to docs/developer-docs/integrations/sns/managing/manage-sns-intro.md index 8b89916069..99cc19c6fc 100644 --- a/docs/developer-docs/integrations/sns/managing-sns/manage-sns-intro.md +++ b/docs/developer-docs/integrations/sns/managing/manage-sns-intro.md @@ -13,7 +13,7 @@ sure that the SNS canisters do not run out of cycles. ## SNS community Once an -[SNS is launched](../get-sns/get-sns-intro.md), +[SNS is launched](../testing/testing-before-launch.md), neither the dapp that the SNS controls, nor the SNS canisters are under the control of a singe entity such as a developer. This means that the dapp and to the SNS diff --git a/docs/developer-docs/integrations/sns/managing-sns/sns-asset-canister.md b/docs/developer-docs/integrations/sns/managing/sns-asset-canister.md similarity index 99% rename from docs/developer-docs/integrations/sns/managing-sns/sns-asset-canister.md rename to docs/developer-docs/integrations/sns/managing/sns-asset-canister.md index 8dd6a71456..a2917a4e78 100644 --- a/docs/developer-docs/integrations/sns/managing-sns/sns-asset-canister.md +++ b/docs/developer-docs/integrations/sns/managing/sns-asset-canister.md @@ -138,7 +138,7 @@ To list all principals with the `Prepare` permission: dfx canister call --network ic oa7fk-maaaa-aaaam-abgka-cai list_permitted '(record {permission = variant {Commit}})' ``` -Once the asset canister has been deployed and permissions have been configured, the SNS decentralization swap can be started. You can learn more about launching an SNS [here](../launch-sns/launch-sns.md) +Once the asset canister has been deployed and permissions have been configured, the SNS decentralization swap can be started. You can learn more about launching an SNS [here](../launching/launch-summary.md) ## SNS GenericNervousSystemFunctions diff --git a/docs/developer-docs/integrations/sns/managing-sns/sns-governance.md b/docs/developer-docs/integrations/sns/managing/sns-governance.md similarity index 100% rename from docs/developer-docs/integrations/sns/managing-sns/sns-governance.md rename to docs/developer-docs/integrations/sns/managing/sns-governance.md diff --git a/docs/developer-docs/integrations/sns/get-sns/_category_.yml b/docs/developer-docs/integrations/sns/testing/_category_.yml similarity index 100% rename from docs/developer-docs/integrations/sns/get-sns/_category_.yml rename to docs/developer-docs/integrations/sns/testing/_category_.yml diff --git a/docs/developer-docs/integrations/sns/get-sns/local-testing.md b/docs/developer-docs/integrations/sns/testing/local-testing.md similarity index 89% rename from docs/developer-docs/integrations/sns/get-sns/local-testing.md rename to docs/developer-docs/integrations/sns/testing/local-testing.md index 9f03b3ac64..3cf99e1130 100644 --- a/docs/developer-docs/integrations/sns/get-sns/local-testing.md +++ b/docs/developer-docs/integrations/sns/testing/local-testing.md @@ -8,7 +8,7 @@ After having and before requesting an SNS launch in production, the SNS launch should be tested locally. A detailed description of how to run through [all the steps included -in an SNS launch](../lifecycle-sns/sns-launch.md) locally can be +in an SNS launch](../launching/launch-steps.md) locally can be found in [this repository](https://github.com/dfinity/sns-testing). You might also want to test integrations and basic SNS functionality. For this purpose you can use the above instructions after the test SNS is diff --git a/docs/developer-docs/integrations/sns/get-sns/testflight.md b/docs/developer-docs/integrations/sns/testing/testflight.md similarity index 100% rename from docs/developer-docs/integrations/sns/get-sns/testflight.md rename to docs/developer-docs/integrations/sns/testing/testflight.md diff --git a/docs/developer-docs/integrations/sns/get-sns/get-sns-intro.md b/docs/developer-docs/integrations/sns/testing/testing-before-launch.md similarity index 100% rename from docs/developer-docs/integrations/sns/get-sns/get-sns-intro.md rename to docs/developer-docs/integrations/sns/testing/testing-before-launch.md diff --git a/docs/developer-docs/integrations/sns/tokenomics/index.md b/docs/developer-docs/integrations/sns/tokenomics/index.md index afac5e16dd..f9aa074787 100644 --- a/docs/developer-docs/integrations/sns/tokenomics/index.md +++ b/docs/developer-docs/integrations/sns/tokenomics/index.md @@ -24,11 +24,10 @@ that allow you to try out different configurations and assess them. In addition, during the preparation phase you might want to prepare the [integration of the SNS -with your dapp](../integrate-sns/index.md). -Moreover, you should [test](../get-sns/get-sns-intro.md) your settings and convince yourself +with your dapp](../integrating/index.md). +Moreover, you should [test](../testing/testing-before-launch.md) your settings and confirm that the launched SNS will work successfully with your dapp. Integration and testing are topics that are not only relevant during the SNS launch but also later in the SNS lifecycle. Therefore, these two topics are discussed in separate sections below -(see [SNS integration](../integrate-sns/index.md) and [SNS testing](../get-sns/get-sns-intro.md)). - +(see [SNS integration](../integrating/index.md) and [SNS testing](../testing/testing-before-launch.md)). diff --git a/docs/developer-docs/integrations/sns/tokenomics/preparation.md b/docs/developer-docs/integrations/sns/tokenomics/preparation.md index 53377a82c3..1c1a6aceba 100644 --- a/docs/developer-docs/integrations/sns/tokenomics/preparation.md +++ b/docs/developer-docs/integrations/sns/tokenomics/preparation.md @@ -9,7 +9,7 @@ for examples using the as described in [this section](./tokenomics-intro.md). After deciding on these configurations, the next step is to translate them into -[initial parameters](../lifecycle-sns/sns-launch.md/#SNS-launch-step-preparation) +[initial parameters](../launching/launch-steps.md/#SNS-launch-step-preparation) that the SNS will be initialized with. This section explains on a technical, but high level, how initial diff --git a/docs/developer-docs/integrations/sns/tokenomics/sns-checklist.md b/docs/developer-docs/integrations/sns/tokenomics/sns-checklist.md index e1c8f9c262..a63af67ee2 100644 --- a/docs/developer-docs/integrations/sns/tokenomics/sns-checklist.md +++ b/docs/developer-docs/integrations/sns/tokenomics/sns-checklist.md @@ -97,14 +97,14 @@ Provide the build and deploy instructions with the source code. Ideally the inst ## 2.4. Test dapp operations under SNS on mainnet with SNS Testflight Before requesting an SNS launch in production, developers are strongly encouraged to test their deployed dapp’s operation (e.g., upgrading the dapp’s canisters) via SNS proposals, as if the live version of the dapp was managed by SNS. -Make sure to test upgrading canisters through SNS proposals, test updating asset canister content through SNS proposals, and other typical upgrade and maintenance operations. Also establish a [cycles management strategy](../managing-sns/cycles-usage.md), so canisters never run out of cycles. The longer the test runs, the better, ideally several weeks. +Make sure to test upgrading canisters through SNS proposals, test updating asset canister content through SNS proposals, and other typical upgrade and maintenance operations. Also establish a [cycles management strategy](../managing/cycles-usage.md), so canisters never run out of cycles. The longer the test runs, the better, ideally several weeks. The developer can keep direct control over the dapp’s canisters registered with testflight SNS. The testflight can be done in a local test environment or with the live dapp on the mainnet. When deployed on the mainnet, the testflight SNS is deployed to a regular application subnet instead of a dedicated SNS subnet. -To use the SNS testflight on the mainnet, pass the `–network ic` parameter to the deploy command. The [documentation](../get-sns/testflight.md) for running the testflight is the same as for deploying it locally - except for the added parameter (which is also covered in the documentation). +To use the SNS testflight on the mainnet, pass the `–network ic` parameter to the deploy command. The [documentation](../testing/testflight.md) for running the testflight is the same as for deploying it locally - except for the added parameter (which is also covered in the documentation). -See the documentation for more information about the [SNS Testflight](../get-sns/testflight.md), including setup instructions. +See the documentation for more information about the [SNS Testflight](../testing/testflight.md), including setup instructions. ## 2.5. Integrate an SNS frontend into the dapp Developers can choose to integrate a frontend for the SNS functionality in the dapp. A good example of a useful integration is SNS proposal voting. This allows neurons to vote on proposals directly in the dapp frontend. Integrations should be tested thoroughly with the SNS Testflight or the local SNS test before the SNS launch. @@ -132,21 +132,21 @@ The idea is to provide the community with information so they can verify what th This [forum post](https://forum.dfinity.org/t/dfinitys-voting-on-upcoming-sns-launch-proposals/19543) provides some initial thoughts from the perspective of DFINITY when voting. ## 4. SNS Launch Workflow -Please find all steps included in an SNS launch [here](../lifecycle-sns/sns-launch.md) and a more detailed -descriptions of the following steps [here](../launch-sns/launch-sns.md). +Please find all steps included in an SNS launch [here](../launching/launch-summary.md) and a more detailed +descriptions of the following steps [here](../launching/launch-steps.md). ## 4.1. Submit SNS approval proposal First step in the launch is an NNS proposal that approves the SNS creation by listing a principal that can later create the SNS canisters. Use the proposal content created in Section 1.4.1 and create the NNS proposal. The proposal can be created with the [quill command line tool](../../../../references/quill-cli-reference/sns/quill-sns-make-proposal/) as described -[here](../launch-sns/launch-sns.md#SNS-launch-command-NNSproposal1). +[here](../launching/launch-steps.md#SNS-launch-command-NNSproposal1). ## 4.2. Create SNS canisters When the NNS neurons have adopted the proposal above, the SNS canisters can be installed, and prepared for the SNS launch. The SNS canisters are installed with the [SNS CLI tool](https://github.com/dfinity/ic/tree/master/rs/sns/cli) as described -[here](../launch-sns/launch-sns.md#SNS-launch-command-SNSW) +[here](../launching/launch-steps.md#SNS-launch-command-SNSW) ## 4.3. Dapp control handover Before the decentralization sale, the SNS root canister must be set as the controller of the dapp and @@ -162,11 +162,11 @@ This step is similar to submitting Step 4.1. This proposal will initiate the dec Use the proposal content created in section 1.4.2 and create the NNS proposal. The proposal can be created with the [quill command line tool](../../../../references/quill-cli-reference/sns/quill-sns-make-proposal/) -as described [here](../launch-sns/launch-sns.md#SNS-launch-command-NNSproposal2). +as described [here](../launching/launch-steps.md#SNS-launch-command-NNSproposal2). ## 4.5 Finalizing the SNS swap After the swap ends, its finalization has to be triggered by a `dfx` call as described -[here](../launch-sns/launch-sns.md#SNS-launch-command-finalizingswap). +[here](../launching/launch-steps.md#SNS-launch-command-finalizingswap). ## 4.6 Setup custom SNS functions To execute code on SNS managed canisters via SNS proposals, the canisters must expose two public functions, diff --git a/docs/developer-docs/integrations/sns/tokenomics/tokenomics-intro.md b/docs/developer-docs/integrations/sns/tokenomics/tokenomics-intro.md index 47f020542b..27d64b89ae 100644 --- a/docs/developer-docs/integrations/sns/tokenomics/tokenomics-intro.md +++ b/docs/developer-docs/integrations/sns/tokenomics/tokenomics-intro.md @@ -7,7 +7,7 @@ Each SNS can be individually configured with parameters that define, among other the tokenomics of an SNS and the dapp that it governs. Therefore when launching or maintaining an SNS, it is important to understand tokenomics. The described concepts are also relevant for -[other DAOs](../lifecycle-sns/dao-alternatives.md). +[other DAOs](../introduction/dao-alternatives.md). ## Tokenomics overview ### What is tokenomics? diff --git a/docs/developer-docs/setup/ic-admin.md b/docs/developer-docs/setup/ic-admin.md new file mode 100644 index 0000000000..a5a8a23c49 --- /dev/null +++ b/docs/developer-docs/setup/ic-admin.md @@ -0,0 +1,37 @@ +# IC Admin + +`ic-admin` is a tool used to create and submit NNS proposals. + +## Installing + +### MacOS + +1. Retrieve the file + +```bash +$ curl "https://download.dfinity.systems/ic/7445081734e6d896d090295967d50710975c4f25/openssl-static-binaries/x86_64-darwin/ic-admin.gz" -o - | gunzip > ./ic-admin +$ chmod +x ./ic-admin +``` + +2. Verify the binary + +```bash +$ diff <(shasum -a 256 ./ic-admin | cut -d' ' -f1) <(echo 3f75026d2f28f171068e332a42c82a2795c93fbf5ab351baef30b30eb901cdba) && echo "ic-admin checksum matches" || echo "***ERROR***: ic-admin checksum does not match" +``` + +### Linux + +NOTE: The instructions below have been tested with the Ubuntu 20.04 release. + +1. Retrieve the file + +```bash +$ curl "https://download.dfinity.systems/ic/7445081734e6d896d090295967d50710975c4f25/openssl-static-binaries/x86_64-linux/ic-admin.gz" -o - | gunzip > ./ic-admin +$ chmod +x ./ic-admin +``` + +2. Verify the binary + +```bash +$ diff <(shasum -a 256 ./ic-admin | cut -d' ' -f1) <(echo e29bb9cc462e800b8b960ad49c412e5f5fdbb5ae2ae9fde0c13058422ba32802) && echo "ic-admin checksum matches" || echo "***ERROR***: ic-admin checksum does not match" +``` \ No newline at end of file diff --git a/sidebars.js b/sidebars.js index f1611f313e..8eb74cb96c 100644 --- a/sidebars.js +++ b/sidebars.js @@ -396,10 +396,9 @@ const sidebars = { type: "category", label: "Introduction to the SNS", items: [ - "developer-docs/integrations/sns/lifecycle-sns/sns-intro-highlevel", - "developer-docs/integrations/sns/lifecycle-sns/sns-architecture", - "developer-docs/integrations/sns/lifecycle-sns/sns-launch", - "developer-docs/integrations/sns/lifecycle-sns/dao-alternatives", + "developer-docs/integrations/sns/introduction/sns-intro-high-level", + "developer-docs/integrations/sns/introduction/sns-architecture", + "developer-docs/integrations/sns/introduction/dao-alternatives", ], }, { @@ -422,11 +421,11 @@ const sidebars = { label: "Integrating with an SNS", link: { type: "doc", - id: "developer-docs/integrations/sns/integrate-sns/index", + id: "developer-docs/integrations/sns/integrating/index", }, items: [ - "developer-docs/integrations/sns/integrate-sns/index-integration", - "developer-docs/integrations/sns/integrate-sns/ledger-integration", + "developer-docs/integrations/sns/integrating/index-integration", + "developer-docs/integrations/sns/integrating/ledger-integration", ], }, { @@ -434,30 +433,36 @@ const sidebars = { label: "Testing an SNS", link: { type: "doc", - id: "developer-docs/integrations/sns/get-sns/get-sns-intro", - }, + id: "developer-docs/integrations/sns/testing/testing-before-launch", + }, items: [ - "developer-docs/integrations/sns/get-sns/local-testing", - "developer-docs/integrations/sns/get-sns/testflight", + "developer-docs/integrations/sns/testing/local-testing", + "developer-docs/integrations/sns/testing/testflight", ], }, { type: "category", label: "Launching an SNS", - type: "doc", - id: "developer-docs/integrations/sns/launch-sns/launch-sns", + link: { + type: "doc", + id: "developer-docs/integrations/sns/launching/launch-summary", + }, + items: [ + "developer-docs/integrations/sns/launching/launch-summary", + "developer-docs/integrations/sns/launching/launch-steps", + ], }, { type: "category", label: "Managing an SNS", link: { type: "doc", - id: "developer-docs/integrations/sns/managing-sns/manage-sns-intro", + id: "developer-docs/integrations/sns/managing/manage-sns-intro", }, items: [ - "developer-docs/integrations/sns/managing-sns/sns-governance", - "developer-docs/integrations/sns/managing-sns/cycles-usage", - "developer-docs/integrations/sns/managing-sns/sns-asset-canister", + "developer-docs/integrations/sns/managing/sns-governance", + "developer-docs/integrations/sns/managing/cycles-usage", + "developer-docs/integrations/sns/managing/sns-asset-canister", ], }, ], @@ -831,4 +836,4 @@ const sidebars = { }; -module.exports = sidebars; +module.exports = sidebars; \ No newline at end of file diff --git a/src/css/custom.scss b/src/css/custom.scss index dec3452033..3723d9b536 100644 --- a/src/css/custom.scss +++ b/src/css/custom.scss @@ -469,6 +469,15 @@ div[class^="announcementBarContent"] { } } +//custom styling for tables on SNS docs +.light-orange-text { + background-color: #fbb03b; +} + +.light-green-text { + background-color: #b8eda8; +} + @tailwind base; @tailwind components; @tailwind utilities; diff --git a/src/pages/openchat.tsx b/src/pages/openchat.tsx index c87965cbd1..2d19d1a4c4 100644 --- a/src/pages/openchat.tsx +++ b/src/pages/openchat.tsx @@ -322,7 +322,7 @@ function OpenChatPage() { Launch an SNS DAO diff --git a/src/pages/sns.tsx b/src/pages/sns.tsx index a2747c595f..007b8ac765 100644 --- a/src/pages/sns.tsx +++ b/src/pages/sns.tsx @@ -314,7 +314,7 @@ function SnsPage() { Launch an SNS DAO