Недопустимая ошибка назначения перехода при попытке передачи токенов DAO

Я перевел токены DAO с кошелька Mist на другой адрес и получил эту ошибку:

Обнаружены следующие ошибки: [323] неверный пункт назначения перехода (PUSH1) 2

TxHash есть, 0x368317115429c87184e9413e4777d7e986850cff339700ffe5f4a8e5db978af4и ошибка [323] invalid jump destination (PUSH1) 2отображается в VMTrace .

Почему простой перенос токена кошелька Mist может сделать это, и могу ли я безопасно просто выполнить повторный перевод, не беспокоясь о будущем выполнении этой первой попытки (т. Е. Эта транзакция мертва навсегда)?

ПРИМЕЧАНИЕ. Видел это на ESE, но, похоже, не говорил о моей ситуации: Ошибка во время выполнения контракта токена .

Ответы (1)

Резюме

Ваша транзакция была отменена, поскольку ваш токен DAO заблокирован Предложением № 17, за которое вы проголосовали. Эта блокировка будет действовать до вторника, 14 июня, 11:39:18 2016 (AEST), когда истечет крайний срок Предложения № 17.

Ваш максимальный газ в 121000 (0,00242 эфира) был потрачен из-за того, что было выдано это исключение.

В : Почему простой перевод токена кошелька Mist может сделать это?

О: Это ошибка, возникающая при вызове transfer(address _to, uint256 _value)функции, и она выдает ошибку, потому что ваши токены заблокированы.

Q : И могу ли я безопасно просто повторно передать, не беспокоясь о будущем выполнении этой первой попытки (т.е. этот txn мертв навсегда)?

A : Вы можете безопасно выполнить свою транзакцию снова. Если вы сделаете это до того, как ваши токены The DAO будут разблокированы, вы просто потратите больше газа, так как активируете тот же блок, поэтому подождите, пока не истечет срок действия блока.



Подробности

От EtherScan.io — 0x368317115429c87184e9413e4777d7e986850cff339700ffe5f4a8e5db978af4 , ваша учетная запись 0xc472806a7f4a0eba1f0142ccc62ac4373b785d3f.

Я использовал theDAOVoterсценарий Perl из Github — BokkyPooBah/TheDAOVoter , который описан в разделе Как я могу составить список предложений DAO и проголосовать из командной строки? чтобы проверить статус токена DAO для вашей учетной записи. Обратите внимание, что ваши суммы и предпочтения по голосованию были замаскированы:

user@Kumquat:~$ theDAOVoter --listaccounts --account=0xc472806a7f4a0eba1f0142ccc62ac4373b785d3f 
  # Account                                                            ETH                        DAO The DAO transfer blocked by OPEN proposal?
--- ------------------------------------------ --------------------------- -------------------------- ------------------------------------------
  0 0xc472806a7f4a0eba1f0142ccc62ac4373b785d3f        1.111111111111111111         2.2222222222222222 #17 OPEN until Tue Jun 14 11:39:18 2016
--- ------------------------------------------ --------------------------- -------------------------- ------------------------------------------
  1 Total                                             1.111111111111111111         2.2222222222222222

А также

user@Kumquat:$ theDAOVoter --listproposals --id=17 --account=0xc472806a7f4a0eba1f0142ccc62ac4373b785d3f  --checkvotingstatus --checkpastvotes
====================================================================================================================================================================================================================
Proposal 17. OPEN until Tue Jun 14 11:39:18 2016
Votes       Yea 49159666 (89.96%) Nay 5484074 (10.04%) Quorum 4.66% of 20%
Creator     0x6fc4d393bcebc69dbc8a6877e098babd19504e3b
Recipient   0xbb9bc244d798123fde783fcc1c72d3bb8c189413
Deposit     2 ETH
Amount      0 ETH
New curator N
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Raising the Proposal Deposit to 11 ETH  
  This Proposal will raise the deposit required to make a Proposal to The DAO from 2 ETH to 11 ETH. 

 An increase of the Proposal Deposit to **11 ETH** is expected to:

 - decrease the number of poorly thought-out proposals. 

 - help avoid the confusion and concern that could be caused by hundreds of proposals that cannot be adequately assessed by DAO Token Holders. 

 - reduce the number of spam proposals and amount of proposal-graffiti on The DAO. 

   Moreover, the time spent on reviewing proposals by DAO Token Holders should be valued.  Therefore, additional value will accrue to The DAO because of this Proposal from the proposal deposits that stay with
The DAO when proposals fail to reach quorum. 

 While an increase is necessary, **11 ETH is still within reach for small start-ups and individuals** that will want to offer services to The DAO.  

 [Join the conversation about this proposal on DAOhub.org](https://forum.daohub.org/t/raising-the-proposal-deposit-to-11-eth/4106)   

 ![Graphic: decrease proposals, increase quality](https://ipfs.pics/ipfs/Qmcg2geJ2eCSMEBBSbP8Z56AZgg6mnfTHo56t4SBC74873)   

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  # Account                                                            ETH                        DAO (Est)Gas Voting Status
--- ------------------------------------------ --------------------------- -------------------------- -------- -------------
  0 0xc472806a7f4a0eba1f0142ccc62ac4373b785d3f        1.111111111111111111         2.2222222222222222    70925 Voted XXX    
--- ------------------------------------------ --------------------------- -------------------------- -------- -------------
====================================================================================================================================================================================================================

И из данных транзакции 0xa9059cbb000000000000000000000000062e2cb3bdaeb58c79ff2dc43d37a5b99ce0cf1d000000000000000000000000000000000000000000000000002386f26fc10000и gethкоманды , которая web3.sha3('transfer(address,uint256)').substr(0,10)привела к "0xa9059cbb", вы попытались выполнить transfer(address _to, uint256 _value)функцию DAO.

Далее следует код этой функции (из EtherScan.io — The DAO Contract Source ). Ошибка, вероятно, вызвана !isBlocked(msg.sender)оператором.

function transfer(address _to, uint256 _value) returns (bool success) {
    if (isFueled
        && now > closingTime
        && !isBlocked(msg.sender)
        && transferPaidOut(msg.sender, _to, _value)
        && super.transfer(_to, _value)) {

        return true;
    } else {
        throw;
    }
}

Функция isBlocked(msg.sender)имеет следующий код, который проверяет, зарегистрирована ли ваша учетная запись с идентификатором предложения, и если да, то истек ли крайний срок предложения?

function isBlocked(address _account) internal returns (bool) {
    if (blocked[_account] == 0)
        return false;
    Proposal p = proposals[blocked[_account]];
    if (now > p.votingDeadline) {
        blocked[_account] = 0;
        return false;
    } else {
        return true;
    }
}

Когда вы проголосовали за какое-либо предложение, ваша учетная запись блокируется в соответствии с идентификатором предложения, за которое вы проголосовали. Это одно из двух blocked[msg.sender] = _proposalID;утверждений в vote()функции ниже:

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);
}
Конечно. Потерял след, кто из моих адресов за что голосовал. Есть ли интерфейс (или команда cli/geth) для отображения заблокированных адресов? Рад опубликовать новый Q, если это лучше.
Ознакомьтесь с используемой theDAOVoterкомандой CLI gethна github.com/bokkypoobah/TheDAOVoter . Рад получить обратную связь, если вы обнаружите какие-либо проблемы с ним. По умолчанию он будет обрабатывать все ваши учетные записи в gethхранилище ключей.
Сценарий отлично работает, но я заметил, что сообщение isblocked не исчезает, когда срок действия предложения истекает (например, № 17 OPEN до понедельника 13 июня 20:39:18 2016 все еще отображается). Означает ли это, что я все еще заблокирован, или мне нужно что-то сделать, чтобы сообщение с истекшим сроком действия исчезло?