-
Notifications
You must be signed in to change notification settings - Fork 0
/
snapshot-docs.json
318 lines (318 loc) · 218 KB
/
snapshot-docs.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
{
"docs": [
{
"id": "0",
"title": "Strategies",
"subTitles": " , 1: This is the default strategy used erc20-balance-of , More strategies are on Snapshot.js here:",
"content": "# Strategies\n\nA strategy is a JavaScript function that returns a score for a set of addresses. Strategies are being used on Snapshot to calculate the result for a proposal. A proposal can have multiple strategies. The default strategy is to calculate the balance of an ERC20 for each voter. A strategy can send a call to a node or subgraph.\n\n**All the strategies are visible here:** [https://snapshot.page/\\#/strategies](https://snapshot.page/#/strategies)\n\n## 1: This is the default strategy used `erc20-balance-of`:\n\n{% embed url='https://github.com/bonustrack/snapshot.js/blob/master/src/strategies/erc20-balance-of/index.ts' caption='' %}\n\n```javascript\nimport { formatUnits } from '@ethersproject/units';\nimport { multicall } from '../../utils';\nimport { abi } from './TestToken.json';\n\nexport async function strategy(provider, addresses, options, snapshot) {\n const blockTag = typeof snapshot === 'number' ? snapshot : 'latest';\n const response = await multicall(\n provider,\n abi,\n addresses.map((address: any) => [options.address, 'balanceOf', [address]]),\n { blockTag }\n );\n return Object.fromEntries(\n response.map((value, i) => [\n addresses[i],\n parseFloat(formatUnits(value.toString(), options.decimals))\n ])\n );\n}\n```\n\nStrategies are defined in the space `index.json` file level. This is how to add strategies to calculate the balance of voters in BAL and balance of BAL in Balancer pools where they provide liquidity.\n\n{% embed url='https://github.com/bonustrack/snapshot-spaces/blob/master/spaces/balancer/index.json\\#L20-L30' caption='' %}\n\n```javascript\n{\n ...\n 'strategies': [\n [\n 'erc20-balance-of',\n {\n 'address': '0xba100000625a3754423978a60c9317c58a424e3D',\n 'symbol': 'BAL',\n 'decimals': 18\n }\n ],\n [\n 'balancer',\n {\n 'address': '0xba100000625a3754423978a60c9317c58a424e3D',\n 'symbol': 'BAL BPT'\n }\n ]\n ]\n}\n```\n\nStrategies can be used to create a score from on-chain data, the data does not necessary need to be monetary, we can imagine a strategy that calculate how many POAP you own or use any other data available on-chain to issue a score.\n\n## More strategies are on Snapshot.js here:\n\n{% embed url='https://github.com/bonustrack/snapshot.js/tree/master/src/strategies' caption='' %}\n\n"
},
{
"id": 1,
"title": "Spaces",
"subTitles": "Create a space , Migrate a space , Avatars , Skins , Custom domain",
"content": "# Spaces\n\n### Create a space\n\n{% page-ref page='guides/create-a-space.md' %}\n\n### Migrate a space\n\n{% page-ref page='guides/migrate-your-space-to-ens.md' %}\n\n### Avatars\n\n{% page-ref page='guides/add-avatars.md' %}\n\n### Skins\n\n{% page-ref page='guides/add-a-skin.md' %}\n\n### Custom domain\n\n{% page-ref page='guides/add-a-custom-domain.md' %}\n\n"
},
{
"id": "2",
"title": "Proposals",
"subTitles": "Create a proposal , Vote on a proposal",
"content": "# Proposals\n\n### Create a proposal\n\n{% page-ref page='guides/create-a-proposal.md' %}\n\n### Vote on a proposal\n\n{% page-ref page='guides/vote-for-a-proposal.md' %}\n\n\n\n"
},
{
"id": 3,
"content": "---\ndescription: Frequently asked questions.\n---\n\n# FAQs\n\n## :wave: Getting started\n\n<details>\n\n<summary><strong>What is Snapshot?</strong></summary>\n\nSnapshot is an **off-chain voting platform** that allows DAOs, DeFi protocols, or NFT communities to vote easily and **without gas fees**.\n\nThe tool allows high customization of the voting process to cater to the diverse needs of the users and organizations. Customization includes different aspects like calculation of the users' voting power, selection of the voting mechanism, proposal and vote validation, and many more.\n\n</details>\n\n<details>\n\n<summary><strong>What does 'snapshot' mean?</strong></summary>\n\nIn cryptocurrency, a snapshot is a record of the state of the blockchain at a particular block height. It means that you can for example track the holdings of a specific wallet back to a specific point in time. Snapshot, the voting platform, is using snapshots to validate if voters met the voting criteria at the moment of proposal creation. If a voter acquired required tokens after the proposal has been created, these newly acquired tokens would not be used for calculation of their voting power.\n\n</details>\n\n<details>\n\n<summary><strong>Is Snapshot free to use?</strong></summary>\n\nYes. To create a space, you have to own an ENS domain and perform one transaction on-chain. Voting or proposing is completely free.\n\n</details>\n\n<details>\n\n<summary><strong>Do I need to create a user account?</strong></summary>\n\nNo. Snapshot uses the universal web3 login - you need to have a wallet account like Metamask or Coinbase to connect to Snapshot.\n\n</details>\n\n<details>\n\n<summary><strong>What is a space?</strong></summary>\n\nYou can think of a space as an organization's **account** on Snapshot which can be viewed by anyone visiting the platform. It serves as a hub for all proposals related to the organization and a source of information for the users. It’s also where users will vote on proposals in their community.\n\n</details>\n\n<details>\n\n<summary><strong>What is a proposal?</strong></summary>\n\nProposals are key elements of the voting system. It presents a change suggestion related to a specific organization and enables eligible users to cast their vote.\n\n</details>\n\n<details>\n\n<summary><strong>How can I vote?</strong></summary>\n\nYou need to connect to Snapshot with your wallet and fulfil the requirements defined by the voting strategies used by a specific space. For example, you might be required to hold a specific amount of the organization’s token. You can see the voting strategies directly on a proposal’s page in the **Information** section:\n\n![](<.gitbook/assets/image (17) (2).png>)\n\nIf you don’t understand why your voting power is `0` or how the strategies work in detail, we recommend reaching out to the organization directly. In most cases you don’t have the voting power because you did not hold the required tokens at the time of proposal creation. Tokens which were acquired after the proposal has been create are not taken into account for the voting power calculation.\n\nIf you are eligible to vote, you can cast your vote directly from the proposal’s page. Once you select the choice(s) and confirm your vote, a new window will pop up and open your wallet extension in the browser. You will be then asked to sign a message which doesn’t create any gas fees (voting is free of charge) or affect your holdings. Signing the message is the last step of casting a vote. That’s it!\n\n</details>\n\n<details>\n\n<summary><strong>Can I vote on any proposal?</strong></summary>\n\nNo. Your eligibility to vote depends on the voting strategies defined by the space and usually requires holding the organization’s token. Some spaces allow anyone to vote, however this is a rare case. \n\nYou can read more about the voting strategies in our documentation: [what-is-a-strategy.md](user-guides/strategies/what-is-a-strategy.md 'mention')\n\n</details>\n\n<details>\n\n<summary><strong>Can I create a proposal?</strong></summary>\n\nIt depends on the space settings. Spaces can set up a validation strategy which defines who is eligible to create a proposal, for example you need to hold at least 1ETH in your wallet in order to do so. Moreover, spaces can specify a list of users who can create proposals by listing their wallet addresses in the space settings. You can read more about [space settings](https://docs.snapshot.org/spaces/settings) and [proposal validation](https://docs.snapshot.org/strategies/what-is-a-strategy-1).\n\n</details>\n\n<details>\n\n<summary><strong>Is voting on Snapshot safe?</strong></summary>\n\nYes. The message you sign in your wallet to cast the vote doesn’t affect your holdings or web3 identity. There are some spaces which are flagged with a warning badge if we suspect them to be fake but you don’t need to worry if you have cast a vote on their proposal. There is no risk to your funds associated with signing a Snapshot vote. You can read more about the badges in our documentation: [badges-and-warnings.md](user-guides/spaces/badges-and-warnings.md 'mention')\n\n</details>\n\n<details>\n\n<summary><strong>I can’t vote, what should I do?</strong></summary>\n\nThere might be multiple reasons for that. Most usually you didn’t have the required tokens in you wallet at the time of proposal creation. Have a look at [this discussion ](https://github.com/snapshot-labs/snapshot/discussions/767)to explore other potential reasons.\n\n</details>\n\n<details>\n\n<summary><strong>Is Snapshot open source?</strong></summary>\n\nYes. All our repositories can be found at [https://github.com/snapshot-labs/](https://github.com/snapshot-labs/).\n\n</details>\n\n<details>\n\n<summary><strong>How can I get in touch?</strong></summary>\n\nIf you have an issue with your space, a proposal or voting, make sure to first read the FAQ and use a search bar in our documentation: [https://docs.snapshot.org](https://docs.snapshot.org).\n\nIf it doesn’t answer your question or you would like to get in touch with regard to another topic, you can reach us in our [Discord](https://discord.snapshot.org) server and send a message in appropriate channel (i.e. [#general](https://discord.com/channels/707079246388133940/728646188252921956)) or create a new thread on the [#helpdesk](https://discord.com/channels/707079246388133940/1019725253519351838) forum.\n\n</details>\n\n\n\n## 👤 I'm a Snapshot user\n\n<details>\n\n<summary><strong>I have an issue, where should I report it?</strong></summary>\n\nBefore you report it make sure to browse through this FAQ, our documentation or the Discord server. There is a high chance that the issue has already been discussed before. If not, create a new thread on the [helpdesk forum](https://discord.com/channels/707079246388133940/1019725253519351838) with the following details:\n\n* Clear title describing your issue\n* Tags which are related to the problem\n* Detailed description of the issue: what action were you trying to perform (i.e. casting a vote), what error did you get\n* Screenshots - provide the screenshots of the error you are getting\n* URLs - applicable urls, i.e. proposal or space url\n\n</details>\n\n<details>\n\n<summary><strong>I get 'Oops, something went wrong!” what should I do?</strong></summary>\n\nWe recommend to wait for around 10 minutes and try again. If the error persist, open the console panel (right click with your mouse and click `Inspect` and open the `Console` tab):\n\n![](<.gitbook/assets/image (23).png>)\n\nMake a screenshot of the panel and post a message on the [helpdesk forum on Discord](https://discord.com/channels/707079246388133940/1019725253519351838) with the following details:\n\n* Topic: clear on context when you got the error - Cannot cast a vote - Oops, something went wrong\n* What were you attempting to do? (i.e. vote on a proposal, create a proposal)\n* Did you wait for some time before trying again?\n* Paste the screenshot from the console panel.\n\n</details>\n\n### Voting\n\n<details>\n\n<summary><strong>I delegated my voting power but would like to take it back. How can I do it?</strong></summary>\n\nYou can remove your delegations by going to[https://demo.snapshot.org/#/delegate](https://demo.snapshot.org/#/delegate) and clicking the ❌ for the delegations you wish to remove.\n\n![](<.gitbook/assets/image (22).png>)\n\nMoreover, if you want to override your delegate’s vote on a proposal using [the delegation strategy](https://snapshot.org/#/strategy/delegation) you can simply cast your own vote and it will override the delegate’s vote. If the delegation happened on-chain, then head to the delegation portal of the project you’re looking for and redelegate there.\n\n</details>\n\n<details>\n\n<summary><strong>Can I explain the reason for my vote somewhere?</strong></summary>\n\nYes, apart from the proposals using shielded voting.\n\nYou can add a short explanation when casting a vote:\n\n![](<.gitbook/assets/image (34).png>)\n\n</details>\n\n<details>\n\n<summary><strong>I get “Your voting power could not be calculated due to misconfigured strategy or unresponsive RPC node”. What should I do?</strong></summary>\n\nThis issue is related to either space settings or the failure of the external infrastructure that Snapshot relies on. We recommend to wait 15 minutes before trying again. If the error persists, please post a message in the [Misconfigured node](https://discord.com/channels/707079246388133940/1070376451070767124/1070376451070767124) thread on helpdesk forum on Discord with the following details:\n\n* URL of the proposal you were trying to vote on\n* The error message you received (in this case: “Your voting power could not be calculated due to misconfigured strategy or unresponsive RPC node”)\n* Did you wait for 15 minutes before trying to cast the vote again\n\n</details>\n\n<details>\n\n<summary>How can I export the complete voting to excel?</summary>\n\nGo to the proposals page and click the download icon to get a CSV file. You can open it directly in excel or import it in the Google Sheets.\n\n![](<.gitbook/assets/image (32).png>)\n\n</details>\n\n<details>\n\n<summary>Can I vote with a Safe/Multisig?</summary>\n\nYes. You can find more details in our documentation here: [gnosis-safe.md](user-guides/gnosis-safe.md 'mention')\n\n</details>\n\n<details>\n\n<summary>There is a proposal that's open until tomorrow and I have a new token that was minted today, after the proposal’s creation. Can that token be used to vote?</summary>\n\nNo. Snapshot calculates the voting power on the basis of proposal creation time. If the token has not been stored in the wallet before the proposal was created it will not be taken into account.\n\n</details>\n\n<details>\n\n<summary>I get “Oops, failed to check voting power”. What should I do?</summary>\n\nThis issue is related to either space settings or the failure of the external infrastructure that Snapshot relies on. We recommend to wait 15 minutes before trying again. If the error persists, please post a message in the [thread on helpdesk forum](https://discord.com/channels/707079246388133940/1070378969238601868/1070378969238601868) on Discord with the following details:\n\n* URL of the proposal you were trying to vote on\n* The error message you received (in this case: “Oops, failed to check voting power”)\n* Did you wait for 15 minutes before trying to cast the vote again\n\n</details>\n\n### Space settings \n\n<details>\n\n<summary>It is possible to create a space with a multi-sig account?</summary>\n\nYes. In order to do so navigate to [https://app.safe.global](https://app.safe.global) and select Snapshot in the `Apps` tab. Your multi-sig address will connect to Snapshot and allow you to create spaces, proposals and vote.\n\n</details>\n\n<details>\n\n<summary>I lost access to my ENS domain which was used to register a space on Snapshot. What should I do?</summary>\n\nIf you are still a controller of the space you can apply to delete your space or migrate the current space to another one with different ENS. Have a look at our documentation for more details: [delete-a-space.md](user-guides/spaces/delete-a-space.md 'mention')\n\n</details>\n\n<details>\n\n<summary>How can I differentiate settings for proposals and voting?</summary>\n\nYou can use sub-spaces on Snapshot. This solution allows you to link multiple spaces and set different settings for each of them depending on your needs. Have a look at our documentation to learn more: [sub-spaces.md](user-guides/spaces/sub-spaces.md 'mention')\n\n</details>\n\n<details>\n\n<summary>Can I change the name of my space?</summary>\n\nYes. You can do it in the space settings. \n\nDo not confuse it with changing the `ID` or the ENS domain for your space. To do that, you need to migrate the space. You can read more about changing the ENS domain in our documentation: [delete-a-space.md](user-guides/spaces/delete-a-space.md 'mention')\n\n</details>\n\n<details>\n\n<summary>How can I verify my space?</summary>\n\nThere is a list of requirements you have to meet. Have a look at our documentation to learn more: [get-verified.md](user-guides/spaces/get-verified.md 'mention')\n\n</details>\n\n<details>\n\n<summary>How long does it take to verify a space?</summary>\n\nThe process can take up to 72 hours.\n\n</details>\n\n<details>\n\n<summary>I made a mistake with my space settings and I want to cancel existing votes. How can I do it?</summary>\n\nYou cannot invalidate existing votes. However you can delete the proposal.\n\nIf you are an admin of the space or proposal’s creator you can delete the current proposal by clicking `Delete` on the proposal’s page:\n\n![](<.gitbook/assets/image (25).png>)\n\nThen change the space settings and make sure to persist the changes.\n\nOnce the settings have been updated you can recreate the proposal from scratch.\n\n</details>\n\n### Voting strategies\n\n<details>\n\n<summary>What is a strategy?</summary>\n\nVoting strategy is a set of conditions used to calculate user's voting power. Strategies enable Snapshot to calculate the final result of voting on a given proposal. You can read more about them in our documentation: [what-is-a-strategy.md](user-guides/strategies/what-is-a-strategy.md 'mention')\n\n</details>\n\n<details>\n\n<summary>I want to test a strategy, how can I do it?</summary>\n\nYou can use the playground on Snapshot available from the strategy’s page:\n\n![](<.gitbook/assets/image (31).png>)\n\n</details>\n\n<details>\n\n<summary>How to limit voting to only those users who own a specific amount of the token(s)?</summary>\n\nYou need to setup a basic voting validation which allows you to select a specific strategy and define the minimum threshold required for the user to vote. Have a look at our documentation here to learn more: [what-is-a-strategy-1.md](user-guides/strategies/what-is-a-strategy-1.md 'mention')\n\n</details>\n\n<details>\n\n<summary>Why is my voting power equal to <code>0</code>? </summary>\n\nThere might be multiple reasons for that. Most usually your voting power is equal to 0 as you didn’t have the required tokens in you wallet at the time of proposal creation. Have a look at [this discussion](https://github.com/snapshot-labs/snapshot/discussions/767) to explore other potential reasons.\n\n</details>\n\n<details>\n\n<summary>Why is my voting power reduced? I’m a delegate. </summary>\n\nIf the proposal’s space is using the [delegation strategy](https://snapshot.org/#/strategy/delegation) and the address which delegated its voting power to you casts a vote on the specific proposal, your total voting power is reduced by the delegation which you received from the other address.\n\nTo give an example (using the `delegation` strategy):\n\n* B has voting power of 20 of its own.\n* A has voting power of 10 and delegates it to B.\n* B has now a voting power equal to 30.\n* If A does not vote, B’s voting power is 30.\n* If A does vote, B’s voting power is 20. (30 reduced by 10)\n\n</details>\n\n<details>\n\n<summary>I'm looking to set up our Snapshot space with 3 different voting strategies for 3 types of proposals. How can I do it? </summary>\n\nYou can use sub-spaces on Snapshot. This solution allows you to link different spaces and set different settings for each of them depending on your needs. Have a look at our documentation to learn more: [sub-spaces.md](user-guides/spaces/sub-spaces.md 'mention')\n\n</details>\n\n<details>\n\n<summary>I want to give one vote per one wallet to the voters of my space, regardless of their wallets’ balance. Which strategy should I use? </summary>\n\nYou can use the [ticket](https://snapshot.org/#/strategy/ticket) strategy.\n\n</details>\n\n<details>\n\n<summary>How can I give 1 voting power to all voters holding a specific token regardless of its amount?</summary>\n\nIt's a two step process - you have to define a [validation strategy](user-guides/strategies/what-is-a-strategy-1.md) and a [voting strategy](faq.md#voting-strategies) for your space.\\\n\\\n**1. Voting validation** \\\nIn order to allow users to participate in voting, setup a `Basic` voting validation in the space settings. You can find it in the voting section in space settings:\\\n\\\n![](.gitbook/assets/image.png)\\\n\\\nWhen defining the voting validation parameters, you have the option to specify the `strategies` for the tokens and the `minScore` required for voters to be eligible to vote:\n\nHere is an example of the basic strategy setup for voters holding DAI tokens:\n\n```\n{\n 'minScore': 1, # define the minimum required amount of token\n 'strategies': [\n {\n 'name': 'erc20-balance-of',\n 'params': { # define the specific token details\n 'address': '0x6b175474e89094c44da98b954eedeac495271d0f',\n 'symbol': 'DAI',\n 'decimals': 18\n }\n ]\n}\n```\n\n**2. Voting strategy** \n\nUse the [Ticket](https://snapshot.org/#/strategy/ticket) strategy to give voting power equal to `1` to any user eligible to vote - users that passed the voting validation described in step 1.\\\n![](<.gitbook/assets/image (5).png>)\n\n</details>\n\n<details>\n\n<summary>I am not a developer, can someone work on my strategy for money? </summary>\n\nYes. You can create an issue on [https://github.com/snapshot-labs/snapshot-strategies/issues](https://github.com/snapshot-labs/snapshot-strategies/issues) and then post in on the [#contributor](https://discord.com/channels/707079246388133940/865557228702662667) channel on Discord.\n\n\\\nSnapshot is not reponsible for the agreement between you and the contributors.\n\n</details>\n\n## 🧑🏻💻 I'm a developer\n\n<details>\n\n<summary>Which networks are currently supported for voting with Gnosis Safe? </summary>\n\nYou can find the networks’ IDs here: [https://github.com/snapshot-labs/snapshot-relayer/blob/master/src/check.ts#L9](https://github.com/snapshot-labs/snapshot-relayer/blob/master/src/check.ts#L9)\n\n</details>\n\n<details>\n\n<summary>Do we need to deploy an ENS contract on our custom network to be able to support Snapshot? </summary>\n\nNo, it’s not needed.\n\n</details>\n\n<details>\n\n<summary>I think I found a vulnerability on Snapshot. Do you have a bug bounty?</summary>\n\nYes, we do. Please create report on the respective repository as showed below:\n\n![](<.gitbook/assets/image (33).png>)\n\n</details>\n\n<details>\n\n<summary>Is it possible to test Snapshot without creating ENS on mainnet?</summary>\n\nYes. You can use the [https://demo.snapshot.org](https://demo.snapshot.org) with an ENS domain on Goerli Testnet.\n\n</details>\n\n<details>\n\n<summary>How does Snapshot use IPFS?</summary>\n\nWe use IPFS to pin the receipts of the votes. You can have a more detailed look at the [IPFS article](https://blog.ipfs.tech/2022-08-25-snapshot-ipfs-case-study/).\n\n</details>\n\n<details>\n\n<summary>How to add a webhook? </summary>\n\nHave a look at our documentation: [webhooks.md](tools/webhooks.md 'mention')\n\n</details>\n\n### Snaphot.js \n\n<details>\n\n<summary>I tried to submit a proposal with <code>snapshot.js</code>, but I get a “Wrong proposal format” error. What should I do?</summary>\n\nThere is a high chance that something is missing in the proposal’s payload. Make sure you are following the proposal schema defined here → [https://github.com/snapshot-labs/snapshot.js/blob/master/src/schemas/proposal.json](https://github.com/snapshot-labs/snapshot.js/blob/master/src/schemas/proposal.json)\n\n</details>\n\n<details>\n\n<summary>I tried to submit a vote with <code>snapshot.js</code>, but I get the “Wrong vote format” error. What should I do?</summary>\n\nMake sure that you’re following the vote schema defined here → [https://github.com/snapshot-labs/snapshot.js/blob/master/src/schemas/vote.json](https://github.com/snapshot-labs/snapshot.js/blob/master/src/schemas/vote.json).\n\nA common mistake is using a wrong type (string instead of object) or extending a limit of a value (i.e. `reason` ).\n\n</details>\n\n<details>\n\n<summary>Is there an alternative to <code>snapshot.js</code> in python?</summary>\n\nNo. If you are interested in building it, reach out to the team on the [#contributor](https://discord.com/channels/707079246388133940/865557228702662667) channel!\n\n</details>\n\n<details>\n\n<summary>How to use <code>snapshot.js</code> to create a space or update space settings?</summary>\n\nHave a look at our documentation here: [#create-or-edit-a-space](tools/snapshot.js.md#create-or-edit-a-space 'mention')\n\n</details>\n\n### Adding a network\n\n<details>\n\n<summary>How can I add our network to Snapshot?</summary>\n\nFollow our documentation to learn all the steps to add a new network to Snapshot: [#add-a-new-network](developer-guides/networks.md#add-a-new-network 'mention')\n\n</details>\n\n<details>\n\n<summary>How can I check if the RPC node is a Full Archive Node?</summary>\n\nYou can send a request to the node and try to fetch the genesis block:\n\n```\n$ curl -H 'content-type: application/json' -X POST --data '{'id':0,'jsonrpc':'2.0','method':'eth_getBalance','params':['<CONTRACT_HASH>','0x1']}' <RPC_URL>\n```\n\nIf you get a correct response without any errors, the Node is a Full Archive.\n\n</details>\n\n### Creating voting strategies\n\n<details>\n\n<summary>How to use our staking contract for voting? </summary>\n\nYou can browse through the existing staking strategies →[https://snapshot.org/#/?type=strategies\\&q=stake](https://snapshot.org/#/?type=strategies\\&q=stake).\n\nIf none of them work for you, have a look at the options below.\n\n* In order to use the staking contract it has to have a `balanceOf` method which allows reading the balance of the staked tokens. You can use the[https://snapshot.org/#/strategy/erc20-balance-of](https://snapshot.org/#/strategy/erc20-balance-of) strategy with it.\n* If your contract has a method getting the balance named differently, you can also use the[https://snapshot.org/#/strategy/contract-call](https://snapshot.org/#/strategy/contract-call) strategy.\n\n</details>\n\n<details>\n\n<summary>How long will it take to merge my PR?</summary>\n\nIt usually takes around 72 hours so please have some patience. Once the PR is merged, you will also have to wait for a new release of the repository which can take another couple of days.\n\n</details>\n\n<details>\n\n<summary>Is it possible to support delegation on our network?</summary>\n\nYes. If it’s not supported yet you can create a custom voting strategy to enable delegation on your network. You can see an example here →[https://snapshot.org/#/strategy/orbs-network-delegation](https://snapshot.org/#/strategy/orbs-network-delegation)\n\n\n\nTo learn more have a look at our documentation: [create-1.md](developer-guides/create-a-strategy/create-1.md 'mention')\n\n</details>\n\n<details>\n\n<summary>I get <code>0</code> voting power in the delegation strategy playground but I can vote on real proposals.</summary>\n\nMost probably you are missing the `delegationSpace` parameter. Make sure to provide the ENS domain of the space you are testing.\n\n</details>\n\n<details>\n\n<summary>How to use our token from our network for voting?</summary>\n\nIf it doesn’t exist yet, you can create a new voting strategy. Have a look at our documentation to learn more: [create-1.md](developer-guides/create-a-strategy/create-1.md 'mention')\n\n</details>\n\n\n\nStill can't find an answer? Have a look at our [Github discussions](https://github.com/snapshot-labs/snapshot/discussions/categories/q-a) or follow this question:[#i-have-an-issue-where-should-i-report-it](faq.md#i-have-an-issue-where-should-i-report-it 'mention')\n"
},
{
"id": 4,
"content": "# Table of contents\n\n* [Home](README.md)\n* [FAQs](faq.md)\n\n## User guides\n\n* [Spaces](user-guides/spaces/README.md)\n * [What is a space?](user-guides/spaces/what-is-a-space.md)\n * [Create a space](user-guides/spaces/create/README.md)\n * [Register an ENS domain](user-guides/spaces/create/before-creating-your-space.md)\n * [Alternative way to create a space](user-guides/spaces/create/alternative-way-to-create-a-space.md)\n * [Settings](user-guides/spaces/settings.md)\n * [Sub-spaces](user-guides/spaces/sub-spaces.md)\n * [Space verification](user-guides/spaces/get-verified.md)\n * [Add a custom domain](user-guides/spaces/add-custom-domain.md)\n * [Add a skin](user-guides/spaces/add-skin.md)\n * [Space roles](user-guides/spaces/space-roles.md)\n * [Migrate your space to ENS](user-guides/spaces/migrate.md)\n * [Migrate or delete or a space](user-guides/spaces/delete-a-space.md)\n * [Space badges](user-guides/spaces/badges-and-warnings.md)\n* [Proposals](user-guides/proposals/README.md)\n * [Create a proposal](user-guides/proposals/create.md)\n * [Voting systems](user-guides/proposals/voting-types.md)\n* [Voting](user-guides/voting/README.md)\n * [Vote on a proposal](user-guides/voting/vote.md)\n * [Delegate your voting power](user-guides/voting/delegate-your-voting-power.md)\n* [Strategies](user-guides/strategies/README.md)\n * [Voting strategies](user-guides/strategies/what-is-a-strategy.md)\n * [Validation strategies](user-guides/strategies/what-is-a-strategy-1.md)\n* [Plugins](user-guides/plugins/README.md)\n * [What is a plugin?](user-guides/plugins/what-is-a-plugin-and-how-to-use-it.md)\n * [SafeSnap: oSnap](user-guides/plugins/safesnap-osnap.md)\n * [SafeSnap: Reality](user-guides/plugins/safesnap-reality.md)\n * [POAP](user-guides/plugins/poap.md)\n * [Comment Box](user-guides/plugins/comment-box.md)\n * [Quorum](user-guides/plugins/quorum.md)\n * [HAL Notifications](user-guides/plugins/hal.md)\n * [Gnosis Impact](user-guides/plugins/gnosis-impact.md)\n * [Galxe](user-guides/plugins/project-galaxy.md)\n* [Using Safe multi-sig](user-guides/gnosis-safe.md)\n* [Delegation](user-guides/delegation.md)\n\n## Developer Guides\n\n* [Contribute](developer-guides/contribute/README.md)\n * [🙋♂️ Support](developer-guides/contribute/support.md)\n* [Add a network](developer-guides/networks.md)\n* [Create a plugin](developer-guides/create.md)\n* [Create a strategy](developer-guides/create-a-strategy/README.md)\n * [Create a voting strategy](developer-guides/create-a-strategy/create-1.md)\n * [Create a validation strategy](developer-guides/create-a-strategy/create-1-1.md)\n\n## Tools\n\n* [Tools overview](tools/tools-overview.md)\n* [Snapshot.js](tools/snapshot.js.md)\n* [GraphQL API](tools/graphql-api.md)\n* [Webhooks](tools/webhooks.md)\n* [Bots](tools/bots.md)\n"
},
{
"id": 5,
"content": "---\ndescription: >-\n This page intends to give you a brief explanation of what Snapshot is and how\n it works. It also provides you with all the necessary information to get\n started.\n---\n\n# Home\n\n## Welcome to Snapshot!\n\nSnapshot is a **voting platform** that allows DAOs, DeFi protocols, or NFT communities to vote easily and **without gas fees**. \n\nThe tool allows high customization of the voting process to cater to the diverse needs of the users and organizations. Customization includes different aspects like calculation of the users' voting power, selection of the voting mechanism, proposal and vote validation, and many more.\n\nIn short, Snapshot is an off-chain gasless multi-governance client which results are easy to verify and hard to contest.\n\n### Key features\n\n* **Free** **usage** - create spaces, proposals and take part in organization's governance without any gas fees\n* **Signed messages** - votes are cast through signed messages easily verifiable online\n* **Multiple voting systems** - Single choice, Approval voting, Quadratic voting, and more\n* **Flexible voting strategies** - customize how the voting power is calculated through single or combined strategies that enable voting with ERC20s, NFTs, other contracts, and more\n* **Proposal and voting validation** - utilize Gitcoin Passport, POAPs or other solutions to validate who can create a proposal or cast a vote\n* **Custom branding** - spaces can use their own branding, color schemes and domain name\n* **Fully open-source** with MIT license - our code can be viewed on Github at [https://github.com/snapshot-labs/](https://github.com/snapshot-labs/)\n\n### How does it work?\n\nThere are three key elements that are involved in the voting process: **spaces**, **proposals** and **votes**. Proposals and votes are associated with a space, while each space is an account (profile) of an organization. \n\nYou will need an **ENS domain** in order to create a space on Snapshot, which is also the only requirement from Snapshot's side to set up a space.\n\nUsers can then create proposals for the space and vote on them. Space admins can define the **rules** for proposal creation and casting a vote by setting up voting and validation strategies. For example only users holding a minimum of 10K of specified token can create a new proposal and the voting power of users is proportional to the balance of the specified token in their wallet.\n\nFor more details about the voting process and customization have a look at the detailed pages of our documentation.\n\n### Where to start?\n\nThis guide is meant for all existing and future Snapshot users. Therefore regardless whether you are new to Web3, want to create a Space for your organization or are a contributor working on custom voting strategies, you will be able to find resources for your own use case within our documentation.\n\n<table data-view='cards'><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type='content-ref'></th></tr></thead><tbody><tr><td><h3><strong>Spaces</strong></h3></td><td>I want to manage my organization's account on Snapshot.</td><td></td><td><a href='user-guides/spaces/'>spaces</a></td></tr><tr><td><h3>Proposals</h3></td><td>I want to create a proposal.</td><td></td><td><a href='user-guides/proposals/'>proposals</a></td></tr><tr><td><h3>Voting</h3></td><td>I want to vote on a proposal.</td><td></td><td></td></tr><tr><td><h3>Contribute</h3></td><td>I want to create a new strategy, a plugin or contribute to the codebase.</td><td></td><td><a href='developer-guides/contribute/'>contribute</a></td></tr><tr><td><h3>Tools</h3></td><td>I want to integrate Snapshot in my product, use API or get notifications about new proposals.</td><td></td><td><a href='tools/tools-overview.md'>tools-overview.md</a></td></tr></tbody></table>\n\nIf you don't know where to start or have a specific question, head to the FAQ section!\n\n{% content-ref url='faq.md' %}\n[faq.md](faq.md)\n{% endcontent-ref %}\n\n### Contributing\n\nWe want to create a product which is easy to use by anyone - technical and non-technical, Web3-native or completely new to the space. \n\nAs open-source mindset and community are at the heart of Snapshot we are inviting you to contribute with general feedback, code, code review, design, bug reports, advice, documentation, or anything else you can think of.\n\nHead to [#contributing](./#contributing 'mention') to learn how you can help us enhance Snapshot!\n\n### **What’s next?**\n\nThe next part of the guide will take you through the steps of **creating a space on Snapshot**. It will also take you through the process of registering an ENS domain if you do not have one already. \n"
},
{
"id": 6,
"content": "---\ndescription: Learn how you can use Snapshot with a Gnosis Safe Multi-sig wallet.\n---\n\n# Gnosis Safe - spaces, proposals and voting\n\nYou can use a Gnosis Safe to vote, create a proposal or setup a space on Snapshot. \n\n### Gnosis Safe interface\n\n{% hint style='info' %}\n**Spaces can be created and updated** only by Ethereum Mainnet accounts.\\\n\n\nVoting and proposals related actions are supported by Ethereum Mainnet, Optimism Mainnet, Arbitrum Mainnet, Polygon Mainnet, BSC and Goerli Testnet.\n{% endhint %}\n\nTo use your multi-sig wallet to interact with Snapshot you can login to Snapshot from Gnosis Safe UI by adding [https://snapshot.org](https://snapshot.org) as a Safe app. When you try an action like vote, it will create a pending transaction in your Safe transactions queue. This transaction must be confirmed by the Safe signers within **72 hours.** Once the transaction is confirmed the vote will be sent and will appear on the proposal.\n\n{% embed url='https://www.loom.com/share/31e22ddf57b84fbc9882d9d87b4dded4' %}\n\n### Vote directly on Snapshot\n\nYou can also cast your votes, create proposals and manage spaces directly on[ https://snapshot.org](https://snapshot.org).\n\nNavigate to [https://snapshot.page/#/delegate/](https://snapshot.page/#/delegate/), and connect your Gnosis Safe using the [Safe App for WalletConnect](https://help.gnosis-safe.io/en/articles/4356253-how-to-use-walletconnect-with-the-gnosis-safe-multisig). Then, enter an address of an EOA wallet or ENS name you control or to which you would like to delegate, and click `Confirm.`\n\nAfterwards you will be able to see the EOA wallet address(es) you’ve delegated to from your Gnosis Safe whenever you return to this page. Delegated addresses allow you to use an EOA wallet that represents the governance token holdings in your Gnosis Safe. In order to participate in Snapshot polls through delegation, make sure you’ve connected the wallet to which you’ve delegated.\n\n{% hint style='info' %}\nFor a delegated address to be effective when signaling on a Snapshot poll, the address has to have been delegated to before the **block number** assigned to the Snapshot proposal.\n{% endhint %}\n\n{% hint style='warning' %}\n**Any action** on Snapshot done with a **Gnosis Safe** require a TX that will require **gas fees.**\n{% endhint %}\n"
},
{
"id": 7,
"content": "---\ndescription: Snapshot delegation.\n---\n\n# Delegation\n\n## Delegation contract\n\nSnapshot uses the Gnosis 'Delegate Registry' contract here:\\\n[https://github.com/gnosis/delegate-registry](https://github.com/gnosis/delegate-registry)\n\nThe contract is deployed on this address: [0x469788fE6E9E9681C6ebF3bF78e7Fd26Fc015446](https://etherscan.io/address/0x469788fE6E9E9681C6ebF3bF78e7Fd26Fc015446#code)\\\n(Also available on Rinkeby and Kovan at the same address)\n\nDelegations are stored on this subgraph:\\\n[https://thegraph.com/explorer/subgraph/snapshot-labs/snapshot](https://thegraph.com/explorer/subgraph/snapshot-labs/snapshot)\n\nA delegation voting strategy must be added to the Snapshot space before delegated votes will be counted. You can use the **** [**with-delegation**](https://snapshot.org/#/strategy/with-delegation) strategy.\n\n## Delegate voting power\n\n### From Snapshot interface\n\n1. Go to [https://snapshot.org/#/delegate](https://snapshot.org/#/delegate)\n2. Enter the address you want to delegate to.\n3. To limit the delegation to a specific space, tap the on switch button and enter the space key (example: `balancer.eth`) you want your delegation to take effect on. If no space is selected, the effect will take place for all spaces.\n4. Click confirm to save your delegation.\n\n### With a smart contract\n\nYou need to call the `setDelegate` method with the space id as the first argument (space id is its ENS domain name, for example _fabien.eth)_, and the address of the delegate as the second argument.\n\nHere is an example of integration in a Solidity contract: \n\n[https://github.com/convex-eth/platform/blob/d3061c19b5e01a4e562c8121b08c44f1b42f0b85/contracts/contracts/BasicCvxHolder.sol#L49-L53](https://github.com/convex-eth/platform/blob/d3061c19b5e01a4e562c8121b08c44f1b42f0b85/contracts/contracts/BasicCvxHolder.sol#L49-L53)\n\n### Supported Networks\n\n* Mainnet\n* Goerli\n* Optimism\n* Binance Smart Chain\n* Gnosis Chain\n* Matic (Polygon)\n* Fantom\n* Arbitrum\n"
},
{
"id": 8,
"content": "---\ndescription: Receive event notifications with webhooks.\n---\n\n# Webhooks\n\nSnapshot uses webhooks to notify your application when an event happens. Webhooks are particularly useful for asynchronous events like when a proposal is created, when it starts, or when it ends.\n\nThe webhook server sends a request for any new event, the request is sent to the configured URL with `POST` method and the event object as body. \n\n**Here is an example of the event object:**\n\n```javascript\n{\n id: 'proposal/QmZ21uS8tVucpaNq2LZCbZUmHhYYXunC1ZS2gPDNWwPWD9',\n event: 'proposal/created',\n space: 'yam.eth',\n expire: 1620947058\n}\n```\n\n**Here are the possible events:**\n\n`proposal/created` \\\nWhen a new proposal is created\n\n`proposal/start` \\\nWhen the voting period for a proposal starts.\n\n`proposal/end` \\\nWhen the voting period for a proposal ends.\n\n`proposal/deleted` \\\nWhen a proposal is deleted by the author or an admin of the space.\n\n### Subscribe to events\n\nIf you want to subscribe to webhooks please contact us on [Discord](https://discord.snapshot.org) in this [#helpdesk thread](https://discord.com/channels/707079246388133940/1061160799407702029/1061160799407702029). You will need to provide an **URL** to receive the webhook request.\n\n### Test a webhook\n\nYou can use this URL [https://webhook.snapshot.org/api/test?url=https://example.com](https://webhook.snapshot.org/api/test?url=https://example.com) and change example.com with your own endpoint to trigger a test callback.\n"
},
{
"id": 9,
"content": "---\ndescription: >-\n Learn how you can integrate Snapshot into your product, query our APIs or set\n up webhooks and notifications.\n---\n\n# Tools overview\n\n<table data-view='cards'><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type='content-ref'></th></tr></thead><tbody><tr><td><h3>Snapshot.js</h3></td><td>Use Snapshot's javascript library to integrate features like space and proposal creation, voting, and more in your product.</td><td></td><td><a href='snapshot.js.md'>snapshot.js.md</a></td></tr><tr><td><h3>GraphQL API</h3></td><td>Query the GraphQL API exposing Snapshot's data like information about spaces, proposals, voting, and more.</td><td></td><td><a href='graphql-api.md'>graphql-api.md</a></td></tr><tr><td><h3>Webhooks</h3></td><td>Set up a webhook to receive notifications about specific events to your endpoint.</td><td></td><td></td></tr><tr><td><h3>Bots</h3></td><td>Use automated bots to get notified about proposals on Snapshot.</td><td></td><td></td></tr></tbody></table>\n\n###\n\n"
},
{
"id": 10,
"content": "---\ndescription: >-\n The official JavaScript client for implementing Snapshot's functionality in\n other apps.\n---\n\n# Snapshot.js\n\n## **Overview**\n\n**`Snapshot.js`** is an open source JavaScript client which comes with the core functions of the Snapshot's off-chain voting system. It was designed to work both in the browser and with `Node.js`.\n\n{% embed url='https://github.com/snapshot-labs/snapshot.js' %}\n\n## Get started\n\n### **Installation**\n\n**Node.js**\n\nTo install Snapshot.js on Node.js, open your terminal and run:\n\n```shell\nnpm i @snapshot-labs/snapshot.js\n```\n\n**Browser**\n\nYou can create an index.html file and include Snapshot.js with:\n\n```html\n<script src='https://cdn.jsdelivr.net/npm/@snapshot-labs/snapshot.js'></script>\n```\n\n### Development\n\n**Install dependencies**\n\n```shell\nyarn\n```\n\n**Build package**\n\n```shell\nyarn build\n```\n\n## Usage\n\n#### Base features\n\n#### Init client\n\n```javascript\nimport snapshot from '@snapshot-labs/snapshot.js';\n\nconst hub = 'https://hub.snapshot.org'; // or https://testnet.snapshot.org for testnet\nconst client = new snapshot.Client712(hub);\n```\n\n#### Cast a vote\n\n```javascript\nimport { Web3Provider } from '@ethersproject/providers';\n\nconst web3 = new Web3Provider(window.ethereum);\nconst [account] = await web3.listAccounts();\n\nconst receipt = await client.vote(web3, account, {\n space: 'yam.eth',\n proposal: '0x21ea31e896ec5b5a49a3653e51e787ee834aaf953263144ab936ed756f36609f',\n type: 'single-choice',\n choice: 1,\n reason: 'Choice 1 make lot of sense',\n app: 'my-app'\n});\n```\n\n#### Create proposal\n\n```javascript\nimport { Web3Provider } from '@ethersproject/providers';\n\nconst web3 = new Web3Provider(window.ethereum);\nconst [account] = await web3.listAccounts();\n\nconst receipt = await client.proposal(web3, account, {\n space: 'yam.eth',\n type: 'single-choice', // define the voting system\n title: 'Test proposal using Snapshot.js',\n body: 'This is the content of the proposal',\n choices: ['Alice', 'Bob', 'Carol'],\n start: 1636984800,\n end: 1637244000,\n snapshot: 13620822,\n network: '1',\n plugins: JSON.stringify({}),\n app: 'my-app' // provide the name of your project which is using this snapshot.js integration\n});\n```\n\n#### **Create or edit a space**\n\n```javascript\nimport { Web3Provider } from '@ethersproject/providers';\n\nconst web3 = new Web3Provider(window.ethereum);\nconst [account] = await web3.listAccounts();\n\nconst receipt = await client.space(web3, account, {\n 'space':'pistachiodao.eth',\n 'settings':{\n 'name':'pistachiodao.eth',\n 'network':'1',\n 'symbol':'XYZ',\n 'private':false,\n 'members':[],\n 'admins':[],\n 'categories':[\n 'social',\n 'media'\n ],\n 'plugins':{\n 'hal':{}\n },\n 'children':[],\n 'voting':{\n 'hideAbstain':false\n },\n 'strategies':[{\n 'name':'ticket',\n 'network':'1',\n 'params':{'symbol':'TICKET'}\n }], // provide up to 8 strategies with their configuration\n 'validation':{\n 'name':'basic',\n 'params':{}\n },\n 'voteValidation':{\n 'name':'any',\n 'params':{}\n },\n 'filters':{\n 'minScore':0,\n 'onlyMembers':false\n },\n 'treasuries':[] // provide the organization's treasury account(s)\n }\n});\n```\n\n#### Join a space\n\n```javascript\nimport { Web3Provider } from '@ethersproject/providers';\n\nconst web3 = new Web3Provider(window.ethereum);\nconst [account] = await web3.listAccounts();\n\nconst receipt = await client.follow(web3, account, {\n 'name':'pistachiodao.eth'\n});\n```\n\n### **Utils**\n\n#### **getScores**\n\nCalculate voting power for a list of voters.\n\n```javascript\nimport snapshot from '@snapshot-labs/snapshot.js';\n\nconst space = 'yam.eth';\nconst strategies = [\n {\n name: 'erc20-balance-of',\n params: {\n address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n symbol: 'DAI',\n decimals: 18\n }\n }\n];\nconst network = '1';\nconst voters = [\n '0xa478c2975ab1ea89e8196811f51a7b7ade33eb11',\n '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7',\n '0x1E1A51E25f2816335cA436D65e9Af7694BE232ad'\n];\nconst blockNumber = 11437846;\n\nsnapshot.utils.getScores(\n space,\n strategies,\n network,\n voters,\n blockNumber\n).then(scores => {\n console.log('Scores', scores);\n});\n```\n\n#### **getProvider**\n\nReturn a Ethers.js JsonRPCProvider connected to an archive node.\n\n```javascript\nimport snapshot from '@snapshot-labs/snapshot.js';\n\nconst network = '1';\nconst provider = snapshot.utils.getProvider(network);\n```\n\n"
},
{
"id": 11,
"content": "---\ndescription: >-\n You can use the GraphQL API to create flexible queries for the data you need\n to integrate with Snapshot.\n---\n\n# GraphQL API\n\n## Explorer\n\nYou can run queries on Snapshot data using a GraphQL Explorer. \n\nWe have exposed an integrated development environment in the browser that includes docs, syntax highlighting, and validation errors. Click the link below to access the interface. \n\n{% embed url='https://hub.snapshot.org/graphql' %}\n\n![](<../.gitbook/assets/image (3) (3) (1).png>)\n\n## Endpoints\n\nProduction hub\n\n```\nhttps://hub.snapshot.org/graphql\n```\n\nDemo hub\n\n```\nhttps://testnet.snapshot.org/graphql\n```\n\n## Queries\n\n### Get a single space <a href='#space' id='space'></a>\n\n#### Arguments\n\nid `string`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n space(id: 'yam.eth') {\n id\n name\n about\n network\n symbol\n members\n }\n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'space': {\n 'id': 'yam.eth',\n 'name': 'Yam Finance',\n 'about': '',\n 'network': '1',\n 'symbol': 'YAM',\n 'members': [\n '0x683A78bA1f6b25E29fbBC9Cd1BFA29A51520De84',\n '0x9Ebc8AD4011C7f559743Eb25705CCF5A9B58D0bc',\n '0xC3edCBe0F93a6258c3933e86fFaA3bcF12F8D695',\n '0xbdac5657eDd13F47C3DD924eAa36Cf1Ec49672cc',\n '0xEC3281124d4c2FCA8A88e3076C1E7749CfEcb7F2'\n ]\n }\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.org/graphql?query=query%20%7B%0A%20%20space\\(id%3A%20%22yam.eth%22\\)%20%7B%0A%20%20%20%20id%0A%20%20%20%20name%0A%20%20%20%20about%0A%20%20%20%20network%0A%20%20%20%20symbol%0A%20%20%20%20members%0A%20%20%7D%0A%7D)\n\n### Get multiple spaces <a href='#spaces' id='spaces'></a>\n\n#### Arguments\n\nfirst `number`\\\nskip `number`\\\nwhere:\\\n  \\- id`string`\\\n  \\- id\\_in`array`\\\norderBy `string`\\\norderDirection `asc` or `desc`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n spaces(\n first: 20,\n skip: 0,\n orderBy: 'created',\n orderDirection: asc\n ) {\n id\n name\n about\n network\n symbol\n strategies {\n name\n params\n }\n admins\n members\n filters {\n minScore\n onlyMembers\n }\n plugins\n }\n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'spaces': [\n {\n 'id': 'bonustrack.eth',\n 'name': 'Fabien',\n 'about': '',\n 'network': '1',\n 'symbol': 'TICKET',\n 'strategies': [\n {\n 'name': 'erc20-balance-of',\n 'params': {\n 'symbol': 'DAI',\n 'address': '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n 'decimals': 18\n }\n }\n ],\n 'admins': [],\n 'members': [\n '0x24A12Fa313F57aF541d447c594072A992c605DCf'\n ],\n 'filters': {\n 'minScore': 0,\n 'onlyMembers': false\n },\n 'plugins': {\n 'quorum': {\n 'total': 500,\n 'strategy': 'static'\n }\n }\n }\n ]\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.org/graphql?query=%0Aquery%20Spaces%20%7B%0A%20%20spaces\\(%0A%20%20%20%20first%3A%2020%2C%0A%20%20%20%20skip%3A%200%2C%0A%20%20%20%20orderBy%3A%20%22created%22%2C%0A%20%20%20%20orderDirection%3A%20asc%0A%20%20\\)%20%7B%0A%20%20%20%20id%0A%20%20%20%20name%0A%20%20%20%20about%0A%20%20%20%20network%0A%20%20%20%20symbol%0A%20%20%20%20strategies%20%7B%0A%20%20%20%20%20%20name%0A%20%20%20%20%20%20params%0A%20%20%20%20%7D%0A%20%20%20%20admins%0A%20%20%20%20members%0A%20%20%20%20filters%20%7B%0A%20%20%20%20%20%20minScore%0A%20%20%20%20%20%20onlyMembers%0A%20%20%20%20%7D%0A%20%20%20%20plugins%0A%20%20%7D%0A%7D)\n\n### Get a single proposal <a href='#proposal' id='proposal'></a>\n\n#### Arguments <a href='#arguments' id='arguments'></a>\n\nid `string`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n proposal(id:'QmWbpCtwdLzxuLKnMW4Vv4MPFd2pdPX71YBKPasfZxqLUS') {\n id\n title\n body\n choices\n start\n end\n snapshot\n state\n author\n created\n scores\n scores_by_strategy\n scores_total\n scores_updated\n plugins\n network\n strategies {\n name\n network\n params\n }\n space {\n id\n name\n }\n }\n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'proposal': {\n 'id': 'QmWbpCtwdLzxuLKnMW4Vv4MPFd2pdPX71YBKPasfZxqLUS',\n 'title': 'Select Initial Umbrella Metapool',\n 'body': 'Eventually, we hope that anyone will be able to create a metapool and fund a protection market for their project, but right now we want to start small and pick one pool that we will debut as a beta launch for Umbrella that will help us gather information and insight into the state of the market. In the future we can have all of these and more. Here are the choices:\\n### Option 1: BlueChips MetaPool\\n\\nYou might consider this the safest of the pools. It contains a collection of different “blue-chip projects” across multiple verticals that have proven track records and are considered industry leaders. These include:\\n\\n* (3) Bluechip protocols: MakerDAO, Compound, and Uniswap. These are commonly seen as the most battletested and trusted DeFi projects on Ethereum.\\n* (2) Centralized exchanges: Coinbase and Binance. These are the most popular and generally considered to be most reputable exchanges around. *note: Payout occurs only if Safu funds or the exchange’s insurance do not cover losses.\\n* (2) Hardware Wallet companies, Ledger and Trezor, including the Ledger Nano S and X, and the Trezor Model T and One. This would cover large scale exploits in their hardware or firmware and would not cover individual loss due to phishing or poor security.\\n\\n### Option 2: Hot New Projects MetaPool\\n\\nThis pool targets newer projects on Ethereum that are considered reputable and have high TVL but are less battle tested and therefore may be more risky. While they may be more risky, this may mean that there is more demand for coverage for them in the market. This list is preliminary but internal discussions considered including:\\n\\n * Alchemix\\n* OHM\\n* Liquity\\n* FEI\\n* Integral\\n* Reflexer\\n\\n### Option 3: Integrated DegenV2 MetaPool\\n\\nThis last option focuses more closely on YAM products, specifically DegenV2 and the constituent protocols that it uses. This option would let us insure our own users and potentially test out our products in a more limited environment. The covered protocols would be:\\n\\n * UMA\\n * Sushiswap/Uniswap depending on where our pools live\\n * Any YAM contracts that are used\\n * Any future contracts included in future versions of Degen.\\n\\n### Choose wisely!\\n',\n 'choices': [\n 'Option 1: BlueChips MetaPool',\n 'Option 2: Hot New Projects MetaP',\n 'Option 3: Integrated DegenV2 Met'\n ],\n 'start': 1620676800,\n 'end': 1620806400,\n 'snapshot': '12408670',\n 'state': 'closed',\n 'author': '0xEC3281124d4c2FCA8A88e3076C1E7749CfEcb7F2',\n 'space': {\n 'id': 'yam.eth',\n 'name': 'Yam Finance'\n }\n }\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.org/graphql?operationName=Proposal\\&query=query%20Proposal%20%7B%0A%20%20proposal\\(id%3A%22QmWbpCtwdLzxuLKnMW4Vv4MPFd2pdPX71YBKPasfZxqLUS%22\\)%20%7B%0A%20%20%20%20id%0A%20%20%20%20title%0A%20%20%20%20body%0A%20%20%20%20choices%0A%20%20%20%20start%0A%20%20%20%20end%0A%20%20%20%20snapshot%0A%20%20%20%20state%0A%20%20%20%20author%0A%20%20%20%20space%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%20%20name%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D)\n\n### Get proposals <a href='#proposals' id='proposals'></a>\n\n#### Arguments\n\nfirst `number`\\\nskip `number`\\\nwhere:\\\n  \\- id`string`\\\n  \\- id\\_in`array`\\\n  \\- space:`string`\\\n  \\- space\\_in:`array`\\\n  \\- author:`string`\\\n  \\- author\\_in:`array`\\\n  \\- network: `string`\\\n  \\- network\\_in: `array`\\\n  \\- state: `array`\\\norderBy `string`\\\norderDirection `asc` or `desc`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n proposals (\n first: 20,\n skip: 0,\n where: {\n space_in: ['yam.eth'],\n state: 'closed'\n },\n orderBy: 'created',\n orderDirection: desc\n ) {\n id\n title\n body\n choices\n start\n end\n snapshot\n state\n scores\n scores_by_strategy\n scores_total\n scores_updated\n author\n space {\n id\n name\n }\n }\n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'proposals': [\n {\n 'id': 'QmWbpCtwdLzxuLKnMW4Vv4MPFd2pdPX71YBKPasfZxqLUS',\n 'title': 'Select Initial Umbrella Metapool',\n 'body': 'Eventually, we hope that anyone will be able to create a metapool and fund a protection market for their project, but right now we want to start small and pick one pool that we will debut as a beta launch for Umbrella that will help us gather information and insight into the state of the market. In the future we can have all of these and more. Here are the choices:\\n### Option 1: BlueChips MetaPool\\n\\nYou might consider this the safest of the pools. It contains a collection of different “blue-chip projects” across multiple verticals that have proven track records and are considered industry leaders. These include:\\n\\n* (3) Bluechip protocols: MakerDAO, Compound, and Uniswap. These are commonly seen as the most battletested and trusted DeFi projects on Ethereum.\\n* (2) Centralized exchanges: Coinbase and Binance. These are the most popular and generally considered to be most reputable exchanges around. *note: Payout occurs only if Safu funds or the exchange’s insurance do not cover losses.\\n* (2) Hardware Wallet companies, Ledger and Trezor, including the Ledger Nano S and X, and the Trezor Model T and One. This would cover large scale exploits in their hardware or firmware and would not cover individual loss due to phishing or poor security.\\n\\n### Option 2: Hot New Projects MetaPool\\n\\nThis pool targets newer projects on Ethereum that are considered reputable and have high TVL but are less battle tested and therefore may be more risky. While they may be more risky, this may mean that there is more demand for coverage for them in the market. This list is preliminary but internal discussions considered including:\\n\\n * Alchemix\\n* OHM\\n* Liquity\\n* FEI\\n* Integral\\n* Reflexer\\n\\n### Option 3: Integrated DegenV2 MetaPool\\n\\nThis last option focuses more closely on YAM products, specifically DegenV2 and the constituent protocols that it uses. This option would let us insure our own users and potentially test out our products in a more limited environment. The covered protocols would be:\\n\\n * UMA\\n * Sushiswap/Uniswap depending on where our pools live\\n * Any YAM contracts that are used\\n * Any future contracts included in future versions of Degen.\\n\\n### Choose wisely!\\n',\n 'choices': [\n 'Option 1: BlueChips MetaPool',\n 'Option 2: Hot New Projects MetaP',\n 'Option 3: Integrated DegenV2 Met'\n ],\n 'start': 1620676800,\n 'end': 1620806400,\n 'snapshot': '12408670',\n 'state': 'closed',\n 'author': '0xEC3281124d4c2FCA8A88e3076C1E7749CfEcb7F2',\n 'space': {\n 'id': 'yam.eth',\n 'name': 'Yam Finance'\n }\n },\n ...\n ]\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.org/graphql?operationName=Proposals\\&query=query%20Proposals%20%7B%0A%20%20proposals%20\\(%0A%20%20%20%20first%3A%2020%2C%0A%20%20%20%20skip%3A%200%2C%0A%20%20%20%20where%3A%20%7B%0A%20%20%20%20%20%20space\\_in%3A%20%5B%22yam.eth%22%5D%2C%0A%20%20%20%20%20%20state%3A%20%22closed%22%0A%20%20%20%20%7D%2C%0A%20%20%20%20orderBy%3A%20%22created%22%2C%0A%20%20%20%20orderDirection%3A%20desc%0A%20%20\\)%20%7B%0A%20%20%20%20id%0A%20%20%20%20title%0A%20%20%20%20body%0A%20%20%20%20choices%0A%20%20%20%20start%0A%20%20%20%20end%0A%20%20%20%20snapshot%0A%20%20%20%20state%0A%20%20%20%20author%0A%20%20%20%20space%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%20%20name%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D)\n\n### Get a single vote <a href='#vote' id='vote'></a>\n\n{% hint style='warning' %}\nChoices are indexed 1-based. The first choice has index 1.\n{% endhint %}\n\n#### Arguments <a href='#arguments' id='arguments'></a>\n\nid `string`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n vote (\n id: 'QmeU7ct9Y4KLrh6F6mbT1eJNMkeQKMSnSujEfMCfbRLCMp'\n ) {\n id\n voter\n vp\n vp_by_strategy\n vp_state\n created\n proposal {\n id\n }\n choice\n space {\n id\n }\n }\n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'vote': {\n 'id': 'QmeU7ct9Y4KLrh6F6mbT1eJNMkeQKMSnSujEfMCfbRLCMp',\n 'voter': '0x96176C25803Ce4cF046aa74895646D8514Ea1611',\n 'created': 1621183227,\n 'proposal': {\n 'id': 'QmPvbwguLfcVryzBRrbY4Pb9bCtxURagdv1XjhtFLf3wHj'\n },\n 'choice': 1,\n 'space': {\n 'id': 'spookyswap.eth'\n }\n }\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.org/graphql?operationName=Vote\\&query=query%20Vote%20%7B%0A%20%20vote%20\\(%0A%20%20%20%20id%3A%20%22QmeU7ct9Y4KLrh6F6mbT1eJNMkeQKMSnSujEfMCfbRLCMp%22%0A%20%20\\)%20%7B%0A%20%20%20%20id%0A%20%20%20%20voter%0A%20%20%20%20created%0A%20%20%20%20proposal%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%7D%0A%20%20%20%20choice%0A%20%20%20%20space%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D)\n\n### Get votes <a href='#votes' id='votes'></a>\n\n{% hint style='warning' %}\nChoices are indexed 1-based. The first choice has index 1.\n{% endhint %}\n\n#### Arguments\n\nfirst `number`\\\nskip `number`\\\nwhere:\\\n  \\- id`string`\\\n  \\- id\\_in`array`\\\n  \\- space:`string`\\\n  \\- space\\_in:`array`\\\n  \\- voter:`string`\\\n  \\- voter\\_in:`array`\\\n  \\- proposal: `string`\\\n  \\- proposal\\_in: `array`\\\norderBy `string`\\\norderDirection `asc` or `desc`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n votes (\n first: 1000\n skip: 0\n where: {\n proposal: 'QmPvbwguLfcVryzBRrbY4Pb9bCtxURagdv1XjhtFLf3wHj'\n }\n orderBy: 'created',\n orderDirection: desc\n ) {\n id\n voter\n vp\n vp_by_strategy\n vp_state\n created\n proposal {\n id\n }\n choice\n space {\n id\n }\n }\n}\n\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'votes': [\n {\n 'id': 'QmeU7ct9Y4KLrh6F6mbT1eJNMkeQKMSnSujEfMCfbRLCMp',\n 'voter': '0x96176C25803Ce4cF046aa74895646D8514Ea1611',\n 'created': 1621183227,\n 'proposal': {\n 'id': 'QmPvbwguLfcVryzBRrbY4Pb9bCtxURagdv1XjhtFLf3wHj'\n },\n 'choice': 1,\n 'space': {\n 'id': 'spookyswap.eth'\n }\n },\n {\n 'id': 'QmZ2CV86QH6Q6z7L6g7yJWS3HfgD9aQ3uTYYMXkMa5trHf',\n 'voter': '0x2686EaD94C5042e56a41eDde6533711a4303CC52',\n 'created': 1621181827,\n 'proposal': {\n 'id': 'QmPvbwguLfcVryzBRrbY4Pb9bCtxURagdv1XjhtFLf3wHj'\n },\n 'choice': 1,\n 'space': {\n 'id': 'spookyswap.eth'\n }\n },\n ...\n ]\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.org/graphql?operationName=Votes\\&query=query%20Votes%20%7B%0A%20%20votes%20\\(%0A%20%20%20%20first%3A%201000%0A%20%20%20%20skip%3A%200%0A%20%20%20%20where%3A%20%7B%0A%20%20%20%20%20%20proposal%3A%20%22QmPvbwguLfcVryzBRrbY4Pb9bCtxURagdv1XjhtFLf3wHj%22%0A%20%20%20%20%7D%0A%20%20%20%20orderBy%3A%20%22created%22%2C%0A%20%20%20%20orderDirection%3A%20desc%0A%20%20\\)%20%7B%0A%20%20%20%20id%0A%20%20%20%20voter%0A%20%20%20%20created%0A%20%20%20%20proposal%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%7D%0A%20%20%20%20choice%0A%20%20%20%20space%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A)\n\n### Get voting power\n\n#### Arguments\n\nvoter `string`\\\nspace `string`\\\nproposal `string`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n vp (\n voter: '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7'\n space: 'fabien.eth'\n proposal: '0x4903dd16990de740b7dc7effe1a0bc8bd49a510a04992bc30596c9a0d0f69455'\n ) {\n vp\n vp_by_strategy\n vp_state\n } \n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```\n{\n 'data': {\n 'vp': {\n 'vp': 1,\n 'vp_by_strategy': [\n 1\n ],\n 'vp_state': 'final'\n }\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.org/graphql?query=query%20%7B%0A%20%20vp%20\\(%0A%20%20%20%20voter%3A%20%220xeF8305E140ac520225DAf050e2f71d5fBcC543e7%22%0A%20%20%20%20space%3A%20%22fabien.eth%22%0A%20%20%20%20proposal%3A%20%220x4903dd16990de740b7dc7effe1a0bc8bd49a510a04992bc30596c9a0d0f69455%22%0A%20%20\\)%20%7B%0A%20%20%20%20vp%0A%20%20%20%20vp\\_by\\_strategy%0A%20%20%20%20vp\\_state%0A%20%20%7D%20%0A%7D%0A)\n\n### Get follows <a href='#follows' id='follows'></a>\n\n#### Arguments\n\nfirst `number`\\\nskip `number`\\\nwhere:\\\n  \\- id`string`\\\n  \\- id\\_in`array`\\\n  \\- space:`string`\\\n  \\- space\\_in:`array`\\\n  \\- follower:`string`\\\n  \\- follower\\_in:`array`\\\norderBy `string`\\\norderDirection `asc` or `desc`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n follows(\n first: 10,\n where: {\n follower: '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7'\n }\n ) {\n follower\n space {\n id\n }\n created\n }\n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'follows': [\n {\n 'follower': '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7',\n 'space': {\n 'id': 'gnosis.eth'\n },\n 'created': 1629732280\n },\n {\n 'follower': '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7',\n 'space': {\n 'id': 'aavegotchi.eth'\n },\n 'created': 1629725098\n },\n {\n 'follower': '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7',\n 'space': {\n 'id': 'yam.eth'\n },\n 'created': 1629723970\n },\n {\n 'follower': '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7',\n 'space': {\n 'id': 'balancer.eth'\n },\n 'created': 1629723960\n }\n ]\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.org/graphql?query=query%20%7B%0A%20%20follows\\(%0A%20%20%20%20first%3A%2010%2C%0A%20%20%20%20where%3A%20%7B%0A%20%20%20%20%20%20follower%3A%20%220xeF8305E140ac520225DAf050e2f71d5fBcC543e7%22%0A%20%20%20%20%7D%0A%20%20\\)%20%7B%0A%20%20%20%20follower%0A%20%20%20%20space%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%7D%0A%20%20%20%20created%0A%20%20%7D%0A%7D)\n\n### Get users\n\n#### Arguments\n\nfirst `number`\\\nskip `number`\\\nwhere:\\\n  \\- id:`string`\\\n  \\- id\\_in:`array`\\\norderBy `string`\\\norderDirection `asc` or `desc`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n users(first: 10, where: { id_in: ['0xF78108c9BBaF466dd96BE41be728Fe3220b37119'] }) {\n id\n name\n about\n avatar\n }\n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```\n{\n 'data': {\n 'users': [\n {\n 'id': '0xF78108c9BBaF466dd96BE41be728Fe3220b37119',\n 'name': 'John Doe',\n 'about': 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Assumenda asperiores a quis accusamus tenetur sed',\n 'avatar': 'ipfs://QmNXTswsKJEHHEmGCgQKEAqbq3ib1eBCd4U8SRPgcuVJBX'\n }\n ]\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.org/graphql?query=query%20%7B%0A%20%20users\\(first%3A%2010%2C%20where%3A%20%7B%20id\\_in%3A%20%5B%220xF78108c9BBaF466dd96BE41be728Fe3220b37119%22%5D%20%7D\\)%20%7B%0A%20%20%20%20id%0A%20%20%20%20name%0A%20%20%20%20about%0A%20%20%20%20avatar%0A%20%20%7D%0A%7D%0A)\n\n### Aliases\n\nTBD\n\n### Get messages <a href='#messages' id='messages'></a>\n\nMessages are all the actions (votes, proposals, space settings etc..) that was confirmed on Snapshot, it also include the order on which these actions were confirmed with the field 'mci'. These messages can be used to replay the whole Snapshot hub API.\n\n#### Arguments\n\nfirst `number`\\\nskip `number`\\\nwhere:\\\n  \\- timestamp`string`\\\n  \\- space`array`\\\n  \\- space\\_in:`array`\\\n  \\- type:`string`\\\n  \\- type\\_in:`string`\\\norderBy `string`\\\norderDirection `asc` or `desc`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n messages (\n first: 20\n where: { space: 'ens.eth' }\n orderBy: 'mci'\n orderDirection: desc\n ) {\n id\n address\n ipfs\n receipt\n type\n mci\n }\n}\n\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'messages': [\n {\n 'id': '0x7d99e11ffe3a333229bdcda59866bc5b66b0b7e5c4b5353862a3b8ccbfa26c83',\n 'address': '0xdbB1740e424C41E935599634828f5E5c4dF23D43',\n 'ipfs': 'bafkreiduchkd35btpv3uttrg3f2kx3g52uh44tiruawip6xlgvjbcuo4w4',\n 'receipt': '0xaa4d557085872ed82b8bfba5af4247650395eda46ed61672d940eabc74bcde67415db974361f4b24361565d2f9ee6ee636ae935a1dc830c207204ea29ad498741b',\n 'type': 'follow'\n 'mci': 1345000\n },\n ...\n ]\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.org/graphql?query=query%20%7B%0A%20%20messages%20\\(%0A%20%20%20%20first%3A%2020%0A%20%20%20%20where%3A%20%7B%20space%3A%20%22ens.eth%22%20%7D%0A%20%20%20%20orderBy%3A%20%22timestamp%22%0A%20%20%20%20orderDirection%3A%20desc%0A%20%20\\)%20%7B%0A%20%20%20%20id%0A%20%20%20%20address%0A%20%20%20%20ipfs%0A%20%20%20%20receipt%0A%20%20%20%20type%0A%20%20%7D%0A%7D%0A)\n"
},
{
"id": 12,
"content": "---\ndescription: Setup a bot to receive Snapshot notifications.\n---\n\n# Bots\n\nSnapshot has several bot integrations which can be set up for your organization in order to receive Snapshot specific notifications.\n\nHave a look at the list below to see what is currently possible:\n\n### Snapshot Discord bot\n\n**For:** Discord\\\n**Status:** Ready\\\n**Install:** Invite the Discord bot with this link: [https://discord.com/oauth2/authorize?client\\_id=892847850780762122\\&permissions=83968\\&scope=bot](https://discord.com/oauth2/authorize?client\\_id=892847850780762122\\&permissions=83968\\&scope=bot) \n\nType `/` to see the commands (require administrator role)\n\nNeed help? Ask on [Discord](https://discord.gg/snapshot)  \n\n### HAL\n\n**For:** Discord, Telegram, Twitter, Email, Slack, Webhook\\\n**Status:** Ready (for all spaces)\\\n**Install:** [https://9000.hal.xyz/recipes/snapshot-follow-new-proposals](https://9000.hal.xyz/recipes/snapshot-follow-new-proposals)\n\n### propbot\n\n**For:** Twitter\\\n**Status:** Ready\\\n**Install:** [https://twitter.com/proposalbot](https://twitter.com/proposalbot)\n\n### Boto\n\n**For:** Telegram\\\n**Status:** Ready\\\n**Install:** [https://medium.com/boto-corp/telegram-bot-for-snapshot-no-code-353e7f3e2dc8](https://medium.com/boto-corp/telegram-bot-for-snapshot-no-code-353e7f3e2dc8)\n\n{% hint style='info' %}\nIf you would like to set up another bot integration contact us on [Discord](https://discord.snapshot.org) with the details!\n{% endhint %}\n"
},
{
"id": 13,
"content": "---\ndescription: Create your own space on Snapshot!\n---\n\n# Create a space\n\n## **1: Fork Snapshot spaces repository here**\n\n{% embed url='https://github.com/bonustrack/snapshot-spaces' caption='' %}\n\n## **2: Copy the space example folder**\n\n{% embed url='https://github.com/bonustrack/snapshot-spaces/tree/master/spaces/example' caption='' %}\n\n```text\n|-- spaces\n |-- example\n |-- index.json\n |-- logo.png\n |-- skin.scss\n |-- space.png\n```\n\n## **3: Change your space metadata**\n\n* The name of the folder must be the key of your space.\n* This key also corresponds to the slug url and must not be composed with uppercase characters. `'key': 'example'` to `'key': 'my-space'`\n\n`index.json`\n\n```javascript\n{\n 'key': 'example', // This will be the url of your space\n 'name': 'Example', // Name of the space (max 12 chars)\n 'chainId': 1, // ID of the blockchain network\n 'decimals': 18, // Number of decimals in the token\n 'symbol': 'EXAMPLE', // Symbol of the base token\n 'defaultView': 'core', // The default tab to see in your space\n 'address': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // The address of the base token\n 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // The same address of the base token\n 'core': [ // List of official addresses that can post in 'Core' tab of your space\n '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7'\n ],\n 'min': 123, // Minimum balance to have from the base token to have your proposal visible in the space (unless the address is a core address)\n 'invalid': [\n 'QmXAZP8tYwX2zZz5EzfxLZUYJt6TM9EmxY1L4qodhZ5zcZ'\n ] // List of proposal ids, use this to remove a proposal from your space\n}\n```\n\n## **4: Add a logo and space images**\n\n* You must add both `logo.png` and `space.png` images for your space with a size of 256 x 256 pixels.\n* The file size should not exceed `50KB`.\n\n## **5: Create a skin \\(optional\\)**\n\n* If you want the default skin you can delete the file `skin.scss`.\n* If you want a skin you can change colors in the file `skin.scss` and change the `.name` to the id of your space. `.name` to `.my-space`\n\n`skin.scss`\n\n```css\n.name {\n --primary-color: #384aff;\n --bg-color: white;\n --text-color: #586069;\n --link-color: #111111;\n --heading-color: #111111;\n --border-color: #d1d5da;\n --header-bg: white;\n --block-bg: transparent;\n}\n```\n\n## **6: Make a pull request**\n\n* Please name your PR title on the model `Add SYMBOL space`\n* It may take 1 or 2 days to get your PR reviewed , merged and appear on Snapshot.\n\n"
},
{
"id": 14,
"content": "---\ndescription: Avatars are optional.\n---\n\n# Add an avatar\n\nTo get a logo for your space, images you need to do a pull request on this repository:\n\n{% embed url='https://github.com/snapshot-labs/snapshot-spaces' %}\n\n#### Follow the Snapshot spaces directory tree\n\n```bash\n└── spaces\n └── my-space.eth\n ├── logo.png\n └── space.png \n```\n\n### **Add your space logo and strategy image\\(s\\)**\n\nYou will need to create a folder with the id of your space \\(example: 'my-space.eth'\\). In this folder you need a file 'space.png' and 'logo.png' \\(for the first strategy\\) and 'logo1.png' if you have a second strategy.\n\n{% hint style='danger' %}\nAll the images must be squared and less than 50kb.\n{% endhint %}\n\n{% hint style='info' %}\nAfter committing your PR, you will have to wait for the merge of your PR to be able to see your images live. This process can take a few hours.\n{% endhint %}\n\n"
},
{
"id": 15,
"content": "---\ndescription: Combine Gnosis Safe with Snapshot using oSnap.\n---\n\n# SafeSnap - oSnap\n\n“oSnap” is short for Optimistic Snapshot Execution. oSnap lets DAOs propose transactions, do an off-chain governance vote, and have the transaction data submitted in a trustless fashion.\n\n## Instructions for using oSnap: <a href='#e132' id='e132'></a>\n\n<figure><img src='../.gitbook/assets/UMA-oSnap.png' alt=''><figcaption></figcaption></figure>\n\nSetting up the oSnap module:\n* Create a Safe and Snapshot Space, or connect to your current accounts. \n* Go to Safe Apps, install the Zodiac app, and install the oSnap module through Zodiac.\n* Set the proposal bond, challenge period, and Snapshot Space.\n* Link the oSnap module to your Snapshot Space with SafeSnap.\n* Your oSnap module address is added to the SafeSnap plugin configuration to enforce the results of proposals on-chain.\n\nUsing oSnap with Snapshot:\n* Create a proposal and Snapshot vote, along with the transactions to execute if the proposal passes.\n* Invite the community to vote on the proposal.\n* Once the Snapshot voting period ends, anyone can propose the transactions by posting a bond.\n* After the challenge period, execute the transactions on-chain through the Snapshot interface.\n\n## Tutorials\n\nVideo tutorial on how to deploy and use an oSnap module:\n\n{% embed url='https://www.youtube.com/watch?v=R97GIW5M_r0&t=2s' %}\n\nFollow the oSnap documentation on how to set up an oSnap module for your project.\n\nDeployment tutorial using the Zodiac module:\n\n{% embed url='https://docs.uma.xyz/developers/osnap/osnap-deployment-tutorial' %}\n\nSnapshot tutorial to configure and execute transactions with Snapshot proposals:\n\n{% embed url='https://docs.uma.xyz/developers/osnap/snapshot-tutorial' %}\n\nAn overview on verifying and disputing proposed transactions:\n\n{% embed url='https://docs.uma.xyz/developers/osnap/osnap-proposal-verification' %}\n\nUpdating the oSnap using admin functions:\n\n{% embed url='https://docs.uma.xyz/developers/osnap/osnap-module-admin-functions' %}\n\n## Security recommendations\n\nIn order to ensure maximal safety we recommend to define several paremeters for your oSnap setup:\n\n* Set a **substantial bond** for an answer\n* Select a **long challenge period**\n* Set up a **monitoring infrastructure** for proposed transactions\n\n## Additional resources\n\nLearn more about oSnap here:\n\n{% embed url='https://docs.uma.xyz/developers/osnap' %}\n\n{% embed url='https://medium.com/uma-project/announcing-osnap-gasless-snapshot-voting-with-on-chain-execution-by-uma-7374ed729b28' %}\n\n"
},
{
"id": 16,
"content": "---\ndescription: Submit your vote on a proposal.\n---\n\n# Vote on a proposal\n\n1. Go to your project's snapshot.page\n2. Click on “Connect wallet” button in top right corner \n3. Connect with wallet provider where you hold relevant token\n4. Click on the option you want to vote for \n5. Sign the message via your wallet and done\n\n"
},
{
"id": 17,
"content": "# Migrate your space to ENS\n\n### 1. Create a space with ENS\n\nTo migrate your space you will need first to create the space with ENS. \n \nYou can use this url to get your previous space settings populated in the form: https://snapshot.page/\\#/**<ens\\_space\\_id>**/settings/**<previous\\_space\\_id>** \nExample: https://snapshot.page/\\#/**yam.eth**/settings/**yam**\n\n{% page-ref page='create-a-space.md' %}\n\n### 2. Declare your new space alias\n\nTo add your new space alias you need to do a pull request on this repository:\n\n{% embed url='https://github.com/snapshot-labs/snapshot-spaces' %}\n\n#### Follow the Snapshot spaces directory tree\n\n```bash\n└── spaces\n └── aliases.json\n```\n\nYou must add your new alias in the [aliases.json file](https://github.com/snapshot-labs/snapshot-spaces/blob/master/spaces/aliases.json) by following this example.\n\n```javascript\n{\n 'my-space': 'my-space.eth'\n}\n```\n\n### 3. Migrate proposals, votes and urls\n\nThe migration of the proposals, votes and urls is done manually, once your space with ENS is ready please contact an admin on [Discord](https://discord.snapshot.page) to do the changes.\n\n"
},
{
"id": 18,
"content": "---\ndescription: Please ask the team for validating a custom domain\n---\n\n# Custom domain\n\n## **1: Add the domain here**\n\n[https://github.com/bonustrack/snapshot-spaces/blob/master/spaces/domains.json](https://github.com/bonustrack/snapshot-spaces/blob/master/spaces/domains.json)\n\n`domains.json`\n\n```javascript\n{\n 'my.custom.url': 'my-space-key'\n}\n```\n\n{% hint style='info' %}\nCheck that you have the `domain` field in the `index.json` file of your space following the documentation to create a space in the paragraph[ **Space metadata**](../archived/create-a-space-github.md#3-space-metadata).\n{% endhint %}\n\n## **2: Configure the DNS**\n\nYou will need to add this as CNAME in your domain DNS `snapshotpage.b-cdn.net`\n\n"
},
{
"id": 19,
"content": "---\ndescription: 'To create a space in Snapshot it''s easy, just follow these steps.'\n---\n\n# Create a space with ENS\n\n{% hint style='warning' %}\n**If you already have a space see how to** [**Migrate your space to ENS**](migrate-your-space-to-ens.md)**.**\n{% endhint %}\n\n## 1. Get an ENS domain for your space\n\nIf you don't have an ENS domain yet for your space you will need to register one. If you need help follow the registrar guide.\n\n**Register ENS domain** \n[https://app.ens.domains](https://app.ens.domains/)\n\n**DNS registrar guide** \n[https://docs.ens.domains/dns-registrar-guide](https://docs.ens.domains/dns-registrar-guide)\n\n## 2. Link your ENS domain to Snapshot with 'contenthash'\n\nOnce you have created your domain ENS, go on this url using your domain for space name. [https://snapshot.page/\\#/**my-space.eth**/settings](https://snapshot.page/#/my-space.eth/settings)\n\n{% hint style='info' %}\nChange **my-space.eth** with your ENS domain and **login** with the wallet owner of the domain name.\n\n**<your-address>** will automatically be replaced by your address when you log in.\n{% endhint %}\n\n![Set your Snapshot IPNS link.](../.gitbook/assets/capture-de-cran-2020-12-20-a-11.09.23.png)\n\nIf you are on your domain space and connected with your wallet copy the 'IPNS link' in the 'ENS' field and click on the button **Set record on ENS**, you will get redirected to ENS app.\n\nOn the ENS app click on **ADD/EDIT RECORD** and paste the 'IPNS link' in the 'CONTENT' field.\n\n![Add your Snapshot IPNS link.](../.gitbook/assets/image%20%283%29.png)\n\nClick **Confirm** and submit the change.\n\n![Confirm to link your ENS domain to Snapshot.](../.gitbook/assets/image%20%285%29.png)\n\n## **3. Setup your space settings**\n\nRefresh the Snapshot settings page [https://snapshot.page/\\#/my-space.eth/settings](https://snapshot.page/#/my-space.eth/settings). Now you can edit your space settings.\n\n### Profile\n\n* **Change avatar** to have your [logo and strategy images in your space](add-avatars.md#add-your-space-logo-and-strategy-image-s).\n* **Name** is the name that will be displayed in the snapshot application.\n* **Network** must be the network relative to your token.\n* **Symbol** is the main token symbol that will be displayed in your space. \n* **Skin** can be left as a default, used as an existing one or you can [create your own skin](add-a-skin.md#add-your-skin).\n* **Domain name** is optional but you can [add a custom domain](add-a-custom-domain.md#add-a-custom-domain).\n\n![Snapshot profile settings](../.gitbook/assets/capture-de-cran-2020-12-20-a-11.47.31.png)\n\n### **Strategies**\n\nYou need to add a voting strategy for your proposals. You can choose one by default and edit it by clicking on it to configure your own token in it or keep the default token. For more information on strategies, please refer to the [Strategies](../strategies.md) section.\n\n{% hint style='info' %}\nYou can add up to 3 strategies in your space.\n{% endhint %}\n\n![Edit strategies on Snapshot.](../.gitbook/assets/capture-de-cran-2020-12-20-a-12.19.09.png)\n\n### Members and Filters\n\n* **Members** are those who can create official proposals that will be displayed in the 'Core' tab. You can add as many addresses as you need, one per line.\n* **Default tab** is the one that will be displayed as the default for your space. For example `all` `core` or `community`\n* **Minimum score** is the minimum number of tokens required to create a proposal.\n* **Only members proposals** is used to allow only members to post proposals and can be set to `true` or `false`\n* **Invalids** are the proposals you want to hide from your space. You can add as many proposal ids as you need, one per line.\n\n![Configure the organisation and permissions of the proposals.](../.gitbook/assets/capture-de-cran-2020-12-20-a-12.25.49.png)\n\nClick **Save** and **sign settings message** on your wallet.\n\n![Save your Snapshot space settings.](../.gitbook/assets/capture-de-cran-2020-12-20-a-12.43.25.png)\n\nNow you are set! You can go on [https://snapshot.page/\\#/my-space.eth](https://snapshot.page/#/my-space.eth) to see your space.\n\n{% hint style='info' %}\nWhen you create or edit a space, it take about 3min to see the changes live.\n{% endhint %}\n\n## What you should do now**?**\n\n{% page-ref page='add-avatars.md' %}\n\n{% page-ref page='add-a-skin.md' %}\n\n{% page-ref page='add-a-custom-domain.md' %}\n\n"
},
{
"id": 20,
"content": "---\ndescription: Create your own space on Snapshot!\n---\n\n# Create a space \\(on GitHub\\)\n\n### **1: Fork Snapshot spaces repository here**\n\n{% embed url='https://github.com/bonustrack/snapshot-spaces' caption='' %}\n\n{% hint style='info' %}\n**Update your fork with the original repo using Git**\n\nIf you have already forked a space, you must update your repo before submitting changes.\n\nUse the 4 commands below to sync your forked repository with the original repository.\n{% endhint %}\n\n```text\ngit remote add master https://github.com/snapshot-labs/snapshot-spaces.git\ngit fetch master\ngit checkout master\ngit merge master/master\n```\n\n### **2: Copy the space 'example' folder**\n\n{% embed url='https://github.com/bonustrack/snapshot-spaces/tree/master/spaces/example' caption='' %}\n\n```text\n|-- spaces\n |-- example\n |-- index.json\n |-- logo.png\n |-- space.png\n|-- skins (optional)\n |-- example.scss (optional)\n```\n\n### **3: Space metadata**\n\nNote that your path folder name will be the name that will show on the snapshot link:\n\n* https://snapshot.page/\\#/**your-space**\n\nExample: `index.json`\n\n```javascript\n{\n 'name': 'Your Space', // Name of your space (max 20 chars)\n 'network': '1', // What network you are on? (if on Ethereum it is '1', for other check: https://docs.snapshot.page/networks)\n 'symbol': 'SYMBOL', // Your main token symbol \n 'skin': 'your-space', // Copy skin filename 'example.scss' located at '/skins' folder and renaming it to 'your-space.scss'\n 'domain': 'vote.yourdomain.com', // Add your voting/governance subdomain if you have one\n 'strategies': [ // Strategies\n {\n 'name': 'erc20-balance-of', // Strategy name\n 'params': { // Strategy parameters\n 'address': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // Address of the base token\n 'symbol': 'SYMBOL', // Symbol of the base token\n 'decimals': 18 // Decimals of the base token\n }\n }\n ],\n 'members': [ // List of official addresses that can post in 'Core' tab of the space\n '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7' // Core member address\n ],\n 'filters': { // Filters\n 'defaultTab': 'all', // The default tab for the space\n 'minScore': 123, // Minimum balance from the base token that a user should have to show his proposal in the space (unless the address is a core address)\n 'onlyMembers': true // Shows only core tab and core proposals\n 'invalids': [ // List of proposals IDs (use this to remove a proposal from your space)\n 'QmXAZP8tYwX2zZz5EzfxLZUYJt6TM9EmxY1L4qodhZ5zcZ',\n 'QmXAZV8tYwX2zZz5EzfxLZUYJt6TM9EmxY1L4qodhZ5lbL'\n ]\n }\n}\n```\n\n#### **R**equired **fields:** `token, name, network, symbol, strategies`\n\n### **4: Add a logo and space images**\n\n1. You must add both `logo.png` and `space.png` images for your space with a size of 256 x 256 pixels.\n2. The file size should not exceed `50KB`.\n\n### **5: Create a skin \\(optional\\)**\n\n1. To create your own skin go to the `/skins` folder.\n2. Copy `example.scss` change the name to what you like \\(prefferably your space name\\).\n3. Change the colors, then make sure both the `scss` file and its class name are the same.\n4. Exampe: your file is `your-space.scss` class name should be `.your-space`\n5. Include your skin name in the `index.json` file as: `'skin': 'your-space'`\n6. Save it in `/skins` folder.\n\nExample: `your-space.scss`\n\n```css\n.your-space {\n --primary-color: #384aff;\n --bg-color: white;\n --text-color: #586069;\n --link-color: #111111;\n --heading-color: #111111;\n --border-color: #d1d5da;\n --header-bg: white;\n --block-bg: transparent;\n}\n```\n\n### **6: Make sure everything is ready**\n\nYour files should something like this:\n\n```text\n|-- spaces\n |-- your-space\n |-- index.json\n |-- logo.png\n |-- space.png\n|-- skins (optional)\n |-- your-space.scss (optional)\n```\n\n### **7: Make a pull request**\n\n* Please name your PR title on the model `Add SYMBOL space`\n* It may take 1 or 2 days to get your PR reviewed, merged and appear on Snapshot.\n\n"
},
{
"id": 21,
"content": "---\ndescription: Learn how to create a proposal.\n---\n\n# Create a proposal\n\n## How to create a proposal?\n\n1. Go to a project space.\n2. Click on “**Connect wallet**” button in top right corner.\n3. Connect with wallet provider where you hold relevant token.\n4. Click on “**New proposal**” button at the project homepage.\n5. Fill out the Title in accordance with project naming standard.\n6. Fill out the large text field with your community proposal.\n7. Select the desired voting options.\n8. Now go to the “**Actions**” box.\n9. Select the start date.\n10. Select the end date \\(Allow enough time for voting\\).\n11. Fill out the Snapshot block number \\(See below: **Add a snapshot block number**\\).\n12. Click on “**Publish**” to create the proposal.\n13. Sign the message via your wallet and you are done.\n\n### **Add a Snapshot block number**\n\nThis number is important, to lock the state of community members who are able to vote. Meaning that if you attempt to vote on a proposal and block number is in the past, and you weren't holding required token yet, your vote will not be counted.\n\n* You can click the '?' top right the snapshot website, and get the blocknumber from there.\n* Or just look at [etherscan.io/blocks](https://etherscan.io/blocks) and use the last block number.\n\n\n\n"
},
{
"id": 22,
"content": "---\ndescription: Avatars are optional.\n---\n\n# Add avatars\n\nTo get a logo for your space, images you need to do a pull request on this repository:\n\n{% embed url='https://github.com/snapshot-labs/snapshot-spaces' %}\n\n#### Follow the Snapshot spaces directory tree\n\n```bash\n└── spaces\n └── my-space.eth\n ├── logo.png\n └── space.png \n```\n\n### **Add your space logo and strategy image\\(s\\)**\n\nYou will need to create a folder with the id of your space \\(example: 'my-space.eth'\\). In this folder you need a file 'space.png' and 'logo.png' \\(for the first strategy\\) and 'logo1.png' if you have a second strategy.\n\n{% hint style='danger' %}\nAll the images must be squared and less than 50kb.\n{% endhint %}\n\n{% hint style='info' %}\nAfter committing your PR, you will have to wait for the merge of your PR to be able to see your images live. This process can take a few hours.\n{% endhint %}\n\n"
},
{
"id": 23,
"content": "---\ndescription: Skins are optional.\n---\n\n# Add a skin\n\nTo create your own skin you need to do a pull request on this repository:\n\n{% embed url='https://github.com/snapshot-labs/snapshot-spaces' %}\n\n#### Follow the Snapshot skins directory tree\n\n```bash\n└── skins\n └── my-space.scss\n```\n\n### Add your skin\n\nTo add your skin you will need to create a 'my-space.scss' file in the 'skins' directory.\n\n```css\n.my-space {\n --primary-color: #384aff;\n --bg-color: white;\n --text-color: #586069;\n --link-color: #111111;\n --heading-color: #111111;\n --border-color: #d1d5da;\n --header-bg: white;\n --block-bg: transparent;\n}\n```\n\n{% hint style='danger' %}\nChange the file name **my-space.scss** and css selector **.my-space** with your space name.\n{% endhint %}\n\nSelect then your skin in the Skin field in your space settings.\n\n![Snapshot skin selector.](../.gitbook/assets/capture-de-cran-2020-12-30-a-09.33.58.png)\n\n{% hint style='info' %}\nAfter committing your PR, you will have to wait for the merge and the deployment of your PR to be able to select your skin available. This process can take a few hours.\n{% endhint %}\n\n"
},
{
"id": 24,
"content": "---\ndescription: Custom domain is optional.\n---\n\n# Add a custom domain\n\nTo add a custom domain you need to do a pull request on this repository:\n\n{% embed url='https://github.com/snapshot-labs/snapshot-spaces' %}\n\n#### Follow the Snapshot spaces directory tree\n\n```bash\n└── spaces\n └── domains.json\n```\n\n### Add a custom domain\n\n#### Set it in the Domain name field\n\nTo add a custom domain, fill in the Domain name field in your settings.\n\n![Domain name field in Snapshot settings.](../.gitbook/assets/capture-de-cran-2020-12-30-a-09.34.49.png)\n\n#### Insert it in the domains list\n\nYou must then add your domain in the [domains.json file](https://github.com/snapshot-labs/snapshot-spaces/blob/master/spaces/domains.json) by following this example.\n\n```javascript\n{\n 'my.custom.url': 'my-space.eth'\n}\n```\n\n#### Configure your DNS \n\nYou will need to add this as CNAME in your domain DNS `snapshotpage.b-cdn.net`\n\n{% hint style='info' %}\nAfter committing your PR, you will have to wait for the merge and the deployment of your PR to be able to get your domain live. This process can take a few hours.\n{% endhint %}\n\n"
},
{
"id": 25,
"content": "# Get votes\n\n#### Input Arguments:\n\n**`first: Int \nskip: Int \norderBy: String \norderDirection: OrderDirection \nwhere: VoteWhere \n \n \nType OrderDirection: \nasc or desc \n \n \nType VoteWhere: \nid: String \nid_in: [String] \nspace: String \nspace_in: [String] \nauthor: String \nauthor_in: [String] \nnetwork: String \nnetwork_in: [String] \nstate: [String]`**\n\n{% hint style='info' %}\n#### [Example GraphQL query](https://hub.snapshot.org/graphql?operationName=Votes&query=query%20Votes%20%7B%0A%20%20votes%20(%0A%20%20%20%20first%3A%201000%0A%20%20%20%20skip%3A%200%0A%20%20%20%20where%3A%20%7B%0A%20%20%20%20%20%20proposal%3A%20%22QmPvbwguLfcVryzBRrbY4Pb9bCtxURagdv1XjhtFLf3wHj%22%0A%20%20%20%20%7D%0A%20%20%20%20orderBy%3A%20%22created%22%2C%0A%20%20%20%20orderDirection%3A%20desc%0A%20%20)%20%7B%0A%20%20%20%20id%0A%20%20%20%20voter%0A%20%20%20%20created%0A%20%20%20%20proposal%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%7D%0A%20%20%20%20choice%0A%20%20%20%20space%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A)\n{% endhint %}\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n votes (\n first: 1000\n skip: 0\n where: {\n proposal: 'QmPvbwguLfcVryzBRrbY4Pb9bCtxURagdv1XjhtFLf3wHj'\n }\n orderBy: 'created',\n orderDirection: desc\n ) {\n id\n voter\n created\n proposal { \n id\n }\n choice\n space {\n id\n }\n }\n}\n\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'votes': [\n {\n 'id': 'QmeU7ct9Y4KLrh6F6mbT1eJNMkeQKMSnSujEfMCfbRLCMp',\n 'voter': '0x96176C25803Ce4cF046aa74895646D8514Ea1611',\n 'created': 1621183227,\n 'proposal': {\n 'id': 'QmPvbwguLfcVryzBRrbY4Pb9bCtxURagdv1XjhtFLf3wHj'\n },\n 'choice': 1,\n 'space': {\n 'id': 'spookyswap.eth'\n }\n },\n {\n 'id': 'QmZ2CV86QH6Q6z7L6g7yJWS3HfgD9aQ3uTYYMXkMa5trHf',\n 'voter': '0x2686EaD94C5042e56a41eDde6533711a4303CC52',\n 'created': 1621181827,\n 'proposal': {\n 'id': 'QmPvbwguLfcVryzBRrbY4Pb9bCtxURagdv1XjhtFLf3wHj'\n },\n 'choice': 1,\n 'space': {\n 'id': 'spookyswap.eth'\n }\n },\n {\n 'id': 'QmYpUghFNYiS5y2vqNzJfczJmhXCMbzq17PJ1jjaP3BYib',\n 'voter': '0xF6F7a399405ca3A6434b390d0221353748cf1884',\n 'created': 1621175990,\n 'proposal': {\n 'id': 'QmPvbwguLfcVryzBRrbY4Pb9bCtxURagdv1XjhtFLf3wHj'\n },\n 'choice': 1,\n 'space': {\n 'id': 'spookyswap.eth'\n }\n }\n ]\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\n"
},
{
"id": 26,
"content": "# Get single vote\n\n#### Input Arguments:\n\n**`id: String`**\n\n{% hint style='info' %}\n#### [Example GraphQL query](https://hub.snapshot.page/graphql?operationName=Proposal&query=query%20Proposal%20%7B%0A%20%20proposal%28id%3A%22QmZ21uS8tVucpaNq2LZCbZUmHhYYXunC1ZS2gPDNWwPWD9%22%29%20%7B%0A%20%20%20%20id%0A%20%20%20%20title%0A%20%20%20%20body%0A%20%20%20%20choices%0A%20%20%20%20start%0A%20%20%20%20end%0A%20%20%20%20snapshot%0A%20%20%20%20state%0A%20%20%20%20author%0A%20%20%20%20space%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%20%20name%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D)\n{% endhint %}\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n vote (\n id: 'QmeU7ct9Y4KLrh6F6mbT1eJNMkeQKMSnSujEfMCfbRLCMp'\n ) {\n id\n voter\n created\n proposal\n choice\n space {\n id\n }\n }\n}\n\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'vote': {\n 'id': 'QmeU7ct9Y4KLrh6F6mbT1eJNMkeQKMSnSujEfMCfbRLCMp',\n 'voter': '0x96176C25803Ce4cF046aa74895646D8514Ea1611',\n 'created': 1621183227,\n 'proposal': 'QmPvbwguLfcVryzBRrbY4Pb9bCtxURagdv1XjhtFLf3wHj',\n 'choice': 1,\n 'space': {\n 'id': 'spookyswap.eth'\n }\n }\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\n"
},
{
"id": 27,
"content": "# Get proposals\n\n#### Input Arguments:\n\n**`first: Int \nskip: Int \norderBy: String \norderDirection: OrderDirection \nwhere: ProposalWhere \n \n \nType OrderDirection: \nasc or desc \n \n \nType ProposalWhere: \nid: String \nid_in: [String] \nspace: String \nspace_in: [String] \nauthor: String \nauthor_in: [String] \nnetwork: String \nnetwork_in: [String] \nstate: [String]`**\n\n{% hint style='info' %}\n#### [Example GraphQL query](https://hub.snapshot.page/graphql?operationName=Proposals&query=query%20Proposals%20%7B%0A%20%20proposals%28%0A%20%20%20%20first%3A%2020%2C%0A%20%20%20%20skip%3A%200%2C%0A%20%20%20%20where%3A%20%7B%0A%20%20%20%20%20%20space_in%3A%20%5B%22balancer%22%2C%20%22yam.eth%22%5D%2C%0A%20%20%20%20%20%20state%3A%20%22closed%22%0A%20%20%20%20%7D%2C%0A%20%20%20%20orderBy%3A%20%22created%22%2C%0A%20%20%20%20orderDirection%3A%20desc%0A%20%20%29%20%7B%0A%20%20%20%20id%0A%20%20%20%20title%0A%20%20%20%20body%0A%20%20%20%20choices%0A%20%20%20%20start%0A%20%20%20%20end%0A%20%20%20%20snapshot%0A%20%20%20%20state%0A%20%20%20%20author%0A%20%20%20%20space%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%20%20name%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D)\n{% endhint %}\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n proposals(\n first: 20,\n skip: 0,\n where: {\n space_in: ['balancer', 'yam.eth'],\n state: 'closed'\n },\n orderBy: 'created',\n orderDirection: desc\n ) {\n id\n title\n body\n choices\n start\n end\n snapshot\n state\n author\n space {\n id\n name\n }\n }\n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'proposals': [\n {\n 'id': 'QmZ21uS8tVucpaNq2LZCbZUmHhYYXunC1ZS2gPDNWwPWD9',\n 'title': 'Example Title',\n 'body': 'Example Body',\n 'choices': [\n 'Approve',\n 'Reject'\n ],\n 'start': 1620946800,\n 'end': 1621206000,\n 'snapshot': '12428834',\n 'state': 'closed',\n 'author': '0xcc6A949DB9b26a7173648d50Cf7C55e800E6585B',\n 'space': {\n 'id': 'balancer',\n 'name': 'Balancer'\n }\n },\n {\n 'id': 'QmUfV627SNpKTNqFc5bEdCXTLnHDF6KvgtbLcdmFmdqP3f',\n 'title': 'Example Title 2',\n 'body': 'Example Body 2',\n 'choices': [\n 'Approve',\n 'Reject'\n ],\n 'start': 1614985200,\n 'end': 1615158000,\n 'snapshot': '11980950',\n 'state': 'closed',\n 'author': '0xcc6A949DB9b26a7173648d50Cf7C55e800E6585B',\n 'space': {\n 'id': 'balancer',\n 'name': 'Balancer'\n }\n }\n ]\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\n"
},
{
"id": 28,
"content": "# Get a single proposal\n\n#### Input Arguments:\n\n**`id: String`**\n\n{% hint style='info' %}\n#### [Example GraphQL query](https://hub.snapshot.page/graphql?operationName=Proposal&query=query%20Proposal%20%7B%0A%20%20proposal%28id%3A%22QmZ21uS8tVucpaNq2LZCbZUmHhYYXunC1ZS2gPDNWwPWD9%22%29%20%7B%0A%20%20%20%20id%0A%20%20%20%20title%0A%20%20%20%20body%0A%20%20%20%20choices%0A%20%20%20%20start%0A%20%20%20%20end%0A%20%20%20%20snapshot%0A%20%20%20%20state%0A%20%20%20%20author%0A%20%20%20%20space%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%20%20name%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D)\n{% endhint %}\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n proposal(id:'QmZ21uS8tVucpaNq2LZCbZUmHhYYXunC1ZS2gPDNWwPWD9') {\n id\n title\n body\n choices\n start\n end\n snapshot\n state\n author\n space {\n id\n name\n }\n }\n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'proposal': {\n 'id': 'QmZ21uS8tVucpaNq2LZCbZUmHhYYXunC1ZS2gPDNWwPWD9',\n 'title': 'Example Title',\n 'body': 'Example Body'\n 'choices': [\n 'Approve',\n 'Reject'\n ],\n 'start': 1620946800,\n 'end': 1621206000,\n 'snapshot': '12428834',\n 'state': 'closed',\n 'author': '0xcc6A949DB9b26a7173648d50Cf7C55e800E6585B',\n 'space': {\n 'id': 'balancer',\n 'name': 'Balancer'\n }\n }\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\n"
},
{
"id": 29,
"content": "# GraphQL API\n\nTry the GraphQL API here:\n\n{% embed url='https://hub.snapshot.page/graphql' %}\n\n![](../.gitbook/assets/image.png)\n\n### Get a single space\n\n#### Arguments\n\nid `string`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n space(id: 'yam.eth') {\n id\n name\n about\n network\n symbol\n members\n }\n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'space': {\n 'id': 'yam.eth',\n 'name': 'Yam Finance',\n 'about': '',\n 'network': '1',\n 'symbol': 'YAM',\n 'members': [\n '0x683A78bA1f6b25E29fbBC9Cd1BFA29A51520De84',\n '0x9Ebc8AD4011C7f559743Eb25705CCF5A9B58D0bc',\n '0xC3edCBe0F93a6258c3933e86fFaA3bcF12F8D695',\n '0xbdac5657eDd13F47C3DD924eAa36Cf1Ec49672cc',\n '0xEC3281124d4c2FCA8A88e3076C1E7749CfEcb7F2'\n ]\n }\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.page/graphql?query=query%20%7B%0A%20%20space%28id%3A%20%22yam.eth%22%29%20%7B%0A%20%20%20%20id%0A%20%20%20%20name%0A%20%20%20%20about%0A%20%20%20%20network%0A%20%20%20%20symbol%0A%20%20%20%20members%0A%20%20%7D%0A%7D)\n\n### Get multiple spaces\n\n#### Arguments\n\nfirst `number` \nskip `number` \norderBy `string` \norderDirection `asc` or `desc`\n\n#### Example\n\n{% tabs %}\n{% tab title='Request' %}\n```graphql\nquery {\n spaces(\n first: 20,\n skip: 0,\n orderBy: 'created',\n orderDirection: asc\n ) {\n id\n name\n about\n network\n symbol\n strategies {\n name\n params\n }\n admins\n members\n filters {\n minScore\n onlyMembers\n }\n plugins\n }\n}\n```\n{% endtab %}\n\n{% tab title='Response' %}\n```javascript\n{\n 'data': {\n 'spaces': [\n {\n 'id': 'bonustrack.eth',\n 'name': 'Fabien',\n 'about': '',\n 'network': '1',\n 'symbol': 'TICKET',\n 'strategies': [\n {\n 'name': 'erc20-balance-of',\n 'params': {\n 'symbol': 'DAI',\n 'address': '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n 'decimals': 18\n }\n }\n ],\n 'admins': [],\n 'members': [\n '0x24A12Fa313F57aF541d447c594072A992c605DCf'\n ],\n 'filters': {\n 'minScore': 0,\n 'onlyMembers': false\n },\n 'plugins': {\n 'quorum': {\n 'total': 500,\n 'strategy': 'static'\n }\n }\n }\n ]\n }\n}\n```\n{% endtab %}\n{% endtabs %}\n\nTry on [GraphiQL](https://hub.snapshot.page/graphql?query=%0Aquery%20Spaces%20%7B%0A%20%20spaces%28%0A%20%20%20%20first%3A%2020%2C%0A%20%20%20%20skip%3A%200%2C%0A%20%20%20%20orderBy%3A%20%22created%22%2C%0A%20%20%20%20orderDirection%3A%20asc%0A%20%20%29%20%7B%0A%20%20%20%20id%0A%20%20%20%20name%0A%20%20%20%20about%0A%20%20%20%20network%0A%20%20%20%20symbol%0A%20%20%20%20strategies%20%7B%0A%20%20%20%20%20%20name%0A%20%20%20%20%20%20params%0A%20%20%20%20%7D%0A%20%20%20%20admins%0A%20%20%20%20members%0A%20%20%20%20filters%20%7B%0A%20%20%20%20%20%20minScore%0A%20%20%20%20%20%20onlyMembers%0A%20%20%20%20%7D%0A%20%20%20%20plugins%0A%20%20%7D%0A%7D)\n\n\n\n{% page-ref page='get-proposals.md' %}\n\n{% page-ref page='get-a-single-proposal.md' %}\n\n{% page-ref page='get-votes.md' %}\n\n{% page-ref page='get-single-vote.md' %}\n\n\n\n"
},
{
"id": 30,
"content": "---\ndescription: >-\n This page explains which networks are supported by Snapshot and how to add a\n new one.\n---\n\n# Networks\n\n## EVM-based networks\n\nSnapshot supports EVM-based networks. You can explore them at **** [**https://snapshot.org**](https://snapshot.org) by selecting the `Networks` filter:\n\n<figure><img src='../.gitbook/assets/image (7) (3).png' alt=''><figcaption></figcaption></figure>\n\nYou can also follow this link directly: [**https://snapshot.org/#/?type=networks**](https://snapshot.org/#/?type=networks).\n\n## Add a new network\n\nIf you can't see the network you are looking for on the list or you want to add your custom network, follow the steps below to include it within Snapshot.\n\n#### Requirements\n\n* New network must be **EVM**-based\n* RPC node must be an **archive node**\n* RPC node's url must use ** `https` ** \n* Multicall contract must be **verified and published** \n* Logo has to be stored on **IPFS**\n\n### 1. Fork the repository\n\nCreate a fork of the [**snapshot.js**](https://github.com/snapshot-labs/snapshot.js) repository.\n\n### 2. Prepare the network details\n\nUpdate the **** [**network.json**](https://github.com/snapshot-labs/snapshot.js/blob/master/src/networks.json) file with a new JSON object storing information about the new network, following the example below:\n\n```json\n '30': {\n 'key': '30',\n 'name': 'RSK Mainnet',\n 'chainId': 30,\n 'network': 'rsk mainnet',\n 'multicall': '0x4eeebb5580769ba6d26bfd07be636300076d1831',\n 'rpc': [\n 'https://public-node.rsk.co' # make sure the RPC node url is using https protocol\n ],\n 'explorer': {\n 'url': 'https://explorer.rsk.co'\n },\n 'start': 2516442, # specify the number of the first block\n 'logo': 'ipfs://QmXTwpE1SqoNZmyY4c3fYWy6qUgQELsyWKbgJo2Pg6K6V9' \n }\n```\n\n### 3. Check if the network is set correctly\n\nHead to **** [**https://snapshot-networks.on.fleek.co/**](https://snapshot-networks.on.fleek.co/) **** to test if your network is reachable:\n\na. Click the first network from the left sidebar and click `Edit networks.json` on the right side:\n\n<figure><img src='../.gitbook/assets/image (1) (4) (1).png' alt=''><figcaption></figcaption></figure>\n\nb. Add the JSON object with your network details (be careful with typos!) and click `Apply`. **Do not refresh the page!**\n\n<figure><img src='../.gitbook/assets/image (3) (3).png' alt=''><figcaption></figcaption></figure>\n\nc. Search for your network in the left sidebar. You can look for the `chainId` or the network's `name`\n\nd. Scroll up to the top of the page and check if:\n\n* it is a Full Archive node\n* the last block is fetched correctly (click on it to see its timestamp)\n* there are no errors\n\n<figure><img src='../.gitbook/assets/image (8) (3).png' alt=''><figcaption></figcaption></figure>\n\n### 4. Create a Pull Request\n\nIf everything works correctly create a new PR on the original [snapshot.js](https://github.com/snapshot-labs/snapshot.js/) repo.\n\n### 5. Wait for the team to approve the PR\n\nIt's now in the hands of the Snapshot team to review your changes and apply them to [https://snapshot.org](https://snapshot.org). \n\nThe average time to merge a PR is 2-3 days, so please be patient! 😉\n"
},
{
"id": 31,
"content": "---\ndescription: Learn how to create a new plugin for Snapshot.\n---\n\n# Create a plugin\n\nIf the existing plugins do not fulfill the needs of your space it is possible to create a new one. Keep in mind though that at this moment we have a curated list of plugins that extend the core funcitonality of Snapshot and we want to make sure that their logic is written in line with Snapshot's values.\n\n{% hint style='info' %}\nThe development of new plugins should be coordinated with the Snapshot team. \n{% endhint %}\n\n## 1. Fork the snapshot repository\n\nCreate a fork of the **snapshot** repository:\n\n{% embed url='https://github.com/snapshot-labs/snapshot/tree/' %}\n\n## 2. Create a new directory and the plugin.json\n\nPosition yourself at the root of the project repository and run the below command to create a new directory for your plugin and provide basic details about it.\n\n\\\nMake sure to update `myPlugin` with the name of your plugin (using `camelCase` naming convention), `name` and `description` to briefly describe what it does:\n\n```shell\nmkdir src/plugins/myPlugin && echo '{\n 'name': 'My Snapshot Plugin',\n 'author: 'My GH profile',\n 'version': '1.0.0',\n 'description': 'A plugin to show how plugins are built.', # optional\n 'defaults': {}, # predefined parameters, optional\n 'icon': '', # URL for the icon, optional\n 'website': 'https://my.website' # optional\n}' > src/plugins/myPlugin/plugin.json\n```\n\nThanks to the `plugin.json` file the plugin will be visible in the space settings.\n\nYou can check that by running the local server and heading to any space's settings.\n\nNow it's time to add the logic to it!\n\n## 3. Create plugin structure and logic \n\nIn order to display the plugin on Snapshot, you need to create its structure by using components. The below table is listing the available components with their render location: \n\n| Plugin component | will be rendered here: |\n| ------------------------------ | ------------------------------- |\n| `myPlugin/Proposal.vue` | below proposal content |\n| `myPlugin/ProposalSidebar.vue` | proposal sidebar |\n| `myPlugin/Create.vue` | proposal creation, plugins step |\n\nWithin those components you can do everything you can do in any other Vue 3 component. You can split the code across multiple components and import them in one of the above, as well as create your own **composables** or other **helper** files to structure your code as you like.\n\nIt's technically not required but recommended to use Vue 3's composition API and the `<script setup>` syntax.\n\nLet's have a look at the **Proposal** component example.\n\n### Proposal\n\nIn order to display your plugin below the proposal content you have to create a **Proposal** component. Navigate to the plugin directory you have just created in the previous step and create a `Proposal.vue` file. You can start with a basic Vue.js single file component.\n\n```\n<script setup>\nconst msg = 'Hello world!'\n</script>\n\n<template>\n <h1>My Plugin</h1>\n <div>{{ msg }}</div>\n</template>\n```\n\n### Properties\n\nTo do something meaningful, a plugin will probably need some awareness of the current context (space, proposal, etc). **This information is passed down to the plugin components as properties**. A component on the proposal page, that needs the proposal's id can receive it in the following way:\n\n```\n<script setup>\ndefineProps({\n id: String // the current proposal's id\n});\n</script>\n\n<template>\n <a :href=''https://...' + id'> ...\n</template>\n```\n\nHere are all properties, that will be passed down to the plugin's main components:\n\n| | Create form | Proposal page |\n| ----------------- | --------------- | --------------------------------------- |\n| **proposal** | form content | current proposal |\n| **space** | space settings | space settings |\n| **preview** | preview enabled | - |\n| **id** | - | proposal id route parameter |\n| **results** | - | current voting results |\n| **loadedResults** | - | whether voting results finished loading |\n| **votes** | - | list of individual votes |\n| **strategies** | - | used strategies |\n\nOnly the main components (`Create.vue`, `Proposal.vue`, `ProposalSidebar.vue`) in your plugin's root directory will receive those properties automatically. You can of course pass those properties further down to other components as needed.\n\n### Existing components/composables\n\nAny of the existing UI components in `src/components`, composables in `src/composables` or installed packages (like [snapshot.js](https://docs.snapshot.org/snapshot.js)) can be used normally.\n\n```\n<script setup>\nimport { useWeb3 } from '@/composables/useWeb3'\nconst { web3Account } = useWeb3();\n</script>\n\n<template>\n <Block title='My Plugin'>\n <h2>Your Account: {{ web3Account }}</h1>\n </Block>\n</template>\n```\n\n### Config defaults\n\nMost plugins will require some configuration options so that a space admin can enter information like their token address, API endpoints and others. Defaults can be defined in the `plugin.json` as follows:\n\n```json\n{\n 'name': 'My Snapshot Plugin',\n 'description': 'A plugin to show how plugins are built.',\n 'defaults': {\n 'space': {\n 'someURL': 'https://...'\n },\n 'proposal': {\n 'someParam': true\n }\n }\n}\n```\n\nUnder the `'space'` key you can define global config options. They can then be set in the plugin section on a space's settings like so:\\\n\n\n<figure><img src='../.gitbook/assets/image (26).png' alt=''><figcaption></figcaption></figure>\n\nThe `'proposal'` key let's you define options specific to a single proposal. This key must be set in order for the `Create.vue` component to be shown in the proposal creation process.\n\n### Localization\n\nThe snapshot.org interface supports multiple languages and new plugins should be built with that in mind. Don't use raw text strings in your plugin's components directly but use the `t` function instead:\n\n```\n<template>\n <h1>{{ $t('myPlugin.hello') }}</h1>\n</template>\n```\n\nThe actual strings need to be added in `src/locales/default.json` to be available for translators, in order to update the language specific files, like `de-DE.json`. You can add your strings on the highest level in `default.json`, under a unique key, e.g. your plugin's directory name and the translation will be done automatically.\n\n```json\n{\n 'myPlugin': {\n 'hello': 'Hello World!'\n }\n}\n```\n\nLearn more about localization in Vue [here](https://vue-i18n.intlify.dev/).\n\n### Numbers and relative time\n\nApart from `vue-i18n`, there are custom number and time formatters available in the `useIntl` composable.\n\n```\n<script setup>\nimport { useIntl } from '@/composables/useIntl';\n\nconst {\n formatRelativeTime,\n formatDuration,\n formatNumber,\n formatCompactNumber,\n formatPercentNumber\n} = useIntl();\n</script>\n\n<template>\n <div>\n {{ formatRelativeTime(1643350286) }} <!-- '5 minutes ago' -->\n {{ formatDuration(654) }} <!-- '11 minutes' --> \n {{ formatNumber(1643350) }} <!-- '1,643,350' -->\n {{ formatCompactNumber(1643350) }} <!-- '1.6M' -->\n {{ formatPercentNumber(0.86543) }} <!-- '86.54%' -->\n </div>\n</template>\n```\n\n## 4. Create a Pull Request\n\nOnce your plugin is tested and ready to deploy, create a new Pull Request on the original[ **snapshot repository**](https://github.com/snapshot-labs/snapshot)**.**\\\n****The review can take the team up to 72 hours, so please be patient 🙏\n\nAfter the PR has been merged, you will need to wait for the release of a new version of [Snapshot](https://snapshot.org) which can take a couple of days.\n\n## 5. Test the plugin in production\n\nYour plugin is now available on Snapshot! :tada: Make sure to **test it thoroughly in production** before communicating to your community.\n"
},
{
"id": 32,
"content": "# Block Number\n\nBlock number is important, to lock the state of community members who are able to vote. Meaning that if you attempt to vote on a proposal and block number is in the past, and you weren't holding required token yet, your vote will not be counted.\n\nExplained in depth:\n\n`H = h + ((t1 — t0) / a)`\n\nWhere:\n\n* `H` = target block height\n* `h` = current block height\n* `t0` = current timestamp \\(in seconds\\)\n* `t1` = target timestamp \\(in seconds\\)\n* `a` = average time to solve a block \\(in seconds\\)\n\nOr...\n\n`last_block_number + ((future_time - time_now) / block_time)`\n\nSo, for example, using a [current epoch time](https://www.epochconverter.com) of 1481214124, the epoch time of 1482537600 for midnight Christmas Eve, and the last block of 2771338:\n\n`2771338 + ((1482537600 - 1481214124) / 14) = 2865872`\n\n"
},
{
"id": 33,
"content": "# Details\n\nDetailed information usually will \n\n"
},
{
"id": 34,
"content": "---\ndescription: Create your own space on Snapshot!\n---\n\n# Create a space \\(on GitHub\\)\n\n### **1: Fork Snapshot spaces repository here**\n\n{% embed url='https://github.com/bonustrack/snapshot-spaces' caption='' %}\n\n{% hint style='info' %}\n**Update your fork with the original repo using Git**\n\nIf you have already forked a space, you must update your repo before submitting changes.\n\nUse the 4 commands below to sync your forked repository with the original repository.\n{% endhint %}\n\n```text\ngit remote add master https://github.com/snapshot-labs/snapshot-spaces.git\ngit fetch master\ngit checkout master\ngit merge master/master\n```\n\n### **2: Copy the space 'example' folder**\n\n{% embed url='https://github.com/bonustrack/snapshot-spaces/tree/master/spaces/example' caption='' %}\n\n```text\n|-- spaces\n |-- example\n |-- index.json\n |-- logo.png\n |-- space.png\n|-- skins (optional)\n |-- example.scss (optional)\n```\n\n### **3: Space metadata**\n\nNote that your path folder name will be the name that will show on the snapshot link:\n\n* https://snapshot.page/\\#/**your-space**\n\nExample: `index.json`\n\n```javascript\n{\n 'name': 'Your Space', // Name of your space (max 20 chars)\n 'network': '1', // What network you are on? (if on Ethereum it is '1', for other check: https://docs.snapshot.page/networks)\n 'symbol': 'SYMBOL', // Your main token symbol \n 'skin': 'your-space', // Copy skin filename 'example.scss' located at '/skins' folder and renaming it to 'your-space.scss'\n 'domain': 'vote.yourdomain.com', // Add your voting/governance subdomain if you have one\n 'strategies': [ // Strategies\n {\n 'name': 'erc20-balance-of', // Strategy name\n 'params': { // Strategy parameters\n 'address': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // Address of the base token\n 'symbol': 'SYMBOL', // Symbol of the base token\n 'decimals': 18 // Decimals of the base token\n }\n }\n ],\n 'members': [ // List of official addresses that can post in 'Core' tab of the space\n '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7' // Core member address\n ],\n 'filters': { // Filters\n 'defaultTab': 'all', // The default tab for the space\n 'minScore': 123, // Minimum balance from the base token that a user should have to show his proposal in the space (unless the address is a core address)\n 'onlyMembers': true // Shows only core tab and core proposals\n 'invalids': [ // List of proposals IDs (use this to remove a proposal from your space)\n 'QmXAZP8tYwX2zZz5EzfxLZUYJt6TM9EmxY1L4qodhZ5zcZ',\n 'QmXAZV8tYwX2zZz5EzfxLZUYJt6TM9EmxY1L4qodhZ5lbL'\n ]\n }\n}\n```\n\n#### **R**equired **fields:** `token, name, network, symbol, strategies`\n\n### **4: Add a logo and space images**\n\n1. You must add both `logo.png` and `space.png` images for your space with a size of 256 x 256 pixels.\n2. The file size should not exceed `50KB`.\n\n### **5: Create a skin \\(optional\\)**\n\n1. To create your own skin go to the `/skins` folder.\n2. Copy `example.scss` change the name to what you like \\(prefferably your space name\\).\n3. Change the colors, then make sure both the `scss` file and its class name are the same.\n4. Exampe: your file is `your-space.scss` class name should be `.your-space`\n5. Include your skin name in the `index.json` file as: `'skin': 'your-space'`\n6. Save it in `/skins` folder.\n\nExample: `your-space.scss`\n\n```css\n.your-space {\n --primary-color: #384aff;\n --bg-color: white;\n --text-color: #586069;\n --link-color: #111111;\n --heading-color: #111111;\n --border-color: #d1d5da;\n --header-bg: white;\n --block-bg: transparent;\n}\n```\n\n### **6: Make sure everything is ready**\n\nYour files should something like this:\n\n```text\n|-- spaces\n |-- your-space\n |-- index.json\n |-- logo.png\n |-- space.png\n|-- skins (optional)\n |-- your-space.scss (optional)\n```\n\n### **7: Make a pull request**\n\n* Please name your PR title on the model `Add SYMBOL space`\n* It may take 1 or 2 days to get your PR reviewed, merged and appear on Snapshot.\n\n"
},
{
"id": 35,
"content": "# Snapshot block number\n\nBlock number is important, to lock the state of community members who are able to vote. Meaning that if you attempt to vote on a proposal and block number is in the past, and you weren't holding required token yet, your vote will not be counted.\n\nExplained in depth:\n\n`H = h + ((t1 — t0) / a)`\n\nWhere:\n\n* `H` = target block height\n* `h` = current block height\n* `t0` = current timestamp \\(in seconds\\)\n* `t1` = target timestamp \\(in seconds\\)\n* `a` = average time to solve a block \\(in seconds\\)\n\nOr...\n\n`last_block_number + ((future_time - time_now) / block_time)`\n\nSo, for example, using a [current epoch time](https://www.epochconverter.com) of 1481214124, the epoch time of 1482537600 for midnight Christmas Eve, and the last block of 2771338:\n\n`2771338 + ((1482537600 - 1481214124) / 14) = 2865872`\n\n"
},
{ "id": 36, "content": "# Archived\n\n" },
{
"id": 37,
"content": "---\ndescription: >-\n Learn how you can submit your vote on a proposal and how your voting power is\n calculated.\n---\n\n# Vote on a proposal\n\n## Who can vote on proposals?\n\nThere are several aspects that define if you are eligible to vote on a specific proposal. \n\n### Voting strategies\n\nEach space specifies their [voting strategies](../strategies/what-is-a-strategy.md) in the [space settings.](../spaces/settings.md#voting-strategies) You can see the custom setup by opening the space settings. This setup can define if you are eligible to take part in the voting and what is your voting power calculated at the [snapshot of proposal creation](../proposals/create.md#snapshot-block-number).\n\nIn most cases you will be required to have a sufficient amount of tokens in the connected wallet at the time of proposal creation. One of the most common questions we receive on our support channels is [**Why can't I vote?**](https://github.com/snapshot-labs/snapshot/discussions/767) \n\nMore often than not the answer is - **you did not hold the sufficient amount of specified token at the time of proposal creation.**\n\n### Voting validation\n\nAnother aspect determining whether you are eligible to vote or not is a [voting validation](../strategies/what-is-a-strategy-1.md) defined by the space. It is a mechanism used to define certain conditions like minimum token balance or also to prevent [Sybil Attacks](https://en.wikipedia.org/wiki/Sybil\\_attack). In other words the space owner wants to make sure that you are human and that bot or fake accounts are not used to overrule the outcome of the voting. \n\n## Cast a vote\n\n1. Click the `Connect wallet` button in the top right corner.\n2. Connect with the wallet provider where you hold the tokens relevant for the space you want to vote in.\n3. Go to the space page on Snapshot and selected the active proposal you are interested in.\n4. Select the option(s) you want to vote for. The [voting systems](../proposals/voting-types.md) can differ between individual proposals.\n5. Click to `Vote` button and sign the message via your wallet provider when prompted. \n6. Voilà! You have casted a vote :tada:\n\n{% hint style='info' %}\nIf you are using MetaMask you'll need to scroll to the end of the signature and click on the arrow down for the Sign button to become active.\\\n\\\nVoting on Snapshot doesn't affect your account or the funds that are associated to it.\n{% endhint %}\n"
},
{
"id": 38,
"content": "---\ndescription: You can delegate your voting power to another address.\n---\n\n# Delegate your voting power\n\n### Delegate your voting power on Snapshot\n\n1. Go to [https://snapshot.org/#/delegate](https://snapshot.org/#/delegate)\n2. Enter the address you want to delegate to.\n3. To limit the delegation to a specific space, tap the on toggle button and enter the space key (example: `balancer.eth`) you want your delegation to take effect on. If no space is selected, the effect will take place for all spaces.\n4. Click **Confirm** to save your delegation.\n"
},
{ "id": 39, "content": "# Voting\n\n" },
{
"id": 40,
"content": "---\ndescription: Learn what a voting strategy is and how to set it up.\n---\n\n# Voting strategies\n\n## What is a voting strategy?\n\nVoting strategy is a set of conditions used to calculate user's voting power. Strategies enable Snapshot to calculate the final result of voting on a given proposal.\n\n>  In technical terms a strategy is a JavaScript function that returns a score for a set of addresses. \n\nStrategy/-ies are defined in the space settings in [#voting-strategies](../spaces/settings.md#voting-strategies 'mention') section. Each space can select from one up to eight voting strategies. The default strategy is `erc20-balance-of` - it calculates the balance of a predefined ERC20 token for each user.\n\nVoting strategies can be used to create a score from on-chain data, the data however does not necessarily need to be monetary. As an example a strategy can calculate how many POAPs or specific NFTs a user owns.\n\nYou can browse through 400+ strategies by selecting the **Strategies** filter on the main page of [https://snapshot.org](https://snapshot.org). If you can't find a strategy that fulfills your needs you can create a new one. To learn more about creating custom voting strategies head to [create-1.md](../../developer-guides/create-a-strategy/create-1.md 'mention').\n\n<figure><img src='../../.gitbook/assets/image (8).png' alt=''><figcaption></figcaption></figure>\n\n## How to set up a strategy?\n\nMajority of spaces on Snapshot is using a single strategy however if you need a more complex calculation, you can combine up to 8 strategies. They will be applied to all proposals created for your space (created _after_ the update of the settings) and the voting power will be calculated cumulatively. \n\n{% hint style='info' %}\n**Multiple voting strategies**\\\n****If you combine several voting strategies the voting power will be calculated in the following way:\\\n_total voting power = voting power from strategy A + voting power from strategy B + ..._\n{% endhint %}\n\n\\\nIn order to set up a voting strategy head to your space settings and scroll down to **Strategies** section. You should see the below pop-up after clicking **Add strategy** and selecting a strategy from the list:\n\n<figure><img src='../../.gitbook/assets/image (4) (3).png' alt=''><figcaption><p>Example of setting up an erc20-balance-of strategy.</p></figcaption></figure>\n\nYou will see that there is information that you need to provide in order to make the strategy work, for example the **network** where the token is deployed, its **symbol** and **address** of the token's contract. \n\nEach strategy will require a different setup and you can read the full description and see the required parameters in the strategy's page, for example [erc20-balance-of](https://snapshot.org/#/strategy/erc20-balance-of). You can find each strategy's details through using the search bar and **Strategies** filter.\n\n## Testing a voting strategy\n\nBefore you add the strategy to your space's settings we highly recommend to test it in the **Playground** in order to avoid any potential issues with the voting process.\n\n{% hint style='danger' %}\nIf you made a mistake in your space settings and votes have already been cast **it is not possible to revert them.** \\\nThe best solution would be to (1) delete the proposal, (2) update the settings with correct **** strategies **** and (3) recreate the proposal from scratch after the settings have been updated.\n{% endhint %}\n\nYou can access it from the strategy's detail page by clicking the **Playground** on the right-hand side:\n\n<figure><img src='../../.gitbook/assets/image (6) (3).png' alt=''><figcaption></figcaption></figure>\n\nYour browser will load a Playground page where you can test the custom setup for the chosen strategy. As you can see on the below screenshot you can set the required parameters and provide a list of addresses which in this case are or are not holding a the `PUNK` ERC721 token. \n\n<figure><img src='../../.gitbook/assets/image (15) (1).png' alt=''><figcaption></figcaption></figure>\n\nIf everything is set up correctly you should see the calculated voting power for each address after clicking the :arrow\\_forward: button:\n\n<figure><img src='../../.gitbook/assets/image (27) (1).png' alt=''><figcaption></figcaption></figure>\n"
},
{
"id": 41,
"content": "# Validation strategies\n\n## What is a validation strategy?\n\nA voting validation is a JavaScript function that returns a boolean (`true` or `false`) for the connected account. Voting validations are being used on Snapshot to decide if an **account can vote** or **create a proposal** in a specific space**.** Each space can use one voting validation for all of its proposals at a time. While voting strategies calculate the Voting Power mainly on the basis of the monetary assets, the validation strategy can serve as a protection against **Sybil attacks**. It can take into consideration how many POAPs an account owns or track the account activity to assess if the account is a bot or a **real human**.\n\nThe **default** validation is checking if the address has **any voting power.** If the voting power is higher than `0` the connected account is validated. A validation strategy can send a call to a node or subgraph.\n\n## How to use validation strategies:\n\nValidation strategies can be used for two purposes:\n\n* proposal validation - determine if the account can create a new proposal,\n* voting validation - determine if the account can take part in the voting process.\n\nIf you want to allow addresses with any voting power to create a proposal or vote you can use the default voting validation.\n\n![](<../../.gitbook/assets/image (1) (1) (2).png>)\n\n## Validation strategy example - Basic\n\nThe Basic validation strategy allows you to specify multiple voting strategies to determine if a user is eligible to create a proposal or cast a vote. \n\nYou can see an example implementation below. This setup is using the[ erc20-with-balance](https://snapshot.org/#/strategy/erc20-with-balance) strategy which requires the user to have at least 10 DIA:\n\n<figure><img src='../../.gitbook/assets/image (1) (2).png' alt=''><figcaption></figcaption></figure>\n\n## Validation strategy example - Gitcoin Passport\n\nValidation strategy built together with **Gitcoin Passport.** You can select individual or multiple stamps that matter for your space. You can also decide if they need to meet all of these criteria or only one. The more criteria you select, the more sybil resistant your space is.\n\n\n\n![](<../../.gitbook/assets/image (17) (2) (1).png>)\n\n\n\n#### Implementation\n\nHave a look at the example of the Gitcoin Passport validation strategy.\n\n{% embed url='https://github.com/snapshot-labs/snapshot-strategies/blob/master/src/validations/passport-gated/index.ts' %}\n\n```javascript\nimport snapshot from '@snapshot-labs/snapshot.js';\nimport Validation from '../validation';\nimport {\n getPassport,\n getVerifiedStamps,\n hasValidIssuanceAndExpiration\n} from '../passport-weighted/helper';\n\nexport default class extends Validation {\n public id = 'passport-gated';\n public github = 'snapshot-labs';\n public version = '0.1.0';\n\n async validate(): Promise<boolean> {\n const requiredStamps = this.params.stamps;\n const passport: any = await getPassport(this.author);\n if (!passport) return false;\n if (!passport.stamps?.length || !requiredStamps?.length) return false;\n\n const verifiedStamps: any[] = await getVerifiedStamps(\n passport,\n this.author,\n requiredStamps.map((stamp) => ({\n id: stamp\n }))\n );\n if (!verifiedStamps.length) return false;\n\n const provider = snapshot.utils.getProvider(this.network);\n const proposalTs = (await provider.getBlock(this.snapshot)).timestamp;\n\n const operator = this.params.operator;\n\n // check issuance and expiration\n const validStamps = verifiedStamps\n .filter((stamp) =>\n hasValidIssuanceAndExpiration(stamp.credential, proposalTs)\n )\n .map((stamp) => stamp.provider);\n\n if (operator === 'AND') {\n return requiredStamps.every((stamp) => validStamps.includes(stamp));\n } else if (operator === 'OR') {\n return requiredStamps.some((stamp) => validStamps.includes(stamp));\n } else {\n return false;\n }\n }\n}\n```\n\nVoting validation can be specified in your space settings at `https://snapshot.page/#/<SPACE ADDRESS>/settings`. \n\n## Create a custom validation \n\nThe possibilities are endless! You can build a custom validation strategy for your space. Please have a look at [create-1-1.md](../../developer-guides/create-a-strategy/create-1-1.md 'mention')for more details.\n\n## Find more voting validations here: <a href='#find-more-strategies-here' id='find-more-strategies-here'></a>\n\n{% embed url='https://github.com/snapshot-labs/snapshot-strategies/tree/master/src/validations' %}\n"
},
{ "id": 42, "content": "# Strategies\n\n" },
{
"id": 43,
"content": "# What is a space?\n\nYou can think of a space as an organization's **account** on Snapshot which can be viewed by anyone visiting the platform. It serves as a hub for all proposals related to the organization and a source of information for the users.\n\nMoreover space allows its organization to manage the roles of organization members and customize the proposal and voting settings.\n\n{% hint style='info' %}\nPlease note that any updates will not affect proposals which already exist, only the new ones will be affected. For more details have a look at the [settings.md](settings.md 'mention') section.\n{% endhint %}\n\n### How to access a space?\n\nSpaces are listed upon arrival on [https://snapshot.org](https://snapshot.org) and first and foremost can be filtered by the organization or the ENS name used to create the space. They can be also filtered by other parameters listed next to the search field. You can access the space from there or directly through a link which includes the ENS name (i.e. [https://snapshot.org/#/pistachiodao.eth](https://snapshot.org/#/pistachiodao.eth)). It is also possible to define a **custom domain name** for your space.\n\n![Browse spaces](<../../.gitbook/assets/Capture d’écran 2022-07-31 à 12.43.41.png>)\n\n### Joining a space\n\nIf you want to have a quick access to a chosen space you can join it from the directory of all spaces or through the space's individual page by clicking the **Join** button. It will create a shortcut for the space on the left sidebar and keep you updated with the number of new proposals displayed on top of the space's avatar.\n\n### Space page\n\nThe content of the space overview will depend on the role of the connected account and the space settings. Below you can see the example of our dummy space and what anyone, even when not connected, can see.\n\n![Pistachio DAO is a dummy space for training purposes](<../../.gitbook/assets/Capture d’écran 2022-07-31 à 12.55.02.png>)\n"
},
{
"id": 44,
"content": "---\ndescription: Create a link between multiple spaces of your organization\n---\n\n# Sub-spaces\n\nOrganizations can create multiple spaces and link them together. This is useful for enforcing different space settings for proposal creation, voting, and execution. For example, instead of having to change the space settings each time you create a proposal, you could create additional spaces with some of your most frequently used settings.\n\n### Setup\n\nYou can define a main space, or multiple subspaces, in the Sub-spaces section of the space settings.\n\n![](<../../.gitbook/assets/image (1) (4).png>)\n\nDo this for both your main space and all subspaces to link them to each other. If you have setup everything correctly they will be displayed on the space page.\n\n![](<../../.gitbook/assets/image (12) (1).png>)\n"
},
{
"id": 45,
"content": "---\ndescription: Learn what the space roles are and how you can assign them to users.\n---\n\n# Space roles\n\n## What is a role?\n\nRole is a set of permissions related to managing your space and its proposals which an account (wallet address) can be granted.\n\n## Role permissions\n\n### Controller\n\nController of space has a **full control over the space settings** including managing the list of admins.\n\n### Admin\n\nAdmin can **edit space settings** with the exception of the list of admin users and **archive proposals.**\n\n### Author\n\nAuthor can **create proposals** regardless of their voting power and the proposal validation strategy.\n\n## Assign a role to the user\n\n### Controller\n\nThe controller is first assigned during the process of space creation. By default it is the ENS domain controller. To learn more about this step, head to [#2.-set-the-space-controller-ens-text-record](create/#2.-set-the-space-controller-ens-text-record 'mention').\n\nThere can be only **one controller** per space and can be updated **only by the current controller.**\n\nIn order to update the controller role head to the space settings on Snapshot. Click the `Edit Controller` button on the right-hand side:\n\n<figure><img src='../../.gitbook/assets/image (5) (1) (1).png' alt=''><figcaption></figcaption></figure>\n\nPaste the address of the account you want to set as space controller in the pop-up window and click `Set`. It will trigger your wallet browser extension and ask you to sign a **transaction with a gas fee.** \n\n### **Admins and authors**\n\nIn order to update the admins and authors lists head to the space settings on Snapshot. Scroll down to the `Admins` and `Authors` fields. \n\nYou can add up to 100 addresses in each field. Make sure each address is written in a **separate line** as suggested in the example below.\n\n<figure><img src='../../.gitbook/assets/image (5) (2) (1).png' alt=''><figcaption></figcaption></figure>\n\n{% hint style='warning' %}\nDo not list all addresses in one line separated by a delimiter like a comma, semicolon or a dot.\n{% endhint %}\n\n"
},
{
"id": 46,
"content": "---\ndescription: >-\n Customize your space settings, sub-spaces, manage access, voting strategies\n and validation and more!\n---\n\n# Settings\n\n## Access your settings\n\nNavigate to your space settings from the space menu by clicking on `Settings`.\n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.07.53.png>)\n\n{% hint style='info' %}\nIf you have trouble finding the settings page you can manually navigate to it with the following URL: https://snapshot.org/#/\\<YOUR-ENS-NAME>/settings\n{% endhint %}\n\n## Edit the controller of your space\n\nSpace controller is the main account that is able to manage the space settings and assign other addresses as admins of the space. By default it's set as the ENS Controller address however you can change it to another address. \n\nTo replace the current space controller by a new controller click the `Edit controller` button.\n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.14.17.png>)\n\n{% hint style='info' %}\nYou will need to **sign a transaction** on the Ethereum Mainnet to set the ENS text-record. \n{% endhint %}\n\n## Edit your profile information\n\nTo complete your profile, you can upload an avatar/logo, enter a name for your DAO, a description, select up to 2 categories and other details. These settings can be changed at any time.\n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.20.57.png>)\n\n## Social accounts\n\nYou can link your social media accounts to the space on Snapshot by typing in your account handle, i.e. [@SnapshotLabs ](https://twitter.com/SnapshotLabs)\n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.30.17.png>)\n\n## Sub-spaces\n\n{% hint style='info' %}\nIf you don't know what a sub-space is head to [sub-spaces.md](sub-spaces.md 'mention') to learn more about them!\n{% endhint %}\n\nIn order to connect the space with sub-spaces you need to set them up for both main- and the sub-space.\n\n1. First **create the sub-space** as you would create a normal space. Once the sub-space is set up, type it's linked ENS domain name in the Sub-spaces input field. If everything went well, you will be able to click the **`+` ** on the right.\n2. Head to the sub-space settings and type in the linked ENS domain name of the **voting** in the correct input field.\n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.30.37.png>)\n\n{% hint style='warning' %}\nIf you see a ❌ after typing the sub-space name it means that it cannot be found. Make sure that you have created the sub-space before adding it.\n{% endhint %}\n\n## Voting strategies\n\nSpecify how the voting power should be calculated by adding one or up to 8 strategies.\n\nTo learn more about what they are and how they work head to [what-is-a-strategy.md](../strategies/what-is-a-strategy.md 'mention').\n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.31.08.png>)\n\n## Admins and authors\n\nIn order to specify who can manage the space or create proposals, fill in the apropriate field with addresses for:\n\n* **Admins** - able to edit the space settings and moderate proposals. \n* **Authors** - able to create proposals without any constraints Make sure that members specified in authors field are allowed to submit a proposal.\n\n{% hint style='info' %}\nEach line should be populated with one address only. Do not add multiple addreses in one line and do not use separators like commas, dots or semicolons.\\\n\\\nYou can add up to 100 addresses in each field.\n{% endhint %}\n\nHead to [space-roles.md](space-roles.md 'mention') to learn more about each role.\n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.31.29.png>)\n\n##\n\n## Proposals\n\nYou can provide guidelines and a template which will be displayed during the proposal creation:\n\n<figure><img src='../../.gitbook/assets/image (3) (1) (1).png' alt=''><figcaption></figcaption></figure>\n\n### Proposal validation\n\nTo validate if someone can post a proposal or not you can use the basic validation by default which takes your voting power with space strategies and checks if you pass a defined threshold.\n\nTo learn what a validation is head to [what-is-a-strategy-1.md](../strategies/what-is-a-strategy-1.md 'mention').\n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.31.47.png>)\n\n## Voting\n\nThe **voting delay** is a value in time between the time of proposal creation and the moment when users are allowed to vote. \\\nThe **voting period** is the duration that the proposal is active and votes can be cast. It is counted from the moment \n\n**Quorum** is the amount of voting power collectively achieved by voters which is required for a proposal to pass.\n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.32.03.png>)\n\n## Custom domain and skin\n\nYou can add a custom domain to your space by following the [add-custom-domain.md](add-custom-domain.md 'mention') guide.\n\nIf you want to apply a different design (skin) to your space, you have to set a custom domain first. Head to [add-skin.md](add-skin.md 'mention') to learn how to add a custom skin for your custom domain.\n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.32.30.png>)\n\n## Treasuries\n\nIn order to link your organization's treasury to Snapshot you have to:\n\n1. Choose the treasury network\n2. Enter its Ethereum address\n3. Fill in the name of that treasury. \n\nIt is possible to add multiple treasuries to one space.  \n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.32.50.png>)\n\n## Plugins\n\nYou can customize your space even further with various plugins which provide extra features. To learn more about the plugins head to [plugins](../plugins/ 'mention') section. \n\n![](<../../.gitbook/assets/Capture d’écran 2022-08-11 à 14.33.20.png>)\n\n## Save your settings\n\nMake sure to click the `Save` button on top of the settings page to apply the changes to your space. Once you **sign a message** (gasless) in your wallet, changes will be applied!\n"
},
{
"id": 47,
"content": "---\ndescription: Follow this guide if you have a space on Snapshot without an ENS name.\n---\n\n# Migrate your space to ENS\n\nIf you already have a space on Snapshot which does not have an ENS name, you need to migrate your space to ENS by following the steps below:\n\n## 1. Create a space with ENS\n\nTo migrate your space you will need first to create a new space with an ENS domain. \n\n{% content-ref url='create/' %}\n[create](create/)\n{% endcontent-ref %}\n\n## 2. Map your old space alias to the ENS\n\n### 2a. Fork the snapshot-spaces repository\n\nFork the below repository to make changes needed to mirate your space.\n\n{% embed url='https://github.com/snapshot-labs/snapshot-spaces' %}\n\n### 2b. Link your old space alias to ENS\n\nOpen the [aliases.json file](https://github.com/snapshot-labs/snapshot-spaces/blob/master/spaces/aliases.json) and add the alias of the space you wish to migrate together with the newly ENS domain name of the newly created space as in the example below:\n\n```javascript\n'my-space': 'my-space.eth'\n```\n\n### 2c. Create a Pull Request\n\nCreate a Pull Request on the original [snapshot-spaces](https://github.com/snapshot-labs/snapshot-spaces/) repository with the above changes.\n\nIt can take the team around **72 hours** to merge your Pull Request, so please be patient :pray:\n\nOnce the PR is merged you will have to wait for the release of a new version on [https://snapshot.org](https://snapshot.org). It can take up to a **couple of days**. Once the new version is released you can move on to the next step.\n\n## 3. Migrate proposals, votes and URLs\n\nNow the Snapshot team has to migrate your old space to the new one.\n\nSend us a message on the [#helpdesk](https://discord.com/channels/707079246388133940/1054898384995090462/1054898384995090462) forum thread on [Discord](https://discord.snapshot.org) to start the migration.\n\nYou have now successfully migrated your space to ENS! :tada:\n"
},
{
"id": 48,
"content": "---\ndescription: This page explains what a space verification is and how to get verified.\n---\n\n# Space verification\n\n## Verification for legitimacy\n\nSpace verification is a process of checking if the space is real and can be trusted. \n\nVerified spaces have a special badge next to their name, as presented on the screenshot below.\n\n![](<../../.gitbook/assets/image (1) (1) (1).png>)\n\n{% hint style='info' %}\nDon't worry if you voted on a proposal of a fake space - signing a message doesn't cause any implications for you.\n{% endhint %}\n\n## How to get your space verified?\n\nMake sure to follow all steps from the below checklist:\n\n* Space has an **avatar** image uploaded\n* Space has a minimum threshold for **proposal validation** (or limited to authors)\n* There are at least **5 closed proposals**\n* A **link** from the official website, the **GitHub** organization or a **tweet** to confirm the ownership of the Snapshot space\n* **Ask to get verified** by an admin in [`#helpdesk`](https://discord.com/channels/707079246388133940/1055816513677967401) channel on [Discord](https://discord.snapshot.org)\n\nVerification process can last up to 72 hours.\n"
},
{
"id": 49,
"content": "# Migrate or delete or a space\n\nCurrently, migrating and deleting spaces still requires some manual effort. \n\n## Delete a space\n\nTo ensure that the request to delete a space is legitimate, please create a proposal with the title 'Delete this space' from the controller of the space (the Ethereum address that is registered in the `snapshot` ENS text record.\n\n### One last step\n\nGet in touch with @space-lead on our [Discord server](https://discord.gg/snapshot)\\\nPlease allow a couple of days for the workflow to be processed.\n\nIn the future, there will be an option in the settings, to delete a space.\n\n## Migrate a space\n\nCreate a proposal on the source space as well as on the target space with the title 'Migrate this space' from the respective controllers of the spaces (the Ethereum address that is registered in the `snapshot` ENS text record.\n\n### One last step\n\nGet in touch with @space-lead on our [Discord server](https://discord.gg/snapshot)\\\nPlease allow a couple of days for the workflow to be processed.\n"
},
{
"id": 50,
"content": "---\ndescription: Learn about the meaning of space badges\n---\n\n# Space badges\n\nAt Snapshot Labs, we want to help our users safely browse and discover spaces and make informed decisions about them. That’s why we’ve introduced verification and warning badges.\n\nThe goal is to provide users a simple way to navigate voting in web3. To facillitate that Snapshot displays a verification badge or warning label next to the space name and in each proposal belonging to that space.\n\nThe **verification badge** signifies that the space has been verified as the authentic version of the protocol it claims to be. Please note that the verified badge does not represent an endorsement of the protocol by Snapshot Labs. A verified badge also says nothing about its merits as an investment. A space may carry a verified badge but might still be a bad investment idea. Think of the verified badge only as a tool to help you find the correct version of the space you’re searching for.\\\n\n\n{% hint style='info' %}\nIf you would like to get your space verified, head to [get-verified.md](get-verified.md 'mention') and follow the guide.\n{% endhint %}\n\n\\\nThe **warning badge** means that we either identified that space as impersonating a project, IP infringement or potential scam.\n\n| Badge | Label | Description |\n| ---------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |\n| ![](<../../.gitbook/assets/Capture d’écran 2022-10-24 à 22.01.25 (1) (1) (1) (1).png>) | Verified | Manually curated by Snapshot Labs to identify spaces that passed the verification criteria. |\n| ![](<../../.gitbook/assets/Capture d’écran 2022-10-24 à 22.02.40.png>) | Warning | Manually curated by Snapshot Labs to identify spaces that impersonate a project, infringe IP, or spaces that are proven to be scams. |\n\n{% hint style='success' %}\nVoting on a proposal which belongs to a space flagged with the warning badge **is not dangerous** as the vote does not trigger a transaction - your account as assets are safe.\n{% endhint %}\n"
},
{
"id": 51,
"content": "---\ndescription: >-\n Learn what a custom skin is and how to use one for your space with a custom\n domain.\n---\n\n# Add a skin\n\n## What is a skin?\n\nA skin is a custom color scheme which you can use for your space if it has a custom domain set up. The customization will be visible only on the custom domain and will not affect the color scheme of your space on https://snapshot.org.\n\n{% hint style='info' %}\nIf you haven't setup a custom domain yet, head to [add-custom-domain.md](add-custom-domain.md 'mention') to learn how you can do it. \n{% endhint %}\n\n## Add a skin to your space\n\nHead to your space settings on Snapshot and find the `Custom domain` section. \n\nSelect a skin by scrolling through the list of available choices or by typing the name you are looking for. If none of them work for you, you can create a custom skin following the section below: [#create-a-custom-skin](add-skin.md#create-a-custom-skin 'mention') \n\nDon't forget that the skin will **only be applied to the custom domain URL!**\n\n![Snapshot skin selector.](../../.gitbook/assets/capture-de-cran-2020-12-30-a-09.33.58.png)\n\nThat's it! You should be able to see the custom color scheme for your space on its custom domain :tada:\n\n## Create a custom skin\n\n### 1. Fork the snapshot-spaces repository\n\nCreate a fork of the snapshot-spaces repository:\n\n{% embed url='https://github.com/snapshot-labs/snapshot-spaces' %}\n\n### 2. Add the styling for your space\n\nCreate a new file in the `skins` directory following the `my-space.scss` naming convention:\n\n```bash\n└── skins\n └── my-space.scss\n```\n\nAdd your custom `scss` to the newly created file. The class name `.my-space` should match the filename you created. Make sure that you **edit only the values** (i.e. `#384aff` on the right-hand side and **do not change the properties** (i.e. `--primary-color)`. \n\n```css\n.my-space {\n --primary-color: #384aff;\n --bg-color: white;\n --text-color: #586069;\n --link-color: #111111;\n --heading-color: #111111;\n --border-color: #d1d5da;\n --header-bg: white;\n --block-bg: transparent;\n}\n```\n\n{% hint style='info' %}\nDon't forget to change the file name **my-space.scss** and css selector **.my-space** to your space name.\n{% endhint %}\n\nYou can have a look at a custom skin example by following [this link](https://github.com/snapshot-labs/snapshot-spaces/blob/master/skins/uniswap.scss).\n\n### 3. Import the scss file \n\nAdd the import of your newly created `scss` file to the [skins/index.js](https://github.com/snapshot-labs/snapshot-spaces/blob/master/skins/index.js) file in the following format:\n\n```css\nimport my-space from './my-space.scss';\n```\n\n### 4. Create a pull request\n\nCreate a Pull Request with the above changes on the original [snapshot-spaces](https://github.com/snapshot-labs/snapshot-spaces/) repo.\n\nThe review can take the team up to 72 hours, so please be patient :pray:\n\nAfter the PR has been merged, you will need to wait for the release of a new version of [Snapshot](https://github.com/snapshot-labs/snapshot) which can take a couple of days. Once it's deployed you can move on to the next step.\n\n### 5. Update your space settings\n\nFollow the steps from [#add-a-skin-to-your-space](add-skin.md#add-a-skin-to-your-space 'mention') to use your own custom skin.\n"
},
{
"id": 52,
"content": "---\ndescription: Learn what a custom domain is and how to set it up for your space.\n---\n\n# Add a custom domain\n\n## What is a custom domain?\n\nCustom domain is a unique branded domain name which you can use for your space instead of using the default Snapshot's URL. The displayed website is exatly the same, the only difference being the address you can see in the browser. Have a look at the example below:\n\nSnapshot URL: [https://snapshot.org/#/balancer.eth](https://snapshot.org/#/balancer.eth)\n\nCustom domain: [https://vote.balancer.fi/#/](https://vote.balancer.fi/#/)\n\nAs you already have a domain with ENS, adding a custom domain **is optional.** \n\n## Add a custom domain to your space\n\n{% hint style='info' %}\nYou cannot create a custom domain through Snapshot. Make sure that you own the custom domain before setting it up.\n{% endhint %}\n\n### 1. Fork the snapshot-spaces repository\n\nCreate a fork of the snapshot-spaces Github repository:\n\n{% embed url='https://github.com/snapshot-labs/snapshot-spaces' %}\n\n### 2. Add your custom domain to domains.json\n\nFollow the Snapshot spaces directory tree and open the [domains.json](https://github.com/snapshot-labs/snapshot-spaces/blob/master/spaces/domains.json) file.\n\n```bash\n└── spaces\n └── domains.json\n```\n\nAdd the mapping for your custom domain and Snapshot space in the following format:\n\n```\n'my.custom.url': 'my-space.eth'\n```\n\n{% hint style='warning' %}\nTo prevent conflicts, it is recommended to add your subdomain between two existing domains rather than at the end or beginning of the list, as in the example below.\n{% endhint %}\n\n```javascript\n{\n ...\n 'other.domain.com': 'ens.eth',\n 'my.custom.url': 'my-space.eth',\n 'other.domain.com': 'ens.eth',\n ...\n}\n```\n\n### 3. Create a pull request\n\nCreate a Pull Request on the original [snapshot-spaces](https://github.com/snapshot-labs/snapshot-spaces/) repository with the above changes.\n\nIt can take the team around **72 hours** to merge your Pull Request, so please be patient :pray:\n\nOnce the PR is merged you will have to wait for the release of a new version on [https://snapshot.org](https://snapshot.org). It can take up to a **couple of days**. Once the new version is released you can move on to the next step.\n\n### 4. Update space settings\n\nHead to your space settings on Snapshot and fill in the custom domain name field. It must match the one you added in the Pull Request.\n\n![The domain name field in Snapshot settings.](../../.gitbook/assets/capture-de-cran-2020-12-30-a-09.34.49.png)\n\n### 5. Configure your DNS \n\nUpdate your DNS settings on the custom domain provider dashboard and set CNAME to:\n\n`cname.snapshot.org`\n\n### 6. Activate your domain\n\nOnce the PR is merged use the below link to activate the domain:\n\n\\\n[https://ina9pk8175.execute-api.us-west-2.amazonaws.com/dev?domain=example.com](https://ina9pk8175.execute-api.us-west-2.amazonaws.com/dev?domain=example.com)\\\n\n\n**Replace 'example.com' with your custom domain.** \n\n{% hint style='info' %}\nNote that at this step the returned message could contain warnings, this could happen if the domain DNS zone is not fully resolved yet or if you've already successfully activated your domain. The bottom line is if you've setup the CNAME record correctly you should not worry at all.\n{% endhint %}\n\n\n\nThat's all! You should now be able to use the custom domain for your space :tada:\\\n"
},
{ "id": 53, "content": "# Spaces\n\n" },
{
"id": 54,
"content": "---\ndescription: Learn more about the different voting schemes on Snapshot.\n---\n\n# Voting systems\n\n{% hint style='info' %}\nSnapshot supports a number of different voting systems and we plan to support many more in the future. If you would like to request a new voting type, please open a feature request [here](https://features.snapshot.org/feature-requests) :pray: \n{% endhint %}\n\n## What is a voting system?\n\nVoting system defines how users can cast their votes and how the final result is calculated.\n\nDo not mistake it with the voting strategy though - a [voting strategy](../strategies/what-is-a-strategy.md) is used to calculate the **individual voting power** of a user while the voting system calculates the **outcome of the proposal**.\n\nVoting system is defined in the space settings or at the level of an individual proposal (unless it has been already defined in the space settings) and can allow the users to: \n\n* Choose only **one option** - [#single-choice-voting](voting-types.md#single-choice-voting 'mention')\n* Spread their votes over **multiple options** - [#weighted-voting](voting-types.md#weighted-voting 'mention')\n* **Approve** a certain number of options - [#approval-voting](voting-types.md#approval-voting 'mention')\n* Spread their votes over multiple options using the [**quadratic voting**](https://en.wikipedia.org/wiki/Quadratic\\_voting) **formula** - [#quadratic-voting](voting-types.md#quadratic-voting 'mention')\n* Rank the different choices in their **order of preference** - [#ranked-choice-voting-instant-runoff-voting](voting-types.md#ranked-choice-voting-instant-runoff-voting 'mention')\n* **Abstain** from voting while still participating in quorum - [#basic-voting](voting-types.md#basic-voting 'mention')\n\nLet's have a look at each voting system in the next section.\n\n## Voting systems types\n\n### Single choice voting\n\nEach user can select only one option. The results will reflect these votes as percentages of the total voting power of all voting participants cast on the specific choice. \n\nIdeal for choosing one option from many.\\\n\\\n**Pros**: Most simple and common voting system which is easy to set up and use.\\\n**Cons**: Voters can pick only one option.\n\n👉 [**Try it yourself!**](https://snapshot.org/#/pistachiodao.eth/proposal/0x02c3fcd64e86157d07c88e5a715ac08f57655917f8bfd5be30a99092136511ec)****\n\n<figure><img src='../../.gitbook/assets/image (8) (2).png' alt=''><figcaption></figcaption></figure>\n\n### Weighted voting\n\nEach user can spread their voting power across any number of choices, from one to all. Their voting power will be divided between their chosen options according to how much weight they attribute to each option by increasing or decreasing the voting power fraction.\n\n**Pros**: Allows voters to express support for more than one option and specify how much they support each of them.\\\n**Cons**: Requires more time and adds complexity to the voting process.\n\nThis voting method was first introduced by Float Protocol with [Scattershot](https://github.com/FloatProtocol/scattershot) (a fork of Snapshot).\n\n****:point\\_right: [**Try it yourself!**](https://snapshot.org/#/pistachiodao.eth/proposal/0xf93f1ac80e22cc930b1eef1d20bd34671ccc33b88b04695479c9de364451d77f)****\n\n<figure><img src='../../.gitbook/assets/image (4) (4).png' alt=''><figcaption></figcaption></figure>\n\n### Approval voting\n\nEach user can select (_approve_) any number of choices, each selected choice will receive equal voting power, i.e. if user selects two choices, each choice will receive the total voting power of the user.\n\n**Pros**: Ask for approval of several decisions in a single proposal.\\\n**Cons**: There is no way to manifest _how much_ you support each choice. It’s a simple yes or no.\n\n:point\\_right: [**Try it yourself!**](https://snapshot.org/#/pistachiodao.eth/proposal/0x08c3bd2960700525770a1d634f8599ba967e55fcc05b6c1649d984d88253769d)****\n\n<figure><img src='../../.gitbook/assets/image (2) (1) (1).png' alt=''><figcaption></figcaption></figure>\n\n### Quadratic voting\n\nEach user can spread voting power across any number of choices. The results are calculated quadratically, thanks to which the **number of individual voters** matters more than the sum of voting power contributed. \n\nFor more information on quadratic voting refer to [this article](https://en.wikipedia.org/wiki/Quadratic\\_voting).\n\n**Pros**: Dilutes the whales' voting power in favor of smaller holders. Individuals will matter more than the amount of tokens. \\\n**Cons**: This voting type needs to be accompanied by a [Sybil-resistance mechanism](../strategies/what-is-a-strategy-1.md) that prevents whales from splitting funds across different wallets. \n\n:point\\_right: [**Try it yourself!**](https://snapshot.org/#/pistachiodao.eth/proposal/0x21f64875abbca71762a980efae43ab62b546d54f19a208d0e61a5d7cee571a35)****\n\n<figure><img src='../../.gitbook/assets/image (6) (2) (1).png' alt=''><figcaption></figcaption></figure>\n\n### Ranked choice voting (Instant Runoff Voting)\n\nEach user has to rank all choices in a desired order. \n\nIn the **first step** votes are counted for each voter's number one choice. If a choice receives more than 50% votes (cast on number one choices of each user), that choice wins. The result will show the percentages reflecting how users voted for their **first choice only**.\n\nIn the **second step** if the first-choice candidate doesn't get over 50% of the total votes the choice with the **fewest** number one votes is **eliminated**. Voters who had chosen the defeated choice as number one now have their number two choice **counted as their number one** choice. \n\nThe process continues over multiple rounds until a choice has more than half (> 50%) of the total votes. \n\nFor more details, read [this discussion](https://github.com/snapshot-labs/snapshot/discussions/1624).\n\n{% hint style='info' %}\nSome options will show up as if they had **not received any votes** because they were **eliminated** in the ranked-choice voting process.\n{% endhint %}\n\n**Pros**: Favors the option with the strongest support and reduces wasted votes. \\\n**Cons**: Complex to understand. Will only determine one winner, doesn’t work well to select 2 or more winning options.\n\n:point\\_right: [**Try it yourself!**](https://snapshot.org/#/pistachiodao.eth/proposal/0x5003da0f03e718b461e53fe10a998b60172e2e108472153282fcef781c300f23)****\n\n<figure><img src='../../.gitbook/assets/image (16) (3) (1).png' alt=''><figcaption></figcaption></figure>\n\n### Basic voting\n\nEach user can select one of three options: `For`, `Against`, `Abstain`.\n\nThe votes cast on the `Abstain` choice are counted in calculating if the necessary quorum has been reached for a proposal to pass.\n\n**Pros**: Results are easy to interpret and hard to contest.\\\n**Cons**: Choices are predefined and cannot be edited. \n\n:point\\_right: [**Try it yourself!**](https://snapshot.org/#/pistachiodao.eth/proposal/0x38c654c0f81b63ea1839ec3b221fad6ecba474aa0c4e8b4e8bc957f70100e753)****\n\n<figure><img src='../../.gitbook/assets/image (19) (1).png' alt=''><figcaption></figcaption></figure>\n"
},
{
"id": 55,
"content": "---\ndescription: Learn what a proposal is and how to create one.\n---\n\n# Create a proposal\n\n## What is a proposal? \n\nProposal is the key element of the voting system. It presents a change suggestion related to a specific organization and enables eligible users to cast their vote. \n\nA specific [voting system](voting-types.md) (single choice, weighted, quadratic, and others) can be selected individually for each proposal.\n\nVoting power for each user is calculated on the basis of the voting strategies selected in the [space settings](../strategies/what-is-a-strategy.md).\n\n\n\n## Who can create a proposal?\n\nSpace [controller](../spaces/space-roles.md),[ admins](../spaces/space-roles.md), [authors](../spaces/space-roles.md) and users who are eligible according to the [proposal validation](../strategies/what-is-a-strategy-1.md) strategies defined in the space settings.\n\n## Create a proposal\n\n1. Head to the space which you wish to create your proposal for.\n2. Connect with the wallet provider - make sure the connected wallet is **where you hold the tokens relevant** to the specific space.\n3. Click `New proposal` in space sidebar:\\\n\n\n <figure><img src='../../.gitbook/assets/image (10) (1).png' alt=''><figcaption></figcaption></figure>\n4. Fill in the following fields:\\\n \\- Title\\\n \\- Description (optional)\\\n \\- Discussion link (optional)\\\n\n\n <figure><img src='../../.gitbook/assets/image (9) (1).png' alt=''><figcaption></figcaption></figure>\n5. Select the desired voting system, specify the possible vote options and define the duration of your proposal. Make sure you allow enough time for users to vote.\\\n\n\n <figure><img src='../../.gitbook/assets/image (31) (1).png' alt=''><figcaption></figcaption></figure>\n6. Click `Publish` - and that's it! You can see your proposal in the proposals list on the space page.\n\n\n\n## **Snapshot block number**\n\nWhen you create a proposal by default the **snapshot block number** will be populated with the latest block synced from our node.\n\n{% hint style='warning' %}\nThe voting power of each user will be calculated for the **state of the blockchain at this specific snapshot**. \\\n\\\nIt means that if user acquires required tokens **after** the proposal has been created, they will not be taken into account for their voting power calculation.\n{% endhint %}\n\n\n\n### Proposals limitations\n\n* There is a character limit of 6400 for the description of a proposal.\n* You can combine up to 8 [voting strategies](../strategies/what-is-a-strategy.md). The limit also applies to multi-chain strategies.\n"
},
{ "id": 56, "content": "# Proposals\n\n" },
{
"id": 57,
"content": "---\ndescription: Learn what plugins are and how to use them.\n---\n\n# What is a plugin?\n\nPlugin is an extension which enriches Snapshot by additional functionalities without changing the core of Snapshot's logic. The possibilities are many, from plugins which reward users with an NFT when they cast a vote, through adding a comment box for voters to explain their choice, to enabling on-chain execution of Gnosis Safe transactions.\n\nYou can browse through all plugins by heading to [https://snapshot.org](https://snapshot.org) and selecting the **Plugins** filter in the search bar:\n\n<figure><img src='../../.gitbook/assets/image (8) (1).png' alt=''><figcaption></figcaption></figure>\n\n## Add a plugin to your space \n\nYou can extend your space's functionality by adding plugin(s) to it. They will be applied to all proposals created after the plugin has been added.\n\n1. In order to add a plugin head to your space settings by clicking **Settings** on your space's page:\n\n<figure><img src='../../.gitbook/assets/image (30).png' alt=''><figcaption></figcaption></figure>\n\n2\\. Scroll down to the **Plugins** section and click **Add plugin**. Select the plugin you want to add in the pop-up window:\n\n<figure><img src='../../.gitbook/assets/image (27) (2).png' alt=''><figcaption></figcaption></figure>\n\n3\\. Configure the plugin according to your needs. \\\n\\\nEach plugin requires different setup so before you add it to your space make sure which parameters do you need to provide. As an example, the Gnosis SafeSnap plugin requires a `CHAIN_ID` of the network your safe is using and the `realityAddress` . Check out the [gnosis-safe.md](../gnosis-safe.md 'mention') setup steps if you want to learn more about this specific plugin.\n\n<figure><img src='../../.gitbook/assets/image (19).png' alt=''><figcaption></figcaption></figure>\n\n4\\. Click **Add** and don't forget to **Save** your new settings. \n\n5\\. Well done, you have added a new plugin to your space! :tada:\n\n{% hint style='info' %}\nThe newly added plugin will affect only **proposals created after** the settings have been updated.\n{% endhint %}\n"
},
{
"id": 58,
"content": "---\ndescription: Combine Gnosis Safe with Snapshot using SafeSnap plugin.\n---\n\n# SafeSnap: Reality\n\nCombining the Gnosis Safe with Snapshot, SafeSnap enables decentralized execution of crypto governance proposals, through on-chain execution of off-chain votes.\\\n\n\n## How does it work? <a href='#e132' id='e132'></a>\n\nSafeSnap plugin is an oracle-based solution which works together with Gnosis Safe and Snapshot in the following way:\n\n<figure><img src='../../.gitbook/assets/image (28).png' alt=''><figcaption></figcaption></figure>\n\n* A Gnosis Safe module, where anyone can create a new proposal: an array of multisend transaction payloads.\n* Each proposal is a `Reality.eth` question asking if (1) the linked Snapshot proposal passed, (2) did the proposal include the payload, and (3) does the payload do what the proposal describes.\n* If the proposal passes on Snapshot, then `Reality.eth` should resolve to the same outcome, and after a 24 hour cooldown period, the proposal’s transactions are executable by anyone.\n* Reality uses an ERC-20 token (a given DAO’s governance token) for the bond. The minimum bond can be set by way of a proposal to the DAO.\n* The UI is a Snapshot plugin, in which users can enter an array of tx-payloads to be executed sequentially by the Gnosis Safe if the proposal passes. Once the proposal has passed, the Reality.eth question has resolved, and the 24 hour cooldown period is over, there is the option on the Snapshot interface to trigger each of the multisend transactions in the proposal.\n\n## Setup\n\nFollow the official Zodiac guide on how to setup a SafeSnap for your project.\\\n\\\n**I'm a non-dev operator (space controller or admin):**\n\n{% embed url='https://zodiac.wiki/index.php/Reality_Module:_Operator_Tutorial' %}\n\n**I'm a developer:**\n\n{% embed url='https://github.com/gnosis/zodiac-module-reality/blob/main/docs/setup_guide.md' %}\n\n**More information:**\n\n{% embed url='https://zodiac.wiki/index.php/Category:Reality_Module' %}\n\n## Security recommendations\n\nIn order to ensure maximal safety we recommend to define several paremeters for your setup:\n\n* Set a **substantial bond** for an answer\n* Select an **arbitrator**\n* Select a **long cooldown**\n* Set up a **monitoring infrastructure** for questions\n\n## Additional resources\n\nLearn more about SafeSnape here:\n\n{% embed url='https://blog.gnosis.pm/introducing-safesnap-the-first-in-a-decentralized-governance-tool-suite-for-the-gnosis-safe-ea67eb95c34f' %}\n\n{% embed url='https://www.youtube.com/watch?v=ncDeEuJfVkg' %}\n\n"
},
{
"id": 59,
"content": "---\ndescription: Combine Safe with Snapshot using oSnap.\n---\n\n# SafeSnap: oSnap\n\n“oSnap” is short for Optimistic Snapshot Execution. oSnap lets DAOs propose transactions, do an off-chain governance vote, and have the transaction data submitted in a trustless fashion.\n\n### Instructions for using oSnap <a href='#e132' id='e132'></a>\n\n<figure><img src='../../.gitbook/assets/UMA-oSnap.png' alt=''><figcaption></figcaption></figure>\n\nSetting up the oSnap module:\n\n* Create a Safe and Snapshot Space, or connect to your current accounts.\n* Go to Safe Apps, install the Zodiac app, and install the oSnap module through Zodiac.\n* Set the proposal bond, challenge period, and Snapshot Space.\n* Link the oSnap module to your Snapshot Space with SafeSnap.\n* Your oSnap module address is added to the SafeSnap plugin configuration to enforce the results of proposals on-chain.\n\nUsing oSnap with Snapshot:\n\n* Create a proposal and Snapshot vote, along with the transactions to execute if the proposal passes.\n* Invite the community to vote on the proposal.\n* Once the Snapshot voting period ends, anyone can propose the transactions by posting a bond.\n* After the challenge period, execute the transactions on-chain through the Snapshot interface.\n\n### Tutorials\n\nVideo tutorial on how to deploy and use an oSnap module:\n\n{% embed url='https://www.youtube.com/watch?v=R97GIW5M_r0&t=2s' %}\n\nFollow the oSnap documentation on how to set up an oSnap module for your project.\n\nDeployment tutorial using the Zodiac module:\n\n{% embed url='https://docs.uma.xyz/developers/osnap/osnap-deployment-tutorial' %}\n\nSnapshot tutorial to configure and execute transactions with Snapshot proposals:\n\n{% embed url='https://docs.uma.xyz/developers/osnap/snapshot-tutorial' %}\n\nAn overview on verifying and disputing proposed transactions:\n\n{% embed url='https://docs.uma.xyz/developers/osnap/osnap-proposal-verification' %}\n\nUpdating the oSnap using admin functions:\n\n{% embed url='https://docs.uma.xyz/developers/osnap/osnap-module-admin-functions' %}\n\n### Security recommendations\n\nIn order to ensure maximal safety we recommend to define several paremeters for your oSnap setup:\n\n* Set a **substantial bond** for an answer\n* Select a **long challenge period**\n* Set up a **monitoring infrastructure** for proposed transactions\n\n### Additional resources\n\nLearn more about oSnap here:\n\n{% embed url='https://docs.uma.xyz/developers/osnap' %}\n\n{% embed url='https://medium.com/uma-project/announcing-osnap-gasless-snapshot-voting-with-on-chain-execution-by-uma-7374ed729b28' %}\n"
},
{
"id": 60,
"content": "# Quorum\n\n{% hint style='warning' %}\nThe content of this page is being working on at the moment\n{% endhint %}\n"
},
{
"id": 61,
"content": "---\ndescription: Learn what Galxe plugin is and how to add it to your space.\n---\n\n# Galxe\n\n[Galxe](https://galxe.com/) is building a protocol that powers on-chain credentials with plug-and-play NFT modules. The permissionless infrastructure allows everyone to create, distribute, and gamify NFTs with customized on-chain data.\n\nWith the Galxy plugin users can easily create a campaign and integrate it into [Snapshot.](https://snapshot.org) This solution will incentive communities to participate in the proposal vote by rewarding them with OATs (On-Chain Achievement Tokens). After users have voted, they can claim an OAT directly from the Project Galaxy Plugin section on the proposal page on Snapshot.\n\n## Setup\n\n### 1. Go to your settings\n\nIn order to add a plugin head to your space settings by clicking **Settings** on your space's page:\n\n<figure><img src='../../.gitbook/assets/image (15) (2) (1).png' alt=''><figcaption></figcaption></figure>\n\n### 2. Create a new proposal\n\nCreate a new proposal which you would like to link to the Galxe plugin. You don't need to specify anything related to Galxe yet.\n\nOnce the proposal is created, copy the proposal ID from the address bar in your browser as you will need it in the next step.\n\n<figure><img src='../../.gitbook/assets/image (21) (1).png' alt=''><figcaption></figcaption></figure>\n\n### 3. Add the plugin\n\n2\\. Scroll down to the **Plugins** section and click **Add plugin**. Select the plugin you want to add in the pop-up window:\n\n<figure><img src='../../.gitbook/assets/image (1) (1).png' alt=''><figcaption></figcaption></figure>\n\nAdd the proposal ID and the Galxe Campaign information which you would like to link with the proposal.\n\n<figure><img src='../../.gitbook/assets/image (20).png' alt=''><figcaption></figcaption></figure>\n\n\\\nMake sure to replace `<Proposal ID>` with your proposal ID which you copied in the previous step.\n\nThen replace the `<Space Name/campaign/Campaign ID>` with the details of your space and campaign.\n\n_Example:_\n\n```json\n'oats': {\n\t'0x554ca2bd7d979e8b72c6ae6415946a7bb470da9f60a9cf931205f083c03632a3': 'jokey/campaign/GCixQUUqfE'\n}\n```\n\n\\\nIf you have multiple proposals that distribute OATs to voters, you can also add multiple `proposalID:campaignInfo` pairs at once in the following format:\n\n```json\n{\n\t'oats': {\n\t\t'<proposal ID 1>': '<Space Name>/campaign/<Campaign ID>',\n\t\t'<proposal ID 2>': '<Space Name>/campaign/<Campaign ID>',\n\t\t'<proposal ID 3>': '<Space Name>/campaign/<Campaign ID>',\n\t}\n}\n```\n\n{% hint style='warning' %}\nIf you delete a `proposalID-campaignInfo` pair, users won’t see the OAT information on the page of your proposal even if the proposal has ended or the OATs have already been distributed.\n{% endhint %}\n\n### 4. Confirm and save space settings\n\nClick **Add** and scroll up to the top of the page to click **Save** to persist the updated settings.\n\nThat's it, your users will be able to see the Galxe plugin on the proposal's page!\n\n{% hint style='info' %}\nYou can edit the configuration of your plugin in order to add new proposals to the list. Simply go to settings and click the Galxe plugin to edit the JSON with details. Don't forget to save your settings!\n{% endhint %}\n"
},
{
"id": 62,
"content": "---\ndescription: Learn what the POAP plugin is and how to add it to your space.\n---\n\n# POAP\n\nPOAP is a badge which can be acquired by attending events or experiences. In technical terms - a Proof Of Attendance Protocol NFT (non-fungible asset).\n\nWith the POAP plugin you can **reward voters** in your space with a unique POAP for each vote they cast on a Snapshot proposal and as a result grow the overall governance participation of your community. \n\n## Setup\n\n### 1. Open your space settings on Snapshot <a href='#h_48e007c7d3' id='h_48e007c7d3'></a>\n\nEnsure that you have the permissions required to add new plugins, or reach out to the admins of the space you'd like to add the plugin to.\n\nScroll down to **Plugins** and click the **Add plugin** button. \n\n###  2. Select the POAP module\n\nA new popup window will show up where you can search for and select the **POAP Module** by simply clicking on it.\n\n![](https://poap.intercom-attachments-1.com/i/o/443038277/66366d4057ae67afb39c575a/1-AkXU0CT4GHBemGl8Qq5z2Q.png)\n\nNo need for additional settings on this step; leave it as-is and click '**Add.**'\n\n![](https://poap.intercom-attachments-1.com/i/o/443038294/b8903cd4670d1c40d980c707/1-F5jbklz3\\_c0Ue-GkbOP0-g.png)\n\n \n\nDon't forget to save your settings! Go to the top of the page and click **Save.** Confirm the changes by signing the message in your wallet. \n\n### 3. Create a new proposal <a href='#h_87ff015410' id='h_87ff015410'></a>\n\nNow when you create a new proposal, the POAP plugin will be automatically added. There is no need to manually add it to each new proposal.\n\n![](https://poap.intercom-attachments-1.com/i/o/443038298/11c9a8aef60edefa98dca0d8/1-2vZVDaDkHXrg5LsF0di7IQ.png)\n\nOnce the proposal has been created, you can get your **Snapshot proposal ID** from the URL of the proposal. Copy all characters following the `proposal/` in the address box in the browser and save them somewhere - you will need it to link the proposal to your POAP drop.\n\n \n\n<figure><img src='https://poap.intercom-attachments-1.com/i/o/443038303/ba9a6a391b318a7854d11416/1-dwgU5p639Np9QVsdIHGEtQ.png' alt=''><figcaption></figcaption></figure>\n\n### 4. Create a POAP drop <a href='#h_0f06ce9fe9' id='h_0f06ce9fe9'></a>\n\nFollow the instructions in POAP's guide [**How Do I Set Up a POAP Drop?** ](https://poap.zendesk.com/hc/en-us/articles/9702718846989)but be sure to request '0' mint links.\n\nTake note of your **Drop ID,** as you will need this for the next steps.\n\n<figure><img src='../../.gitbook/assets/image (9).png' alt=''><figcaption></figcaption></figure>\n\n### 5. Link your proposal to your POAP drop\n\nReach out to the POAP team by filling out the required fields in the [**POAP Snapshot Proposal Request form**](https://forms.gle/t7Cwd7TjqmNanhwb6). **Do not post your request anywhere else.** \n\n{% hint style='info' %}\nYour petition will be reviewed by the POAP Curation Body after the vote is finished. If the petition is approved, every voter will be able to mint their special POAP.\n{% endhint %}\n\n#### How to check the status of your request?\n\nIf you want to check on the status of your request, you should do so by using the chat bubble:\n\n* Click the chat bubble in the lower-right corner of the [POAP website](https://poap.xyz/).\n* Type “check on my petition”\n* Enter your **drop ID**.\n* Get a response!\n\nIf curation needs to contact you, they will do so via the email curation@poap.io. If customer support needs to contact you, they will do so via the email support@poap.io. **Beware of scams and never reply to other email addresses.** \n\n## Support\n\nJoin POAP Discord: [http://poap.xyz/discord](http://poap.xyz/discord)\\\nJoin Snapshot Discord: [https://discord.gg/snapshot](https://discord.gg/snapshot)\n\n\\\n"
},
{
"id": 63,
"content": "---\ndescription: Learn what HAL plugin is and how to add it to your space.\n---\n\n# HAL Notifications\n\nHAL is a crypto notification system which makes it simple for DAOs to monitor and build automated workflows based on governance data. The HAL plugin allows you to alert space members about new and ended proposals on Snapshot.\n\n## Setup & how it works\n\n### 1. Go to your space settings\n\nIn order to add a plugin head to your space settings by clicking **Settings** on your space's page:\n\n![](<../../.gitbook/assets/image (15) (2).png>)\n\n### 2. Add the HAL plugin <a href='#bfec' id='bfec'></a>\n\nScroll down to the **Plugins** section and click **Add plugin**. Select the plugin you want to add in the pop-up window:\n\n<figure><img src='../../.gitbook/assets/image (25) (1).png' alt=''><figcaption></figcaption></figure>\n\nThere is no need for additional setup, you can leave the input box empty and lick on **Add:**\n\n<figure><img src='../../.gitbook/assets/image (5) (2).png' alt=''><figcaption></figcaption></figure>\n\n### **3. Save your settings**\n\nScroll up to the top of the page and click **Save** to update your space's settings. The plugin will affect all the newly created proposals.\n\n### 4. Create a proposal\n\nCreate a new proposal for your space. You don't need to set anything up for the HAL notifications, they will be enabled automatically.\n\n### 5. Get notified\n\nUsers can now head to the proposal's page and click **Be notified** to receive notifications about the proposal.\n\n<figure><img src='../../.gitbook/assets/image (7).png' alt=''><figcaption></figcaption></figure>\n\nAs a next step users will be redirected to HAL's webpage in order to set up their custom notification rules:\n\n<figure><img src='../../.gitbook/assets/image (29).png' alt=''><figcaption></figcaption></figure>\n\nThat's it! You're all set up and users can receive direct notifications about the Snapshot proposals :tada:\n"
},
{
"id": 64,
"content": "---\ndescription: Learn what Gnosis Impact plugin is and how to set it up for your space.\n---\n\n# Gnosis Impact\n\nThe [Gnosis Impact app](https://impact.gnosis.io/) is a tool for projecting into the future. The app uses simple analysis of prediction markets to expose the price that traders are willing to pay for an asset in the condition that a particular event occurs. This information is an invaluable decision-making tool as it gives insight into how the market perceives the event impacting the relative value of asset pairs.\n\n## Setup\n\n### 1. Go to your space settings\n\nIn order to add a plugin head to your space settings by clicking **Settings** on your space's page:\n\n<figure><img src='../../.gitbook/assets/image (16) (2).png' alt=''><figcaption></figcaption></figure>\n\n### **2. Add the plugin**\n\nScroll down to the **Plugins** section and click **Add plugin**. Select the plugin you want to add in the pop-up window:\n\n<figure><img src='../../.gitbook/assets/image (6) (1).png' alt=''><figcaption></figcaption></figure>\n\nThere is no need to provide additional information at this step, simply click **Add** and you should see the Gnosis Impact plugin listed in the plugins section.\n\n### 3. Save your settings\n\nDon't forget to save your space settings! Go to the top of the page and click **Save.**\n\n### 4. Create a new proposal\n\nDuring the proposal creation process you will be able to specify the following details for the Gnosis Impact plugin:\n\n\n\n<figure><img src='../../.gitbook/assets/image (4) (5).png' alt=''><figcaption></figcaption></figure>\n\n{% hint style='info' %}\nFor the final step in creating a GnosisDAO Snapshot poll, make sure you’re in touch with a [GnosisDAO Admin forum moderator](https://forum.gnosis.io/u/gnosisdao/) to obtain the Gnosis Impact **conditionID**. In the future, this step will be more user friendly, so that participants can easily do this on their own.\n{% endhint %}\n\nClick **Publish** and head to your proposal's page where users will be able to see the predicted price :tada:\n"
},
{
"id": 65,
"content": "# Comment Box\n\n{% hint style='warning' %}\nThe content of this page is being working on at the moment\n{% endhint %}\n"
},
{ "id": 66, "content": "# Plugins\n\n" },
{
"id": 67,
"content": "# Snapshot block number\n\nBlock number is important, to lock the state of community members who are able to vote. Meaning that if you attempt to vote on a proposal and block number is in the past, and you weren't holding required token yet, your vote will not be counted.\n\nExplained in depth:\n\n`H = h + ((t1 — t0) / a)`\n\nWhere:\n\n* `H` = target block height\n* `h` = current block height\n* `t0` = current timestamp \\(in seconds\\)\n* `t1` = target timestamp \\(in seconds\\)\n* `a` = average time to solve a block \\(in seconds\\)\n\nOr...\n\n`last_block_number + ((future_time - time_now) / block_time)`\n\nSo, for example, using a [current epoch time](https://www.epochconverter.com) of 1481214124, the epoch time of 1482537600 for midnight Christmas Eve, and the last block of 2771338:\n\n`2771338 + ((1482537600 - 1481214124) / 14) = 2865872`\n\n"
},
{ "id": 68, "content": "# Details\n\n" },
{
"id": 69,
"content": "# Rest API\n\n### Get all spaces\n\n{% embed url='https://hub.snapshot.page/api/spaces' %}\n\n### Get a single space\n\n{% embed url='https://hub.snapshot.page/api/spaces/yam' %}\n\n### Get all proposals of a space\n\n{% embed url='https://hub.snapshot.page/api/balancer/proposals' %}\n\n### Get all votes of a proposal\n\n{% embed url='https://hub.snapshot.page/api/balancer/proposal/QmQpKL29E6ydTvC6p9NoEbTda9ddDkVtWe2YWpWK3NFYqq' %}\n\n### Get a proposal\n\nYou can get a proposal content from IPFS directly using the proposal id:[ https://ipfs.io/ipfs/QmQpKL29E6ydTvC6p9NoEbTda9ddDkVtWe2YWpWK3NFYqq](https://ipfs.io/ipfs/QmQpKL29E6ydTvC6p9NoEbTda9ddDkVtWe2YWpWK3NFYqq)\n\n{% api-method method='get' host='https://hub.snapshot.page/api/voters?from=1608500000&to=1609500000&spaces=balancer,yam.eth' path='' %}\n{% api-method-summary %}\nList of voters\n{% endapi-method-summary %}\n\n{% api-method-description %}\nGet a list of all voters from specific spaces for a specific period.\n{% endapi-method-description %}\n\n{% api-method-spec %}\n{% api-method-request %}\n{% api-method-query-parameters %}\n{% api-method-parameter name='from' type='number' required=false %}\nTimestamp from\n{% endapi-method-parameter %}\n\n{% api-method-parameter name='to' type='number' required=false %}\nTimestamp to\n{% endapi-method-parameter %}\n\n{% api-method-parameter name='spaces' type='string' required=false %}\nSpaces ids separated with commas\n{% endapi-method-parameter %}\n{% endapi-method-query-parameters %}\n{% endapi-method-request %}\n\n{% api-method-response %}\n{% api-method-response-example httpCode=200 %}\n{% api-method-response-example-description %}\n\n{% endapi-method-response-example-description %}\n\n```\n[\n {\n 'address': '0xaaAb28818F71C96E13518025Cc063A1CA6F4Fd58',\n 'timestamp': 1609109064,\n 'space': 'yam.eth'\n },\n {\n 'address': '0xFdbE95Ec43ca5C77929a1c30E9Ee588c28c5C9B4',\n 'timestamp': 1609102537,\n 'space': 'yam.eth'\n },\n ...\n]\n```\n{% endapi-method-response-example %}\n{% endapi-method-response %}\n{% endapi-method-spec %}\n{% endapi-method %}\n\n### Testnet hub\n\nTo see content from [https://demo.snapshot.page](https://demo.snapshot.page/#/) you need to query the testnet hub at this url: [https://testnet.snapshot.page](https://testnet.snapshot.page/)\n\n"
},
{
"id": 70,
"content": "---\ndescription: Information about specific errors that can appear.\n---\n\n# Error messages\n\n| **Error code** | **Error information** |\n| :--- | :--- |\n| **`wrong message body`** | Message did not pass because body was empty or did not contain address or did not contain sig. |\n| **`wrong signed message`** | Message did dont have his local clock sync. |\n| **`wrong timestamp`** | User doesn't have local clock synced. |\n| **`wrong version`** | Hub version doesn't exist or is wrong. |\n| **`wrong message type`** | Message does not include a type. |\n| **`wrong signature`** | Body sig doesn't exist or is wrong. |\n| **`wrong proposal format`** | Proposal must include a title, a description, 2 choices, a block time, start and end dates. |\n| **`wrong proposal size`** | Proposal size is bigger or smaller than how it should minimum/maximum be. |\n| **`wrong proposal metadata`** | Proposal metadata is wrong. |\n| **`wrong proposal period`** | Proposal start date is greater than the end date. |\n| **`wrong vote format`** | Vote is wrong, must vote on a proposal that contains metadata and you must includea choice. |\n| **`wrong vote metadata`** | Vote metadata doesn't exist or is wrong. |\n| **`unknown proposal`** | Proposal is not found. |\n| **`not in voting window`** | You can't vote, time didn't start yet. |\n\n"
},
{
"id": 71,
"content": "---\ndescription: Create your own space on Snapshot!\n---\n\n# Create a space \\(on GitHub\\)\n\n### **1: Fork Snapshot spaces repository here**\n\n{% embed url='https://github.com/bonustrack/snapshot-spaces' caption='' %}\n\n{% hint style='info' %}\n**Update your fork with the original repo using Git**\n\nIf you have already forked a space, you must update your repo before submitting changes.\n\nUse the 4 commands below to sync your forked repository with the original repository.\n{% endhint %}\n\n```text\ngit remote add master https://github.com/snapshot-labs/snapshot-spaces.git\ngit fetch master\ngit checkout master\ngit merge master/master\n```\n\n### **2: Copy the space 'example' folder**\n\n{% embed url='https://github.com/bonustrack/snapshot-spaces/tree/master/spaces/example' caption='' %}\n\n```text\n|-- spaces\n |-- example\n |-- index.json\n |-- logo.png\n |-- space.png\n|-- skins (optional)\n |-- example.scss (optional)\n```\n\n### **3: Space metadata**\n\nNote that your path folder name will be the name that will show on the snapshot link:\n\n* https://snapshot.page/\\#/**your-space**\n\nExample: `index.json`\n\n```javascript\n{\n 'name': 'Your Space', // Name of your space (max 20 chars)\n 'network': '1', // What network you are on? (if on Ethereum it is '1', for other check: https://docs.snapshot.page/networks)\n 'symbol': 'SYMBOL', // Your main token symbol \n 'skin': 'your-space', // Copy skin filename 'example.scss' located at '/skins' folder and renaming it to 'your-space.scss'\n 'domain': 'vote.yourdomain.com', // Add your voting/governance subdomain if you have one\n 'strategies': [ // Strategies\n {\n 'name': 'erc20-balance-of', // Strategy name\n 'params': { // Strategy parameters\n 'address': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // Address of the base token\n 'symbol': 'SYMBOL', // Symbol of the base token\n 'decimals': 18 // Decimals of the base token\n }\n }\n ],\n 'members': [ // List of official addresses that can post in 'Core' tab of the space\n '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7' // Core member address\n ],\n 'filters': { // Filters\n 'defaultTab': 'all', // The default tab for the space\n 'minScore': 123, // Minimum balance from the base token that a user should have to show his proposal in the space (unless the address is a core address)\n 'onlyMembers': true // Shows only core tab and core proposals\n 'invalids': [ // List of proposals IDs (use this to remove a proposal from your space)\n 'QmXAZP8tYwX2zZz5EzfxLZUYJt6TM9EmxY1L4qodhZ5zcZ',\n 'QmXAZV8tYwX2zZz5EzfxLZUYJt6TM9EmxY1L4qodhZ5lbL'\n ]\n }\n}\n```\n\n#### **R**equired **fields:** `token, name, network, symbol, strategies`\n\n### **4: Add a logo and space images**\n\n1. You must add both `logo.png` and `space.png` images for your space with a size of 256 x 256 pixels.\n2. The file size should not exceed `50KB`.\n\n### **5: Create a skin \\(optional\\)**\n\n1. To create your own skin go to the `/skins` folder.\n2. Copy `example.scss` change the name to what you like \\(prefferably your space name\\).\n3. Change the colors, then make sure both the `scss` file and its class name are the same.\n4. Exampe: your file is `your-space.scss` class name should be `.your-space`\n5. Include your skin name in the `index.json` file as: `'skin': 'your-space'`\n6. Save it in `/skins` folder.\n\nExample: `your-space.scss`\n\n```css\n.your-space {\n --primary-color: #384aff;\n --bg-color: white;\n --text-color: #586069;\n --link-color: #111111;\n --heading-color: #111111;\n --border-color: #d1d5da;\n --header-bg: white;\n --block-bg: transparent;\n}\n```\n\n### **6: Make sure everything is ready**\n\nYour files should something like this:\n\n```text\n|-- spaces\n |-- your-space\n |-- index.json\n |-- logo.png\n |-- space.png\n|-- skins (optional)\n |-- your-space.scss (optional)\n```\n\n### **7: Make a pull request**\n\n* Please name your PR title on the model `Add SYMBOL space`\n* It may take 1 or 2 days to get your PR reviewed, merged and appear on Snapshot.\n\n"
},
{
"id": 72,
"content": "# Snapshot block number\n\nBlock number is important, to lock the state of community members who are able to vote. Meaning that if you attempt to vote on a proposal and block number is in the past, and you weren't holding required token yet, your vote will not be counted.\n\nExplained in depth:\n\n`H = h + ((t1 — t0) / a)`\n\nWhere:\n\n* `H` = target block height\n* `h` = current block height\n* `t0` = current timestamp \\(in seconds\\)\n* `t1` = target timestamp \\(in seconds\\)\n* `a` = average time to solve a block \\(in seconds\\)\n\nOr...\n\n`last_block_number + ((future_time - time_now) / block_time)`\n\nSo, for example, using a [current epoch time](https://www.epochconverter.com) of 1481214124, the epoch time of 1482537600 for midnight Christmas Eve, and the last block of 2771338:\n\n`2771338 + ((1482537600 - 1481214124) / 14) = 2865872`\n\n"
},
{
"id": 73,
"content": "---\ndescription: Avatars are optional.\n---\n\n# Add an avatar\n\nTo get a logo for your space, images you need to do a pull request on this repository:\n\n{% embed url='https://github.com/snapshot-labs/snapshot-spaces' %}\n\n#### Follow the Snapshot spaces directory tree\n\n```bash\n└── spaces\n └── my-space.eth\n ├── logo.png\n └── space.png \n```\n\n### **Add your space logo and strategy image\\(s\\)**\n\nYou will need to create a folder with the id of your space \\(example: 'my-space.eth'\\). In this folder you need a file 'space.png' and 'logo.png' \\(for the first strategy\\) and 'logo1.png' if you have a second strategy.\n\n{% hint style='danger' %}\nAll the images must be squared and less than 50kb.\n{% endhint %}\n\n{% hint style='info' %}\nAfter committing your PR, you will have to wait for the merge of your PR to be able to see your images live. This process can take a few hours.\n{% endhint %}\n\n"
},
{ "id": 74, "content": "# Archived\n\n" },
{
"id": 75,
"content": "---\ndescription: Learn how to create a new custom voting strategy.\n---\n\n# Create a voting strategy\n\nIf you can't find a strategy that fits your the needs of your space you can create a new custom one. Follow the steps below to learn how to do that:\n\n### 1. Fork the snapshot-strategies repository\n\nCreate a fork of the snapshot-strategies repository:\n\n{% embed url='https://github.com/snapshot-labs/snapshot-strategies' %}\n\n### **2. Duplicate the `erc20-balance-of` strategy folder** \n\nNavigate to `strategies` directory, duplicate the `erc20-balance-of` directory and rename it to the chosen name for your new strategy.\n\n```bash\n└── src\n └── strategies\n └── erc20-balance-of\n```\n\n### **3. Write the logic for your strategy**\n\nThere are several files you need to edit:\n\n#### a. `index.ts`\n\nThis file defines the logic for calculation of the voting power. As an example, the `erc20-balance-of` is taking as parameters `space`, `network`, `provider`, `addresses`, `options` and `snapshot` in order to be able to retrieve the balances of the token specified in the `options` parameter for the provided addresses:\n\n```typescript\n\nimport { BigNumberish } from '@ethersproject/bignumber';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicaller } from '../../utils';\n\nexport const author = 'bonustrack';\nexport const version = '0.1.1';\n\nconst abi = [\n 'function balanceOf(address account) external view returns (uint256)'\n];\n\nexport async function strategy(\n space,\n network,\n provider,\n addresses,\n options,\n snapshot\n): Promise<Record<string, number>> {\n const blockTag = typeof snapshot === 'number' ? snapshot : 'latest';\n\n const multi = new Multicaller(network, provider, abi, { blockTag });\n addresses.forEach((address) =>\n multi.call(address, options.address, 'balanceOf', [address])\n );\n const result: Record<string, BigNumberish> = await multi.execute();\n\n return Object.fromEntries(\n Object.entries(result).map(([address, balance]) => [\n address,\n parseFloat(formatUnits(balance, options.decimals))\n ])\n );\n}\n```\n\n#### b. `schema.json`\n\nDescribe the structure of your strategy by editing the `properties`, `required` and `additionalProperties` key-value pairs according to the logic from `index.ts` file:\n\n```json\n{\n '$schema': 'http://json-schema.org/draft-07/schema#',\n '$ref': '#/definitions/Strategy',\n 'definitions': {\n 'Strategy': {\n 'title': 'Strategy',\n 'type': 'object',\n 'properties': {\n 'symbol': {\n 'type': 'string',\n 'title': 'Symbol',\n 'examples': ['e.g. UNI'],\n 'maxLength': 16\n },\n 'address': {\n 'type': 'string',\n 'title': 'Contract address',\n 'examples': ['e.g. 0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'],\n 'pattern': '^0x[a-fA-F0-9]{40}$',\n 'minLength': 42,\n 'maxLength': 42\n },\n 'decimals': {\n 'type': 'number',\n 'title': 'Decimals',\n 'examples': ['e.g. 18']\n }\n },\n 'required': ['address', 'decimals'],\n 'additionalProperties': false\n }\n }\n}\n```\n\n\n\n#### c. `examples.json`\n\nProvide an example for the custom strategy setup which will be displayed on https://snapshot.org on the strategy's details page. \n\nMake sure to **include all the parameters you defined** above and a list of addresses to test against:\n\n```json\n[\n {\n 'name': 'Example query',\n 'strategy': {\n 'name': 'erc20-balance-of',\n 'params': {\n 'address': '0x6b175474e89094c44da98b954eedeac495271d0f',\n 'symbol': 'DAI',\n 'decimals': 18\n }\n },\n 'network': '1',\n 'addresses': [\n '0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11',\n '0xeF8305E140ac520225DAf050e2f71d5fBcC543e7',\n '0x1E1A51E25f2816335cA436D65e9Af7694BE232ad',\n '0x1F717Ce8ff07597ee7c408b5623dF40AaAf1787C',\n '0x1c7a9275F2BD5a260A9c31069F77d53473b8ae2e',\n '0x1d5E65a087eBc3d03a294412E46CE5D6882969f4',\n '0x1f254336E5c46639A851b9CfC165697150a6c327',\n '0x2ec3F80BeDA63Ede96BA20375032CDD3aAfb3030',\n '0x4AcBcA6BE2f8D2540bBF4CA77E45dA0A4a095Fa2',\n '0x4F3D348a6D09837Ae7961B1E0cEe2cc118cec777',\n '0x6D7f23A509E212Ba7773EC1b2505d1A134f54fbe',\n '0x07a1f6fc89223c5ebD4e4ddaE89Ac97629856A0f',\n '0x8d5F05270da470e015b67Ab5042BDbE2D2FEFB48',\n '0x8d07D225a769b7Af3A923481E1FdF49180e6A265',\n '0x8f60501dE5b9b01F9EAf1214dbE1924aA97F7fd0',\n '0x9B8e8dD9151260c21CB6D7cc59067cd8DF306D58',\n '0x17ea92D6FfbAA1c7F6B117c1E9D0c88ABdc8b84C',\n '0x38C0039247A31F3939baE65e953612125cB88268'\n ],\n 'snapshot': 11437846\n }\n]\n\n```\n\n#### d. `README.md`\n\nWrite the description of how the strategy works and provide an example of the setup. It will be displayed on the strategy's details page.\n\n```\nThis is the most common strategy, it returns the balances of the voters for a specific ERC20 token.\n\nHere is an example of parameters:\n\n{\n 'address': '0x6b175474e89094c44da98b954eedeac495271d0f',\n 'symbol': 'DAI',\n 'decimals': 18\n}\n```\n\n### **4. Test the strategy locally**\n\nOnce you saved all the files run the below command with the name of your new strategy:\n\n```javascript\nnpm run test --strategy=<STRATEGY NAME> // replace <STRATEGY NAME>\n```\n\nIt will trigger the tests which you can find in [this file](https://github.com/snapshot-labs/snapshot-strategies/blob/master/test/strategy.test.ts). If you get any errors read them carefully as they should point directly to the problem.\n\n### **5. Review the checklist**\n\nEnsure you meet the requirements for adding a new strategy by reviewing the checklist for adding a new strategy which can be found at: [https://github.com/snapshot-labs/snapshot-strategies#checklist-for-adding-a-new-strategy](https://github.com/snapshot-labs/snapshot-strategies#checklist-for-adding-a-new-strategy)\n\n### **6. Create a pull request**\n\nCreate a Pull Request with the above changes on the original [snapshot-strategies](https://github.com/snapshot-labs/snapshot-strategies/) repo.\n\nThe review can take the team up to 72 hours, so please be patient 🙏\n\nAfter the PR has been merged, you will need to wait for the release of a new version of [Snapshot](https://snapshot.org) which can take a couple of days. Once it's deployed you can move on to the next step.\n\n### 7. Try it out!\n\nHead to the strategy's details page and click **Playground** button. Follow the instructions from [#testing-a-voting-strategy](../../user-guides/strategies/what-is-a-strategy.md#testing-a-voting-strategy 'mention')to see if it works as you intended.\n\nCongrats, you've just added a new custom voting strategy! :tada:\n"
},
{
"id": 76,
"content": "---\ndescription: Create a validation strategy and use it in your own space\n---\n\n# Create a validation strategy\n\nTo add your own voting validation strategy on Snapshot you need to fork the **snapshot-strategies** repository and create a pull request.\n\n{% embed url='https://github.com/snapshot-labs/snapshot-strategies' %}\n\n### 1. Navigate to the **`src\\validations.`**\n\n```bash\n└── src\n └── validations\n └── basic\n```\n\n### 2. Create a copy of the **`basic`** strategy folder and rename it to the name of your voting validation.\n\n### 3. Customize the logic of your voting validation.\n\nIf you are not sure about the `Validation` class, have a look at its definition:\n\n{% embed url='https://github.com/snapshot-labs/snapshot-strategies/blob/master/src/validations/validation.ts' %}\n\nThe validation name has to be included in the[ `index.ts`](https://github.com/snapshot-labs/snapshot-strategies/blob/master/src/validations/index.ts) in the `validationClasses` variable.\n\n### 4. Test your validation\n\nTo make sure your validation passes all tests, run:\n\n```javascript\nnpm run test --validation=<VALIDATION NAME> // replace <VALIDATION NAME>\n```\n\n### 4. Make sure you pass the checklist\n\nHave a look here on the requirements for adding a new validation strategy and make sure you full fill the points in the checklist: \n\n[https://github.com/snapshot-labs/snapshot-strategies#checklist-for-adding-a-new-strategy](https://github.com/snapshot-labs/snapshot-strategies#checklist-for-adding-a-new-strategy)\n\n### 5. Create a pull request\n\nThe team will then review your PR and after it's approved and merged it will be available to chose in your space settings.\n"
},
{
"id": 77,
"content": "---\ndescription: >-\n You can contribute to Snapshot by creating new unique voting a validation\n strategies. Follow the below guides to learn more.\n---\n\n# Create a strategy\n\n{% content-ref url='create-1.md' %}\n[create-1.md](create-1.md)\n{% endcontent-ref %}\n\n{% content-ref url='create-1-1.md' %}\n[create-1-1.md](create-1-1.md)\n{% endcontent-ref %}\n"
},
{
"id": 78,
"content": "# 🙋♂️ Support\n\n### Get started\n\n* When someone asks a question on Discord, if you know the answer, feel free to answer. If you don't know the answer you can:\n * Search on Discord if the question was asked already. \n * Try to figure it out by yourself, Snapshot documentation may help.\n* When someone reports an issue, the first thing you can do is to try it by yourself. If you can reproduce the issue and it's something that is obviously not working you can create an issue on GitHub here: [https://github.com/snapshot-labs/snapshot/issues/new?template=bug\\_report.md](https://github.com/snapshot-labs/snapshot/issues/new?template=bug\\_report.md)\n* If someone spams or promotes a project for no reason, please contact an admin.\n* The more you know about Snapshot the easier it will be for you to help others, if you have questions feel free to ask in the #helpdesk channel, and an admin will answer.\n"
},
{
"id": 79,
"content": "---\ndescription: Learn how you can contribute to Snapshot.\n---\n\n# Contribute\n\n## **Do you want to contribute to Snapshot?** \n\nThere are many ways you can help, and you don't need to be a developer for that.\n\n1. Join our Discord Channel [https://discord.snapshot.org](https://discord.snapshot.org)\n2. Go to the #get-role channel and pick an appropriate role. \n\n\\\n**Space creator** \n\nYou are a space creator or space admin.\n\n**Integrator** \n\nYou are a developer and you integrate or plan to integrate Snapshot.\n\n**Contributor** \n\nYou want to contribute to Snapshot as a developer and earn by working on bounties.\\\n\\\n"
},
{
"id": 80,
"content": "---\ndescription: >-\n To create your space on Snapshot you need to have an ENS domain. This page\n will take you through the steps to create an ENS domain.\n---\n\n# Register an ENS domain\n\n{% hint style='warning' %}\n**ENS on Ethereum Mainnet**\n\nTo register a space on [https://snapshot.org](https://snapshot.org) you need an ENS domain on the **Ethereum Mainnet** even if you want to use Ethereum Testnet or any other network (Binance Smart Chain, xDAI, etc).\\\n\\\nHowever if you want to experiment with the platform you can register a test space on [https://demo.snapshot.org](https://demo.snapshot.org) using an ENS on Goerli Testnet. \n{% endhint %}\n\nIf you already have an ENS domain, feel free to skip this and follow the [.](./ 'mention') guide.\n\n### **Creating an ENS Domain**\n\n**1a.** Search for the availability of your name on Snapshot's `Create a space` page\n\n**1b.** Search for the availability of your name on ENS by following this link: [https://app.ens.domains/](https://app.ens.domains/) \n\n**2.** If the name is available you will be able to see the 3 steps and the registration fee. Please note that the names with 3 or 4 characters cost considerably more than the names with 5+ characters. \\\n****\n\n![](https://lh6.googleusercontent.com/iE8w0jmuNrDV7jtpFPUYxB0rgSF6SKpU8OTNdVlvMaYaem1MzHglWQ9S99h2Ub-PWVJTDvOBbxGKA\\_7OuNHe6-YIt003oEdvudCZG37xAuUXSmJP5PXl-1By7s8betevYzuID3c=s0)\n\n**3.** Connect your wallet by tapping on the `Connect` button on the top left corner of your screen. Make sure your wallet has enough balance to make the transaction successful and that you selected the Ethereum Mainnet (or Goerli Testnet for the demo page).\n\n**4.** Confirm all transactions for the three steps from your chosen wallet provider. **** \\\n****\n\n![](https://lh5.googleusercontent.com/d11GatKZ1P25f-uE1RphuiPEEf1V5ni-zX4hF4CKJYWaZUKWojmdbDw5wxxudYRVJMzoGxmP9MNhsh-lYVJEWdFu5zurWD1DXOkoYr6gMznyIRf0roFCuBXaimPdbmiqx\\_QNnqY=s0)\n\n**5.** You have now successfully registered on ENS! Additionally, you can also make your Ethereum address point to an ENS name by clicking on ‘Set Reverse Record’ or by going to 'My Account' and then selecting 'Reverse record' and completing the transaction.\n\n**Congratulations! You have created your domain on ENS. You are now ready to create your space on Snapshot.**\n\n{% hint style='info' %}\nIf you want to register a custom domain you already own check out this guide: [https://docs.ens.domains/dns-registrar-guide](https://docs.ens.domains/dns-registrar-guide)\n{% endhint %}\n\n****\n"
},
{
"id": 81,
"content": "# Alternative way to create a space\n\nIf you do not want to have the wallet control your settings, you can follow the steps below to create a space on Snapshot.\n\n### **Drawbacks**\n\n* You will not be able to change settings from the UI\n* Every time you want to change the settings, you will need to broadcast a new transaction\n\n### **How to Create Space**\n\n* Create a JSON file for your settings on Snapshot. The format of the JSON file could be as follows: **** [https://github.com/snapshot-labs/snapshot.js/blob/master/test/examples/space.json](https://github.com/snapshot-labs/snapshot.js/blob/master/test/examples/space.json)\n* Store the JSON file on IPFS\n* Use the IPFS link on the ENS text record. This will make the ENS owner the only controller of the settings. **** \n\n![](https://lh6.googleusercontent.com/qfA-Pj7o2Fvld76V2gZIJm9U1V0uRBgNdedfxU4iKjGDfE3cHH7KLMx26eawZPD0Zl8j3H7AAfFsToDdl9ViQ5Y7WyI8FACqVlkc5JG9zwcyZg877KmnH6cf2vleHnn-icWLGTg=s0)\n\n* You can check if your space is valid from the GitHub link below [https://github.com/snapshot-labs/snapshot.js/blob/a0adc547aa0922aa6abd35708a4a292048bca6a2/test/schema.ts#L4](https://github.com/snapshot-labs/snapshot.js/blob/a0adc547aa0922aa6abd35708a4a292048bca6a2/test/schema.ts#L4)\n* Once the above transaction is successful, go to the below link to update the space in Snapshot:\n\n `https://hub.snapshot.org/api/spaces/`**`<ENS DOMAIN>`**`/poke`\r"
},
{
"id": 82,
"content": "---\ndescription: >-\n This page guides you step by step through the process of creating a space for\n your organization.\n---\n\n# Create a space\n\n{% hint style='danger' %}\nIf you already have a space without ENS domain (legacy), you need to [Migrate your space to ENS](https://docs.snapshot.page/spaces/migrate).\n{% endhint %}\n\n{% hint style='info' %}\nIf you want to use Snapshot in a demo mode to experiment with the platform head to [https://demo.snapshot.org](https://demo.snapshot.org) - our playground connected to the Goerli Testnet. Make sure to provide an ENS name registered on Goerli Testnet in the first step below.\n{% endhint %}\n\n### 1. Set or get an ENS domain for your space\n\nTap the plus **`+`** button in the left sidebar to create a new space.\n\n![](<../../../.gitbook/assets/Capture d’écran 2022-08-11 à 12.30.46.png>)\n\nIf you already own an ENS domain, make sure you are connected to [snapshot.org](https://snapshot.org/#/setup) with the **Ethereum address** that is set as **controller of your ENS name** (if you are confused about the difference between ENS Registrant and Controller, have a read [here](https://docs.ens.domains/permanent-registrar-faq#what-is-the-registrant-and-controller-of-a-name)). \n\nIf the above condition is met, your ENS name will appear. To confirm it's correct, click on it.\\\n\\\n\n\n{% hint style='info' %}\nIf you **don't own an ENS domain** you will have to register one. \\\n\\\nEnter a name that suits the needs of your DAO in the `register a new domain` field and click `Register.` You can then follow [before-creating-your-space.md](before-creating-your-space.md 'mention') and come back here for step 2 once domain has been registered.\n{% endhint %}\n\n### 3. Create your profile\n\nTo complete the profile of your space you have to enter a name for your DAO (mandatory) and can add further optional information like a description, avatar, categories describing the field that your DAO is operating in and more. \n\nYou can add or update this information after you have finished creating the space.\n\n![](<../../../.gitbook/assets/Capture d’écran 2022-08-11 à 12.53.39.png>)\n\n### **4. Set your very first strategy**\n\nYour space can combine up to 8 voting strategies which will be responsible for calculating the users' voting power. The setting affects all proposals that will be created for that space. \n\n{% hint style='info' %}\nIf you would like to differentiate the calculation of users' voting power between proposals you will have to create a sub-space. Head to [sub-spaces.md](../sub-spaces.md 'mention') to learn more.\n{% endhint %}\n\nFor the initial setup you have to choose one of the three following strategy types to then specify the strategy details:\n\n![](<../../../.gitbook/assets/Capture d’écran 2022-08-11 à 12.33.32.png>)\n\n### Voting strategies types \n\nLet's have a look at each of the possible options and see how you can specify the strategy details.\n\n{% hint style='info' %}\nEach strategy is taking into account the assets that belong to the voting address **at the time of proposal creation**, not at the time of voting.\n{% endhint %}\n\n#### Token weighted voting\n\nVoting power is weighted by the amount of the token held by the user. The token can be an ERC-20, ERC-721 or ERC-1155 token standard.\n\n1. Select your token network\n2. Select your token standard\n3. Enter your token contract address\n\n![](<../../../.gitbook/assets/Capture d’écran 2022-08-11 à 12.37.27.png>)\n\n#### One person, one vote\n\nThis option can be used in two different ways:\n\n* **Whitelist voting** lets you specify a list of addresses that will be able to vote\n* **Ticket voting** will let any wallet vote (option used mostly for testing purposes)\n\n![](<../../../.gitbook/assets/Capture d’écran 2022-08-11 à 13.24.40.png>)\n\n#### Custom setup\n\nIf you feel ready to dive deeper into the custom setup here are a few hints that you may find useful:\n\n* You can select up to 8 different strategies. Voting power is cumulative.\n* Network can be selected individually for each strategy. This way you can leverage multi-chain voting power calculation.\n* It is possible to set a different symbol for each strategy. They will be displayed on the proposal page.\n* You can write a custom voting strategy if the existing ones are the sufficient for your needs. Have a look at [create-1.md](../../../developer-guides/create-a-strategy/create-1.md 'mention') to learn more.\n\n\\\nAt the time of writing this article there are around 415 Snapshot voting strategies and this number keeps growing. [Learn more about the strategies. ](../../strategies/what-is-a-strategy.md)\n\n![](<../../../.gitbook/assets/Capture d’écran 2022-08-11 à 13.25.04 (1).png>)\n\n## Moderation\n\n**Admins** will be able to edit the space settings and moderate proposals. \n\n**Authors** will be able to create proposals without any constraints like proposal validation. Make sure that members specified in authors field are allowed to submit a proposal.\n\n{% hint style='info' %}\nYou can add between 1 and 100 addresses. Each line should be an individual address - do not list multiple addresses in on line with any characters like commas, dots or semicolons.\n{% endhint %}\n\n![](<../../../.gitbook/assets/Capture d’écran 2022-08-12 à 13.53.21.png>)\n\n## Your space is live !\n\n![](<../../../.gitbook/assets/Capture d’écran 2022-08-12 à 13.53.39.png>)\n\n### What else can I customize?\n\n{% content-ref url='../add-custom-domain.md' %}\n[add-custom-domain.md](../add-custom-domain.md)\n{% endcontent-ref %}\n\n{% content-ref url='../add-skin.md' %}\n[add-skin.md](../add-skin.md)\n{% endcontent-ref %}\n"
}
]
}