Skip to content

How to vote and execute a proposal

Christoph Jentzsch edited this page Apr 16, 2016 · 12 revisions

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 con not 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 (can not be transferred) until the end of the debating period to prevent multiple votes on the same proposal by the same tokens.

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, votedNoandcreator`. 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 the \verb|transactionData| matches the proposal ID. Then it checks whether the quorum has been met (see Eq. \ref{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 closing the proposal in the case 27 days have passed after the end of the debating period.

Remark

There are tow possible reasons why it may be impossible to execute a proposal.

  1. The deposit can not be payed back, because the creator of the proposal is a contract with a fallback function that consumer 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 this could happen. But in case it does happen, there exists a emergenyCloseProposal function, which takes the proposal ID as parameter and closes the proposal. This function can only be called 5 days after the end of the voting deadline.

Clone this wiki locally