Skip to content
This repository was archived by the owner on Feb 9, 2025. It is now read-only.

Commit 6e4f2fa

Browse files
authored
NFT Community Setup (#15)
* chore: Cleanup namespaces * wip: NFT Community header * wip: DAO Creation * wip: Registrar and NFT collection setup * wip: Enable NFT voting plugin * wip: Voting with NFT * fix: update DAO creation
1 parent 355a177 commit 6e4f2fa

20 files changed

+131
-3
lines changed

.vscode/settings.json

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"cSpell.words": [
3+
"Metaplex",
4+
"uncertify"
5+
]
6+
}
File renamed without changes.
File renamed without changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
---
2+
sidebar_position: 4
3+
---
4+
5+
# Create NFT Community DAO
6+
7+
NFT Community DAO is a DAO where NFTs are used as the governance token.
8+
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).
9+
10+
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.
11+
12+
:::danger Security
13+
As of 29/04/2022 the NFT voting plugin program hasn't been security audited yet. Use at your own risk.
14+
:::
15+
16+
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.
17+
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.
18+
A DAO can also use more advanced scenarios where multiple collections with different voting power are used.
19+
This way a multi tier governance structure can be created where different NFTs can represent
20+
different membership levels.
21+
22+
:::tip Note
23+
Metaplex supports certified collections from version 1.1 of the standard.
24+
NFTs minted with the older Metadata standard must be upgraded first to the latest version before they can be used for governance.
25+
:::
26+
27+
Only NFTs with certified collection on their Metadata can participate in governance.
28+
29+
:::danger Security
30+
Beware the authority of the collection can certify and uncertify NFTs for the collection.
31+
It means it has the ultimate power to decide who can and can't vote in the DAO.
32+
It's recommended for the authority to be transferred to the DAO.
33+
:::
34+
35+
## Create DAO
36+
37+
If you have your DAO already created you can skip this section.
38+
However please take note of the DAO parameters needed for the setup and adjust your DAO configuration accordingly.
39+
40+
In order to create the NFT Community DAO use the [Bespoke DAO Wizard](bespoke-DAO.md) with the following parameters:
41+
42+
**`Min community tokens to create proposal`** - Set to 1 to allow each NFT holder to create new governances.
43+
If more restrictive setup is required the min threshold can be set to a higher value accordingly.
44+
45+
**`Custom program Id`** - Use the default instance of `spl-governance` or an instance with minim version of v2.2.4
46+
47+
:::danger
48+
spl-governance program version must be equal or higher than v2.2.4 for the NFT plugin to work correctly.
49+
If the plugin is enabled for older versions it can result in irreversible deadlock of the DAO.
50+
:::
51+
52+
**`Council`** - Setup a DAO with the council.
53+
54+
:::tip
55+
It's recommended to always setup the council as a Multisig for the initial DAO members.
56+
The members would be able to moderate the DAO governance process at its inception and prevent
57+
irreversible actions like setting impossible quorums or defending the DAO from governance attacks.
58+
After successful decentralization the council can be removed thorough a proposal.
59+
:::
60+
61+
## Configure NFT Voting Plugin
62+
63+
In order to configure the NFT Plugin a proposal with the following 3 instructions must be created.
64+
Note: The proposal must be created for the governance with realm authority.
65+
66+
1. Create NFT plugin registrar
67+
68+
![create-NFT-plugin-registrar](/img/NFT-Community-DAO/create-NFT-plugin-registrar.png)
69+
70+
2. Create NFT plugin max voter weight
71+
72+
![create-NFT-plugin-max-voter-weight](/img/NFT-Community-DAO/create-NFT-plugin-max-voter-weight.png)
73+
74+
3. Configure NFT plugin collection
75+
76+
![configure-NFT-plugin-collection](/img/NFT-Community-DAO/configure-NFT-plugin-collection.png)
77+
78+
The NFT collection configuration instruction must be added for every NFT collection which should be allowed
79+
to participate in governance of the DAO.
80+
81+
Each NFT collection has the following parameters:
82+
83+
**`Collection size`** - The number of certified NFTs in the collection. The size of the collection is
84+
used to calculate the maximum voter weight and voting quorum levels.
85+
86+
**`Collection weight`** - The relative voting weight of the NFTs from the collection.
87+
In multi collection setup it allows to
88+
assign different voting weights to different NFTs and create multi NFT / multi tier governance setup.
89+
For a single collection it should be set to 1
90+
91+
**`Collection`** - The Id of the NFT collection which should be used for governance.
92+
93+
:::tip
94+
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`
95+
96+
![smb-633-explorer-view](/img/NFT-Community-DAO/smb-633-explorer-view.png)
97+
:::
98+
99+
## Enable NFT Voting Plugin
100+
101+
Once the NFT voting plugin configuration proposal is voted on and all instructions executed the DAO can enable NFT governance
102+
through a `DAO Config Change` proposal.
103+
104+
From the DAO parameters page select `Change Config` option
105+
106+
![DAO-config-change](/img/NFT-Community-DAO/DAO-config-change.png)
107+
108+
And then set the DAO configuration parameters
109+
110+
Both **`Community voter weight addin`** and **`Community max voter weight addin`** parameters should be set to
111+
the NFT Voting Plugin Program Id `GnftV5kLjd67tvHpNGyodwWveEKivz3ZWvvE3Z4xi2iw`
112+
113+
![enable-NFT-voting-plugin](/img/NFT-Community-DAO/enable-NFT-voting-plugin.png)
114+
115+
116+
117+
## Voting with NFTs
118+
119+
Once the proposal to enable the NFT Voting Plugin for the DAO is executed any owner of an NFT from the configured
120+
collection can participate in the DAO governance.
121+
122+
The NFTs eligible for governance are displayed in the account view.
123+
124+
![your-NFTs.png](/img/NFT-Community-DAO/your-NFTs.png)
File renamed without changes.

docs/multisig-DAO/treasury-account.md docs/DAO-Management/treasury-account.md

-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ If you want your treasury account to hold tokens (ex. USDC) you have to provide
2626

2727
**USDC:** `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`
2828

29-
**wSOL:** `So11111111111111111111111111111111111111112`
30-
3129
![multisigbespoke](/img/treasuryAccount/usdc.png)
3230

3331

docusaurus.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ const config = {
4646
items: [
4747
{
4848
type: "doc",
49-
docId: "multisig-DAO/get-started",
49+
docId: "DAO-Management/get-started",
5050
position: "left",
5151
label: "Tutorial",
5252
},
Loading
Loading
Loading
Loading
Loading
Loading
26.3 KB
Loading

0 commit comments

Comments
 (0)