Snapshot

The voting platform

Snapshot is an off-chain voting platform that allows DAOs to vote easily and without gas fees.

There 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.

Key features

  • Free usage - create spaces, proposals and take part in organization's governance without any gas fees

  • Signed messages - votes are cast through signed messages easily verifiable online

  • Security - The message you sign in your wallet to cast the vote doesn’t affect your holdings or Web3 identity

  • Flexible voting strategies - customize how the voting power is calculated through single or combined strategies that enable voting with ERC20s, NFTs, SBTs, and more

  • Multiple voting systems - Democratic voting (one-person-one-vote), linear voting (one-token-one-vote), quadratic voting, and more

  • Proposal and voting validation - utilize Gitcoin Passport or other solutions to validate who can create a proposal or cast a vote

  • Testing - before deploying your space, you can test it on a demo version of snapshot. Moreover, the voting strategies can be tested on a playground

  • Open-source - All repositories are on GitHub

Spaces

You 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.

To create a space you need an ENS domain for the space. There are different roles in a space:

  1. Controller has a full control over the space settings including managing the list of admins. This is the owner of the ENS domain.

  2. Admin can edit space settings with the exception of the list of admin users and archive proposals

  3. Moderator can manage the space proposals and create proposals

  4. Author can create proposals regardless of their voting power and the proposal validation strategy

Organizations can create multiple spaces and link them together. You can define a main space, multiple sub-spaces, and link them. 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 sub-spaces with some of your most frequently used settings.

Proposals

Proposal 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.

Controllers, admins, moderators and authors can create a proposal. Alternatively, you can also specify a validation strategy for controlling who can create a proposal.

To create a proposal you have to specify a title, an optional description, a voting system and a voting period. Notice that the voting strategy is inherited from the space settings.

Each proposal have a snapshot (a timestamp in terms of blockchain block). The voting power of each user will be calculated for the state of the blockchains at this specific snapshot. It 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.

Voting

To cast a vote, you need to connect your wallet, go to the proposal you want to vote, and cast your vote. A vote is a message signed with your wallet and is saved on IPFS. You can also add a motivation for your vote.

Snapshot makes a (quite confusing) difference between voting strategy and voting system.

Voting strategy

A voting strategy is a set of conditions used to calculate user's voting power. In technical terms a strategy is a JavaScript function that returns a score for a set of addresses on a blockchain.

You can use a built-in strategy or create your own strategy. The voting strategy is decided at the space level, hence it is set for all proposals in the space.

The most popular strategy are:

  1. erc20-balance-of: it returns the balances of the voters for a specific ERC20 token

  2. ticket: it gives one voting power per one address, hence implements the democratic voting method

  3. erc721: it returns the balances of the voters for a specific ERC721 NFT

You can combine up to 8 different voting strategies on different chains. If a space has more voting strategies, the results of the voting is counted by summing the results of all its voting strategies.

Finally, you can test your strategy in a playground before deploying it.

Voting system

While a voting strategy is used to calculate the individual voting power of a user, the voting system calculates the outcome of the proposal.

Voting system is defined in the space settings or at the level of an individual proposal.

Examples of voting systems are:

  1. single choice: each 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.

  2. weighted voting: each 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

  3. quadratic voting: each user can spread voting power across any number of choices. The results are calculated according to the rules of quadratic voting, thanks to which the number of individual voters matters more than the sum of voting power contributed. In particular, each choice receives the sum of square roots of the votes expressed on that option

All relevant Snapshot links follow:

Last updated