The Curve DAO: Governance and Voting
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.
Much of the following functionality is possible via the DAO section of the Curve website. The following section outlines DAO interactions via the CLI using the Brownie console.
Deployment addresses can be found in the addresses reference section of the documentation.
Creating a Vote
A single vote can perform multiple actions. The new_vote.py script in the DAO repo is used to create new votes.
Modify the
TARGET
,ACTIONS
andDESCRPTION
variables at the beginning of the script. The comments within the script explain how each of these variables work.Simulate the vote in a forked mainnet:
brownie run voting/new_vote simulate --network mainnet-fork
The simulation creates the vote, votes for it until quorum is reached, and then executes. The vote was successful if none of the transactions within the simulation fail. You can optionally include the
-I
flag to inspect the result of the vote once the simulation completes.Create the vote:
Modify the
SENDER
variable to use an account that is permitted to make a vote for the DAO you are targetting.Create the vote with the following command:
brownie run voting/new_vote make_vote --network mainnet
The vote should automatically appear within the site UX shortly.
Inspecting Votes
The decode_vote.py script in the DAO repo is used to decode a vote in order to see which action(s) it will perform.
To use the script, start by modifying the VOTE_ID
and VOTING_ADDRESS
variables at the start of the script. Then run the following:
brownie run voting/decode_vote --network mainnet
The script will output a list of transactions to be performed by the vote.
Voting
To place a vote via the CLI, first open a Brownie console connected to mainnet. Then use the following commands:
>>> aragon = Contract(VOTING_ADDRESS) >>> aragon.vote(VOTE_ID, MY_VOTE, False, {'from': acct}) Transaction sent: 0xa791801ccc57ad4edcfcaff7b5dab1c9101b78cf978a8d7fc185d9194bd3c2fa Gas price: 20.0 gwei Gas limit: 156299 Nonce: 23
VOTING_ADDRESS
is one of the voting addresses given above
VOTE_ID
is the numeric ID of the vote
MY_VOTE
is a boolean
Executing a Vote
To execute a vote via the CLI, first open a Brownie console connected to mainnet. Then use the following commands:
>>> aragon = Contract(VOTING_ADDRESS) >>> aragon.executeVote({'from': acct}) Transaction sent: 0x85d9194bd3c2fa1801ccc57ad4edcfa7978a8d7fc1caff7b5dab1c9101b78cf9 Gas price: 20.0 gwei Gas limit: 424912 Nonce: 24
VOTING_ADDRESS
is one of the voting addresses given above