Solidity

錯誤!無法生成合約字節碼和 ABI

  • July 26, 2021

在 etherscan.io 上驗證我的代幣合約時遇到問題。

收到以下錯誤:注意:在 Txn# 期間創建了合約結果:與在此地址找到的輸入創建字節碼不匹配

錯誤!無法生成合約字節碼和 ABI

出於某種原因,我的輸入數據的結尾並沒有給我一個可以在其他人使用的地方使用的工作字節碼。這是簽訂契約的交易:0x776159bbc0f6e624e92a812ee98c1674e67a2ea3

編譯器警告:

myc:1:1: ParserError: 預期的編譯指示、導入指令或契約/介面/庫定義。[ ^ 任何幫助表示讚賞,我已經被困在這一點上幾天了,完全一無所知。

乾杯!

pragma solidity ^0.4.0;
contract Ballot {

   struct Voter {
       uint weight;
       bool voted;
       uint8 vote;
       address delegate;
   }
   struct Proposal {
       uint voteCount;
   }

   address chairperson;
   mapping(address => Voter) voters;
   Proposal[] proposals;

   /// Create a new ballot with $(_numProposals) different proposals.
   function Ballot(uint8 _numProposals) public {
       chairperson = msg.sender;
       voters[chairperson].weight = 1;
       proposals.length = _numProposals;
   }

   /// Give $(toVoter) the right to vote on this ballot.
   /// May only be called by $(chairperson).
   function giveRightToVote(address toVoter) public {
       if (msg.sender != chairperson || voters[toVoter].voted) return;
       voters[toVoter].weight = 1;
   }

   /// Delegate your vote to the voter $(to).
   function delegate(address to) public {
       Voter storage sender = voters[msg.sender]; // assigns reference
       if (sender.voted) return;
       while (voters[to].delegate != address(0) && voters[to].delegate != msg.sender)
           to = voters[to].delegate;
       if (to == msg.sender) return;
       sender.voted = true;
       sender.delegate = to;
       Voter storage delegateTo = voters[to];
       if (delegateTo.voted)
           proposals[delegateTo.vote].voteCount += sender.weight;
       else
           delegateTo.weight += sender.weight;
   }

   /// Give a single vote to proposal $(toProposal).
   function vote(uint8 toProposal) public {
       Voter storage sender = voters[msg.sender];
       if (sender.voted || toProposal >= proposals.length) return;
       sender.voted = true;
       sender.vote = toProposal;
       proposals[toProposal].voteCount += sender.weight;
   }

   function winningProposal() public constant returns (uint8 _winningProposal) {
       uint256 winningVoteCount = 0;
       for (uint8 prop = 0; prop < proposals.length; prop++)
           if (proposals[prop].voteCount > winningVoteCount) {
               winningVoteCount = proposals[prop].voteCount;
               _winningProposal = prop;
           }
   }
}

添加到@Harshad 答案。

這些是您應該檢查的事項:

(1) @Harshad 所說的編譯器版本。

(2) 優化是否啟用。如果您使用的是混音,那麼您會在編譯部分找到。

(3) 如果您正在使用任何庫(從您的程式碼來看,您似乎不是。但只是為了雙重確認),那麼您也應該輸入這些庫。

(4) 最後,solidity 程式碼必須是您用來編譯的確切程式碼;)

祝你好運!

試試這個。

在“驗證和發布”步驟檢查您的編譯器版本,如果它是正確的編譯器版本。

您可以通過執行檢查它:

松露版

來源

在我的情況下,輸出

$$ version $$曾是 :

松露 v4.1.8(核心:4.1.8)

Solidity v0.4.23 (solc-js)

所以我從列表中選擇的編譯器版本是:

v0.4.23+commit.124ca40d

如果您沒有鬆露或不知道它,您可以參考此連結

希望這對某人有幫助!

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