The-Dao

我可以對每個 The DAO 提案進行多次投票嗎?

  • May 29, 2016

有人在 The DAO 論壇執行緒中表示投票開始了,他們能夠對提案進行多次投票。

我可以對每個 The DAO 提案進行多次投票嗎?

以下是vote()The DAO原始碼中的函式。

function vote(
   uint _proposalID,
   bool _supportsProposal
) onlyTokenholders noEther returns (uint _voteID) {

   Proposal p = proposals[_proposalID];
   if (p.votedYes[msg.sender]
       || p.votedNo[msg.sender]
       || now >= p.votingDeadline) {

       throw;
   }

   if (_supportsProposal) {
       p.yea += balances[msg.sender];
       p.votedYes[msg.sender] = true;
   } else {
       p.nay += balances[msg.sender];
       p.votedNo[msg.sender] = true;
   }

   if (blocked[msg.sender] == 0) {
       blocked[msg.sender] = _proposalID;
   } else if (p.votingDeadline > proposals[blocked[msg.sender]].votingDeadline) {
       // this proposal's voting deadline is further into the future than
       // the proposal that blocks the sender so make it the blocker
       blocked[msg.sender] = _proposalID;
   }

   Voted(_proposalID, _supportsProposal, msg.sender);
}

函式中的第一個條件語句vote()

if (p.votedYes[msg.sender]
   || p.votedNo[msg.sender]
   || now >= p.votingDeadline) {

   throw;
}

如果您的賬戶已經對提案投了贊成票 ( ) 或反對票 ( ),取消您的交易**(** ) throw``p.votedYes[msg.sender]``p.votedNo[msg.sender]

如果您在提案投票截止日期後投票(now >= p.votingDeadline),您的交易也將被取消。

當您的交易被取消時,會消耗一點氣體(乙太幣)。


檢驗我的假設

以下是從同一賬戶為同一提案發送投票的兩筆交易:

這兩個事務都是對vote()函式的呼叫,因為簽名使用web3.sha3('vote(uint256,bool)').substr(0, 10)產生的結果0xc9d27afe與兩個事務中的輸入數據的開始相匹配。

這是顯示交易取消的第二筆交易。 在此處輸入圖像描述

第一次交易手續費為 0.001489425 ether,第二次取消交易手續費為 0.00315 ether。請注意,第二次取消的交易比第一次成功的交易花費更多。


MyEtherWallet 與乙太坊錢包(霧)

來自匿名有用的 DAOHub 論壇使用者的結果更新:

  • MyEtherWallet 目前允許您對來自同一賬戶的同一提案進行多次投票。
  • 乙太坊錢包(Mist)將在您第一次投票後通知您該帳戶已被鎖定。如果您選擇繼續,它會在執行交易之前向您顯示一條消息“數據無法執行,因此它將使用所有提供的氣體”。

引用自:https://ethereum.stackexchange.com/questions/4405