教程

DAO:如何投票和执行提议

张亚宁   |     |   1554 次阅读

Default featured image huge

投票

每一个代币持有者可以通过调用vote函数向提议投票。这个函数有两个参数:

  • proposalID 提议的ID。
  • supportsProposal 布尔值(yes/no)表示投票者是否支持提议。

投票只能执行一次,不能被修改。在提议的讨论期之后,将不能再对提议进行投票。另外,交易发送者的投票地址拥有的代币将会被锁定(不能被转移或者分割),至到提议讨论期结束,这样是为了防止人们向提议投票然后又分割,而逃避投票后应该承担的后果。

警告: 在对提议投票前要格外注意。确保已经充分验证了提议的投票终止日期,因为一旦你投票,你的代币会锁定而不能进行分割或者转移到其他账号,至到投票讨论期结束。

提议可以在Mist钱包使用公共变量proposals数组来查看。可以根据提议的ID查看提议的参数。这些参数有:recipient, amount, description, votingDeadline, open, proposalPassed, proposalHash, proposalDeposit, newCurator, splitData, yea, nay, votedYes, votedNocreator。这些参数的定义可以在白皮书的6.3节中看到。

为了帮助投票者,提供了函数checkProposalCode。这个函数可以检查某个提议的ID匹配某个交易。这个函数的参数有:
* proposalID
* recipient
* amount
* transactionData

如果 recipient, amounttransactionData 匹配提议ID,这个函数会返回true,否则返回false(在钱包里用code checks out表示)。这个可以用来验证提议ID是不是DAO代币持有者想投的那个提议。

执行

在提议讨论期结束后,任何一个人可以调用executeProposal函数。它的参数有:
* proposalID
* transactionData

这个函数会检查投票的终止日期是否已过,以及transactionData 是否匹配提议ID。然后它检查法定人数是否满足(参考minQuorum),以及投票是否获得多数人同意。如果满足以上条件,会执行提议并且返还提议的押金。如果法定人数满足,但是提议被多数人拒绝,提议的押金会返还,提议会关闭。
如果是新的负责人的提议,函数什么也不做,除了在投票讨论期结束后的27天后关闭提议。

备注

有时候或许无法执行提议,这里有两个可能的原因:

  1. 押金不能被返还,因为提议的创建者是一个合约,它的回调函数需要消耗超过9000的gas。

  2. 调用执行提议的交易时可能因为各种原因抛出异常。

代币持有者不应该对有上述情况可能发生的提议进行投票。但是,如果一旦某人进行投票,提议会在executeProposal 调用后的投票的终止日期10天后关闭。

原文:How to vote and execute a proposal
译者:@rubyu2

 
4 人喜欢