Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Community Token DAO update and Multisig format updates #45

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/DAO-Management/creating-DAOs/Chartered-DAO.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
sidebar_position: 6
sidebar_position: 7
---

# Charter Your DAO
Expand Down
66 changes: 66 additions & 0 deletions docs/DAO-Management/creating-DAOs/Community-Token-DAO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
sidebar_position: 3
---

# Create a Community Token DAO

When you choose to create a community DAO, we assume that you're an advanced user who understands all the governance setup details and we present you a more complex and flexible form than the multisig DAO.

So let's create a Community DAO:

---

**Click on `Create DAO` on the home page and option and the following wizard will be shown:**

![multisiformempty](https://user-images.githubusercontent.com/22420711/178862160-75a2bd5a-133e-47a2-a487-9b7ad6f66137.png)

**Click on the `Community Token DAO` option**

**Name your wallet**

![multisigformname](https://user-images.githubusercontent.com/22420711/179025138-518b96aa-64cb-430f-a597-7ba22a369bb8.png)

:::tip
Realms will provide a governance program ID by default, users can add their own customer Program ID under Advanced Options at this step in the multisig wallet wizard.
:::

**Determine the DAO's community token**

**Place the `Community Token Mint`** if you have one, and if not, it will be generated for you. The community token mint is the token that will be used by the community to vote on proposals and it is required to create a governance.
When you put the community token mint, a switch `Transfer Authority` will show up. If checked, it will transfer the authority of the community token to the realm.

![multisigformname](https://user-images.githubusercontent.com/22420711/179033113-bfb2f48a-f1c8-403d-9c35-07b3029dbd4c.png)

**Minimum number of community tokens needed to manage this DAO:** this field represents the minimum number of tokens required to by a member to create a governance (e.g. create proposal)

:::tip
Realms provides the ability to determine the votes needed to pass a proposal by calculating the number of tokens in circulation (instead of using the total Mint supply) , users can do this under Advanced Options at this step in the Community Token DAO wizard.
:::

![multisigformname](https://user-images.githubusercontent.com/22420711/179033254-4917cd81-c931-40bb-9858-1a01a1cb917e.png)

**Select the minimum percentage of `yes votes` to approve a proposal. The default is 60%**

![multisigformname](https://user-images.githubusercontent.com/22420711/179034017-03bd93cf-2c46-4601-9af9-6cb4e8c9489d.png)

---

### The Council

This will guide you to setup the council settings. This step is optional if you import your community token. It is mandatory if you are having realms create your community token. This is to ensure easy setup for initial governance rules. Here you have the ability to import other council tokens or create new ones. Council members can supervise and moderate DAO activities. It’s recommended to always create the council for DAOs in their incubation stage to prevent governance attacks or accidental losses of assets managed by the DAO.

![multisigformname](https://user-images.githubusercontent.com/22420711/179035193-1a3cca8e-4c23-469b-9cd0-a8132ac6c32c.png)

**Invite Members**

Input solana addresses to add members to the Community Token DAO

![multisigformname](https://user-images.githubusercontent.com/22420711/179035734-95c36450-c0c9-416d-9947-a40c715b43fa.png)

**After following thes steps, you should have something like the image below:**

![multisigformname](https://user-images.githubusercontent.com/22420711/179036613-8f6431f2-0943-411c-bb73-30c91bd3ee7d.png)

**Then just click `Create Community Token DAO`, your wallet will pop up asking for signature. Approve to create the tokens and deploy the DAO.**

After the transaction is complete, you'll be redirected to the DAO's page.
100 changes: 100 additions & 0 deletions docs/DAO-Management/creating-DAOs/Convert-NFT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
---
sidebar_position: 5
---

# Convert existing DAO to NFT Community DAO

NFT Community DAO is a DAO where NFTs are used as the governance token.
Any DAO can enable NFT voting through the Plug & Play mechanism of [spl-governance](https://github.com/solana-labs/solana-program-library/blob/master/governance/README.md).

In order to enable NFT governance for a DAO the [NFT voting plugin](https://github.com/solana-labs/governance-program-library) has to be enabled for the DAO.

The NFT voting plugin grants governance power to NFTs based on the [Metaplex Certified Collection](https://www.metaplex.com/posts/certified-collections) they belong to.
In the most basic scenario each NFT gives its owner 1 vote. The owner can have multiple NFTs and vote with all of them at once.
A DAO can also use more advanced scenarios where multiple collections with different voting power are used.
This way a multi tier governance structure can be created where different NFTs can represent
different membership levels.

:::tip Note
Metaplex supports certified collections from version 1.1 of the standard.
NFTs minted with the older Metadata standard must be upgraded first to the latest version before they can be used for governance.
:::

Only NFTs with certified collection on their Metadata can participate in governance.

:::danger Security
Beware the authority of the collection can certify and uncertify NFTs for the collection.
It means it has the ultimate power to decide who can and can't vote in the DAO.
It's recommended for the authority to be transferred to the DAO.
:::

## When to use

Reference these docs to convert existing community token DAOs to NFT community DAOs

## Configure NFT Voting Plugin

In order to configure the NFT Plugin a proposal with the following 3 instructions must be created.
Note: The proposal must be created for the governance with realm authority.

1. Create NFT plugin registrar

![create-NFT-plugin-registrar](/img/NFT-Community-DAO/create-NFT-plugin-registrar.png)

2. Create NFT plugin max voter weight

![create-NFT-plugin-max-voter-weight](/img/NFT-Community-DAO/create-NFT-plugin-max-voter-weight.png)

3. Configure NFT plugin collection

![configure-NFT-plugin-collection](/img/NFT-Community-DAO/configure-NFT-plugin-collection.png)

The NFT collection configuration instruction must be added for every NFT collection which should be allowed
to participate in governance of the DAO.

Each NFT collection has the following parameters:

**`Collection size`** - The number of certified NFTs in the collection. The size of the collection is
used to calculate the maximum voter weight and voting quorum levels.

**`Collection weight`** - The relative voting weight of the NFTs from the collection.
In multi collection setup it allows to
assign different voting weights to different NFTs and create multi NFT / multi tier governance setup.
For a single collection it should be set to 1

**`Collection`** - The Id of the NFT collection which should be used for governance.

:::tip
The collection ID can be found on the NFT explorer view. For example for [SMB NFT](https://explorer.solana.com/address/Fckuc1pnqQxsMMa3R8Smccz2iS5YQBeos7pG7xV4B1Ma) the collection id is `SMBH3wF6baUj6JWtzYvqcKuj2XCKWDqQxzspY12xPND`

![smb-633-explorer-view](/img/NFT-Community-DAO/smb-633-explorer-view.png)
:::

## Enable NFT Voting Plugin

Once the NFT voting plugin configuration proposal is voted on and all instructions executed the DAO can enable NFT governance
through a `DAO Config Change` proposal.

From the DAO parameters page select `Change Config` option

![DAO-config-change](/img/NFT-Community-DAO/DAO-config-change.png)

And then set the DAO configuration parameters

Both **`Community voter weight addin`** and **`Community max voter weight addin`** parameters should be set to
the NFT Voting Plugin Program Id `GnftV5kLjd67tvHpNGyodwWveEKivz3ZWvvE3Z4xi2iw`

![enable-NFT-voting-plugin](/img/NFT-Community-DAO/enable-NFT-voting-plugin.png)



## Voting with NFTs

Once the proposal to enable the NFT Voting Plugin for the DAO is executed any owner of an NFT from the configured
collection can participate in the DAO governance.

The NFTs eligible for governance are displayed in the account view.

![your-NFTs.png](/img/NFT-Community-DAO/your-NFTs.png)

Note: Before you can vote in the DAO you have to register your wallet with the DAO. Visit this step by step tutorial here https://www.youtube.com/watch?v=yIAwmuE74dI&t=73s
101 changes: 17 additions & 84 deletions docs/DAO-Management/creating-DAOs/NFT-Community-DAO.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,13 @@ sidebar_position: 4
# Create NFT Community DAO

NFT Community DAO is a DAO where NFTs are used as the governance token.
Any DAO can enable NFT voting through the Plug & Play mechanism of [spl-governance](https://github.com/solana-labs/solana-program-library/blob/master/governance/README.md).

In order to enable NFT governance for a DAO the [NFT voting plugin](https://github.com/solana-labs/governance-program-library) has to be enabled for the DAO.

:::danger Security
As of 29/04/2022 the NFT voting plugin program hasn't been security audited yet. Use at your own risk.
:::

The NFT voting plugin grants governance power to NFTs based on the [Metaplex Certified Collection](https://www.metaplex.com/posts/certified-collections) they belong to.
In the most basic scenario each NFT gives its owner 1 vote. The owner can have multiple NFTs and vote with all of them at once.
A DAO can also use more advanced scenarios where multiple collections with different voting power are used.
This way a multi tier governance structure can be created where different NFTs can represent
different membership levels.

:::tip Note
Metaplex supports certified collections from version 1.1 of the standard.
NFTs minted with the older Metadata standard must be upgraded first to the latest version before they can be used for governance.
:::

Only NFTs with certified collection on their Metadata can participate in governance.

:::danger Security
Expand All @@ -34,93 +22,38 @@ It's recommended for the authority to be transferred to the DAO.

## Create DAO

If you have your DAO already created you can skip this section.
However please take note of the DAO parameters needed for the setup and adjust your DAO configuration accordingly.

In order to create the NFT Community DAO use the [Bespoke DAO Wizard](bespoke-DAO.md) with the following parameters:

**`Min community tokens to create proposal`** - Set to 1 to allow each NFT holder to create new governances.
If more restrictive setup is required the min threshold can be set to a higher value accordingly.

**`Custom program Id`** - Use the default instance of `spl-governance` or an instance with minim version of v2.2.4

:::danger
spl-governance program version must be equal or higher than v2.2.4 for the NFT plugin to work correctly.
If the plugin is enabled for older versions it can result in irreversible deadlock of the DAO.
:::

**`Council`** - Setup a DAO with the council.

:::tip
It's recommended to always setup the council as a Multisig for the initial DAO members.
The members would be able to moderate the DAO governance process at its inception and prevent
irreversible actions like setting impossible quorums or defending the DAO from governance attacks.
After successful decentralization the council can be removed thorough a proposal.
:::

## Configure NFT Voting Plugin

In order to configure the NFT Plugin a proposal with the following 3 instructions must be created.
Note: The proposal must be created for the governance with realm authority.

1. Create NFT plugin registrar

![create-NFT-plugin-registrar](/img/NFT-Community-DAO/create-NFT-plugin-registrar.png)

2. Create NFT plugin max voter weight

![create-NFT-plugin-max-voter-weight](/img/NFT-Community-DAO/create-NFT-plugin-max-voter-weight.png)
**Click on `Create DAO` on the home page and option and the following wizard will be shown:**

3. Configure NFT plugin collection
![multisiformempty](https://user-images.githubusercontent.com/22420711/178862160-75a2bd5a-133e-47a2-a487-9b7ad6f66137.png)

![configure-NFT-plugin-collection](/img/NFT-Community-DAO/configure-NFT-plugin-collection.png)
**Click on the `NFT Community DAO` option**

The NFT collection configuration instruction must be added for every NFT collection which should be allowed
to participate in governance of the DAO.
**Name your wallet**

Each NFT collection has the following parameters:

**`Collection size`** - The number of certified NFTs in the collection. The size of the collection is
used to calculate the maximum voter weight and voting quorum levels.

**`Collection weight`** - The relative voting weight of the NFTs from the collection.
In multi collection setup it allows to
assign different voting weights to different NFTs and create multi NFT / multi tier governance setup.
For a single collection it should be set to 1

**`Collection`** - The Id of the NFT collection which should be used for governance.
![multisigformname](https://user-images.githubusercontent.com/22420711/179073700-4f80df39-657c-48e0-b40b-04186a52624e.png)

:::tip
The collection ID can be found on the NFT explorer view. For example for [SMB NFT](https://explorer.solana.com/address/Fckuc1pnqQxsMMa3R8Smccz2iS5YQBeos7pG7xV4B1Ma) the collection id is `SMBH3wF6baUj6JWtzYvqcKuj2XCKWDqQxzspY12xPND`

![smb-633-explorer-view](/img/NFT-Community-DAO/smb-633-explorer-view.png)
Realms will provide a governance program ID by default, users can add their own customer Program ID under Advanced Options at this step in the multisig wallet wizard.
:::

## Enable NFT Voting Plugin

Once the NFT voting plugin configuration proposal is voted on and all instructions executed the DAO can enable NFT governance
through a `DAO Config Change` proposal.

From the DAO parameters page select `Change Config` option

![DAO-config-change](/img/NFT-Community-DAO/DAO-config-change.png)
**Select your NFT collection from your wallet or input your collection address**

And then set the DAO configuration parameters
![multisigformname](https://user-images.githubusercontent.com/22420711/179074587-61f5122a-24be-49af-bdc9-4f712038c2e5.png)

Both **`Community voter weight addin`** and **`Community max voter weight addin`** parameters should be set to
the NFT Voting Plugin Program Id `GnftV5kLjd67tvHpNGyodwWveEKivz3ZWvvE3Z4xi2iw`
**Select the total number of NFTs in the collection and the approval threshold to pass a proposal**

![enable-NFT-voting-plugin](/img/NFT-Community-DAO/enable-NFT-voting-plugin.png)
![multisigformname](https://user-images.githubusercontent.com/22420711/179075252-1032e31d-79e5-449c-9c89-ec3126c6bb3d.png)

### The Council

This will guide you to setup the council settings. This step is optional if you import your community token. It is mandatory if you are having realms create your community token. This is to ensure easy setup for initial governance rules. Here you have the ability to import other council tokens or create new ones. Council members can supervise and moderate DAO activities. It’s recommended to always create the council for DAOs in their incubation stage to prevent governance attacks or accidental losses of assets managed by the DAO.

## Voting with NFTs
![multisigformname](https://user-images.githubusercontent.com/22420711/179075601-2bcb0e47-fef4-4dd1-8f7f-d8db92bec0b0.png)

Once the proposal to enable the NFT Voting Plugin for the DAO is executed any owner of an NFT from the configured
collection can participate in the DAO governance.
**After following this steps, you should have something like the image below:**

The NFTs eligible for governance are displayed in the account view.
![multisigformname](https://user-images.githubusercontent.com/22420711/179075952-74bd47ce-d1f5-4e7b-a8bd-00f2763883e8.png)

![your-NFTs.png](/img/NFT-Community-DAO/your-NFTs.png)
**Then just click `Create NFT Community DAO`, your wallet will pop up asking for signature. Approve to create the tokens and deploy the DAO.**

Note: Before you can vote in the DAO you have to register your wallet with the DAO.
After the transaction is complete, you'll be redirected to the DAO's page.
38 changes: 38 additions & 0 deletions docs/DAO-Management/creating-DAOs/Voter-Staking-Registry.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
sidebar_position: 8
---

# Voter Stake Registry

Enabling voter staking gives the DAO the ability to let their members stake their goverance tokens in exchange for voting rights

Let's review how to setup this plugin. You can review the step by step video here https://www.youtube.com/watch?v=PlDInTQF1jk

---

The first step is to create a community token DAO. Instructions to do this are at docs.realms.today/Community-Token-DAO

---

:::tip
Many of these transaction can be done using the multi-transaction proposal functionality in Realms. The enabling of the plugin will need to be in a separate proposal.
:::

:::tip
If your DAO is new, have vote by council checked to ensure that the voting process is seamless during intial DAO setup
:::

:::tip
Preview your transactions using our preview functionality before executing them to ensure they will be successfull
:::

Once we have a Community Token DAO setup lets complete the below transactions

Mint Tokens to your Wallet. If you allowed realms to create a new governance token for you - the circulating supply is default 0. Lets mint some to your wallet using the below process.

![multisiformempty](https://user-images.githubusercontent.com/22420711/179419238-6fa11764-a061-4b11-9550-80f41319dade.png)

Then, lets create the voter staking registrar

![multisiformempty](https://user-images.githubusercontent.com/22420711/179419318-3075e551-4eb2-40df-aaf2-9cd61165419b.png)

Loading