Solidity
無法在 Etherscan 上驗證與 ABIEncoderV2 的契約
昨天我向 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;
在多文件項目中僅應用於某些文件,但是當您將文件展平以將其應用於整個原始碼時。通過部署通過編譯預展平版本獲得的二進製文件解決了這個問題:
truffle-flattener
用or展平原始碼etherlime flatten
- 從平面文件編譯和部署智能合約(可以使用https://remix.ethereum.org)
- 驗證https://etherscan.io的原始碼
你試過用 編譯
0.4.25
嗎?這樣做之後,我能夠刪除ABIEncoderV2
並且我的驗證開始工作。