ViperSwap governance is carried out using:

Governance forum

Our governance forum is intended to be used as an initial discussion forum where ideas can be proposed, discussed and refined before an actual on-chain vote takes place.
The forum will also be used for signalling and announcing new on-chain votes that the community needs to vote on.

Snapshot voting

When a proposal has been discussed on the governance forum it'll be proposed on our snapshot page on
Whenever a proposal is submitted for voting a snapshot will be taken of a user's ViperVote balance at a specific block height. That balance then represents the total amount of eligible votes a specific user can cast for the given proposal.


Voting on is carried out using a special ViperVote token.
The token is a read-only representation of a user's specific involvement in the Viper ecosystem. The token won't be airdropped, you just need to add it as a custom token to MetaMask using the following address:

ViperVote design

A user's balance of the ViperVote token represents the following:
  • 4x of the user's $VIPER position in the $VIPER / $ONE pool
  • 2x of the user's $VIPER position in the ViperPit
  • 33% of the user's locked $VIPER tokens
  • 25% of the user's unlocked $VIPER tokens

Voting proposal rules

Voting proposals on the governance Snapshot platform are currently created by the VenomDAO team. Community initiated voting proposals will be initiated at a later stage.

Official votes

For official voting proposals to pass they need to meet the following criteria:
  • >55% approval.
  • >10% of eligible votes voting to establish the quorum.

Community votes

For community proposals to pass they need to meet the following criteria:
  • >66% approval.
  • >20% of eligible votes voting to establish the quorum.


The required quorum that needs to be achieved for a given proposal is based on the ViperVote token's total supply at the time of the snapshot for the given vote.
The total supply is calculated using the exact same set of rules as outlined in the "ViperVote design" section above.
Here's an example for how the minimum required vote count and minimum required quorum for a given vote will be determined:
const votingRequirement = 55
const quorumRequirement = 10
const voteToken = await ethers.getContract('GovernanceVote')
const voteTokenSymbol = await voteToken.symbol()
const totalSupply = await voteToken.totalSupply()
const requiredVotes = totalSupply.mul(BigNumber.from(votingRequirement)).div(BigNumber.from(100))
const requiredQuorumSupply = totalSupply.mul(BigNumber.from(quorumRequirement)).div(BigNumber.from(100))
console.log(`Total supply is: ${ethers.utils.formatEther(totalSupply)} ${voteTokenSymbol}`)
console.log(`Required votes (>${votingRequirement}%): ${ethers.utils.formatEther(requiredVotes)} ${voteTokenSymbol}`)
console.log(`Required quorum (>${quorumRequirement}%): ${ethers.utils.formatEther(requiredQuorumSupply)} ${voteTokenSymbol}`)
Total supply is: 100682379.46645303682517042 ViperVote
Required votes (>55%): 55375308.706549170253843731 ViperVote
Required quorum (>10%): 10068237.946645303682517042 ViperVote
For every proposal the script above will be executed and the estimated required vote count and the estimated required quorum count will be embedded in the voting proposal for the sake of clarity.