Solidity

無法在 Etherscan 上驗證與 ABIEncoderV2 的契約

  • August 12, 2020

昨天我向 Ropsten ( https://ropsten.etherscan.io/address/0x1fe59c223fa4e9781237f0f49a15ca598069cc30 )部署了一個依賴於 ABI 編碼器 V2 的合約。因此它包括聲明

pragma experimental ABIEncoderV2;

我嘗試使用我的 Solidity 程式碼的扁平版本、匹配的編譯器版本、優化標誌、優化器執行等執行 Etherscan 的程式碼驗證 ( https://ropsten.etherscan.io/verifyContract2 )。但是,程式碼驗證結果是否定的。

早在 6 月,當我也使用相同的編譯指示部署契約時,我從 Etherscan 幫助台收到消息說他們不支持 ABIEncoderV2。儘管事實上在 Remix 上編譯只會發出警告,並且 Etherscan 聲稱支持在 Remix 上編譯的合約。

所以我正在尋找替代品。任何人都可以支持仍然導致程式碼驗證問題的 ABIEncoderV2 缺乏支持的假設嗎?智能合約的公共程式碼驗證還有其他替代方案嗎?

乾杯,

延斯·伊瓦爾

當我嘗試將原始碼展平為單個文件並將其上傳到 etherscan.io 時,驗證原始碼對我不起作用。我認為那是因為pragma experimental ABIEncoderV2;在多文件項目中僅應用於某些文件,但是當您將文件展平以將其應用於整個原始碼時。

通過部署通過編譯預展平版本獲得的二進製文件解決了這個問題:

  1. truffle-flattener用or展平原始碼etherlime flatten
  2. 從平面文件編譯和部署智能合約(可以使用https://remix.ethereum.org
  3. 驗證https://etherscan.io的原始碼

你試過用 編譯0.4.25嗎?這樣做之後,我能夠刪除ABIEncoderV2並且我的驗證開始工作。

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