Skip to content

Governance and Voting

Curve governance and voting is a integral part of the protocol as all relevant contract are in full control of the DAO. Curve uses Aragon for governance and control of the protocol admin functionality. Interaction with Aragon occurs through a modified implementation of the Aragon Voting App.

Curve's governance system is fully controlled by the DAO and extends to all deployed chains. Not only the Ethereum mainnet, but also all EVM sidechains. Due to the limitation of veCRV being on Ethereum only, all votes (also crosschain ones) are voted on Ethereum.

CurveDAO Package

Curve developed a Python package to help make the process of creating and decoding proposals easier. For more information, see the here.


Aragon

Curve has two different voting agents, a ownership and parameter agent. While the ownership agent is used for critical changes such as changing the DAO's voting address, the parameter agent is/was mainly used for changing pool parameters. Recently, usage of the parameter agent decreased as parameter changes are now mainly also handled by the ownership agent.

These contracts are the entry points for creating new votes. Both votes have different quorum and support requirements (more down below).


Quorum and Support Requirements

Quorum and support requirements are different for each vote type:

  • Ownership Votes: 30% quorum, 51% support
  • Parameter Votes: 15% quorum, 60% support

Generally, these values can be fetched from the OwnershipVoting and ParameterVoting contracts:

VotingContract.supportRequiredPct()     # minimum support
510000000000000000                      # 51%

VotingContract.minAcceptQuorumPct()     # minimum quorum
300000000000000000                      # 30%

Creating a Vote

The VotingOwnership and VotingParameter contracts are the entry points for creating new votes. New votes are created by calling the newVote function and passing in the executionScript and metadata as arguments. New votes can only be created by wallets with at least 2500 veCRV. Voting duration, regardless of the vote type, is 7 days. Once created, proposals can not be deleted or altered.

Notebook for Creating a Vote

To simplify this process, a simple notebook is avaliable to create a new vote. It uses a GoogleColab with Titanoboa (which allows for the connection of a wallet like Rabby or MetaMask) which not only allows the simulation, but also the creation of the vote. One simply needs to modify the script accordingly and run it.

https://colab.research.google.com/drive/1SEmqdBgY3Pcg7q4XWGIoQOc1q5GEVGR6?usp=sharing


Voting on Proposals

Any user with a veCRV balance can vote on a proposal. Vote duration is always 7 days and a vote can not be changed once it has been conducted.

Voting power starts decaying halfway through the voting period. If a user starts with 1000 veCRV, and the voting period is 7 days, they will still have a voting power of 1000 veCRV after 3.5 days but its starting to decay linearly until the end of the voting period. So, after another 1.75 days, the user will have a voting power of 500 veCRV, etc. This precausion taken to avoid whales from manipulating votes voting at the last minute.

Voting Power Decay

Executing a Vote

After a vote has reached support and quorum, it can be executed. Execution of votes is fully permissionless (anyone can execute a vote; no minimum veCRV required; only some ETH for gas required) and once done, the executionScript passed in when creating the vote is executed.

Execution can either be done through the Curve UI or directly from the according Voting Contract.

VotingContract.executeVote()