教程
DAO:如何投票和执行提议

投票
每一个代币持有者可以通过调用vote
函数向提议投票。这个函数有两个参数:
-
proposalID
提议的ID。 -
supportsProposal
布尔值(yes/no)表示投票者是否支持提议。
投票只能执行一次,不能被修改。在提议的讨论期之后,将不能再对提议进行投票。另外,交易发送者的投票地址拥有的代币将会被锁定(不能被转移或者分割),至到提议讨论期结束,这样是为了防止人们向提议投票然后又分割,而逃避投票后应该承担的后果。
警告: 在对提议投票前要格外注意。确保已经充分验证了提议的投票终止日期,因为一旦你投票,你的代币会锁定而不能进行分割或者转移到其他账号,至到投票讨论期结束。
提议可以在Mist钱包使用公共变量proposals
数组来查看。可以根据提议的ID查看提议的参数。这些参数有:recipient
, amount
, description
, votingDeadline
, open
, proposalPassed
, proposalHash
, proposalDeposit
, newCurator
, splitData
, yea
, nay
, votedYes
, votedNo
和 creator
。这些参数的定义可以在白皮书的6.3节中看到。
为了帮助投票者,提供了函数checkProposalCode
。这个函数可以检查某个提议的ID匹配某个交易。这个函数的参数有:
* proposalID
* recipient
* amount
* transactionData
如果 recipient
, amount
和 transactionData
匹配提议ID,这个函数会返回true
,否则返回false
(在钱包里用code checks out
表示)。这个可以用来验证提议ID是不是DAO代币持有者想投的那个提议。
执行
在提议讨论期结束后,任何一个人可以调用executeProposal
函数。它的参数有:
* proposalID
* transactionData
这个函数会检查投票的终止日期是否已过,以及transactionData
是否匹配提议ID。然后它检查法定人数是否满足(参考minQuorum
),以及投票是否获得多数人同意。如果满足以上条件,会执行提议并且返还提议的押金。如果法定人数满足,但是提议被多数人拒绝,提议的押金会返还,提议会关闭。
如果是新的负责人的提议,函数什么也不做,除了在投票讨论期结束后的27天后关闭提议。
备注
有时候或许无法执行提议,这里有两个可能的原因:
押金不能被返还,因为提议的创建者是一个合约,它的回调函数需要消耗超过9000的gas。
调用执行提议的交易时可能因为各种原因抛出异常。
代币持有者不应该对有上述情况可能发生的提议进行投票。但是,如果一旦某人进行投票,提议会在executeProposal
调用后的投票的终止日期10天后关闭。