Skip to content

How to vote and execute a proposal

CryptoScalper edited this page May 7, 2016 · 12 revisions

DAO Wiki - Reliable

Voting

Every token holder can vote on a proposal by calling the vote function. This function has 2 parameters:

  • proposalID The ID of the proposal.
  • supportsProposal A boolean (yes/no) on whether the voter supports the proposal or not.

A vote can only be done once and cannot be changed. After the debating period of the proposal it is not possible to vote on it. Additionally the tokens belonging to the address of the sender of the transaction are blocked (cannot be transferred or split) until the end of the debating period to prevent people from voting on proposals and then splitting to not face the consequences of the vote.

WARNING: Be very careful before voting on a proposal. Make sure to double check the proposal's voting deadline because once you vote, your tokens will be blocked from splitting or transferring to another account for the duration of the vote's debating period.

Proposal can be viewed using the public proposals array which is visualized in the Mist Wallet. There one can view the parameters of a given proposal by providing the proposal ID. Those parameters are: recipient, amount, description, votingDeadline, open, proposalPassed, proposalHash, proposalDeposit, newCurator, splitData, yea, nay, votedYes, votedNo and creator. The definition of those can be read in the white paper section 6.3.

As a helper to the voter, there exist a function called checkProposalCode. This function is used to check that a certain proposal ID matches a certain transaction. The parameters of the function are:

  • proposalID
  • recipient
  • amount
  • transactionData

If the recipient, the amount and the transactionData match the proposal ID, the function will return true, otherwise it will return false (in Mist this denoted with code checks out). This will be used to verify that the proposal ID matches what the DAO token holder thinks they are voting on.

Executing

After the debating period is over, everyone can call the function executeProposal. The parameters are:

  • proposalID
  • transactionData

The function checks whether the voting deadline has passed and that transactionData matches the proposal ID. Then it checks whether the quorum has been met (see Eq. (1) for minQuorum) and if the proposal had a majority of support. If this is the case, it executes the proposal and refunds the proposal deposit. If the quorum has been achieved, but the proposal was declined by the majority of the voters, the proposal deposit is refunded and the proposal closes. In the case of a new Curator proposal, it does nothing but closes the proposal when 27 days have passed after the end of the debating period.

Remark

There are two possible reasons why it may be impossible to execute a proposal:

  1. The deposit cannot be payed back, because the creator of the proposal is a contract with a fallback function that consumes more than 9000 gas.

  2. The function called by executing the proposed transaction throws an exception for whatever reason.

Token holders should not vote on proposals where either of the above could happen. But in case one does, the proposal will close when executeProposal is called 10 days after the voting deadline.