Solidity

無法在 etherscan.io 上驗證合約。如何解決這個問題?

  • September 25, 2018

我無法在 etherscan.io 中驗證契約。我能夠在 (Geth, Mist) 中部署相同的可靠性程式碼。但是我無法在 etherscan.io 中驗證相同的程式碼。我在這裡犯了什麼錯誤?

在霧上部署程式碼時,我使用了編譯器版本:

pragma solidity ^0.4.16;

我在 etherscan.io 中選擇了相同的編譯器版本:0.4.16+commit.d7661dd9

這是交易:

合約是在 Txn 期間創建的#0x9832deb04d2900f97c0434588038f573ee066c0a095c1c0a0af07225d0068a9d

結果:與在該地址找到的輸入創建字節碼不匹配。對不起!‘Purchase’ 的編譯合約字節碼與合約創建程式碼不匹配

$$ 0x89d236a8387e6fE94e27D674D856e09f4dEE1302 $$.

嘗試將您的pragma陳述更改為

pragma solidity 0.4.16

(沒有^)。

由於該pragma...聲明可能存在問題,因為使用^,您允許版本 0.4.16

或任何不會破壞功能的更新版本(最高但不包括版本 0.5.0)

(來自solidity.readthedocs.io)。這可能會導致不同的字節碼,從而導致驗證失敗。

我在一定程度上同意@gisdev_p。胡蘿蔔^符號只會產生我們現階段不想要的那種歧義。您的合約已經部署,並且根據原始碼,它可能已經使用任何 >= 0.4.16 的 Solidity 編譯器進行編譯。

現在,您需要發現實際用於生成鏈上字節碼的編譯器版本。

排除低於 0.4.16 的所有內容。

您應該考慮一下您用來進行編譯的工具並詢問它的版本號,例如solc --versiontruffle version)。然後,如果您不確定優化選項,請嘗試兩種方式。

當您找到神奇的組合(合約名稱 + 編譯器版本 + 優化選項)時,Etherscan 會注意到鏈上的字節碼與使用您的參數編譯合約的結果之間的完美匹配。這就是他們確認他們擁有的原始碼是鏈上已編譯合約的真實表示的方式。

希望能幫助到你。

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