Truffle

Etherscan:如何驗證使用 Truffle 部署的多個導入的契約?

  • August 4, 2021

當我使用帶有import聲明的 Truffle 部署合約並嘗試在etherscan上進行驗證時,我的理解是我需要粘貼導入文件的內容。

我在 etherscan 上收到一個錯誤,即連接和部署文件的字節碼不一樣。奇怪的是,如果我在remix上部署契約(帶有導入),那麼字節碼與連接的源文件匹配。

例子

這是表現出這種行為的合約的一個最小範例。

Combined.sol是連接文件,Outer.sol包含已部署的合約。

這是我正在做的事情,但會出現錯誤:

  1. Outer.sol使用松露部署
  2. 轉到 etherscan 上部署的合約地址
  3. 輸入Concatenated.sol原始碼並點擊驗證

錯誤,字節碼不匹配。

更多資訊

  • 0.4.11在混音和松露中使用編譯器。
  • Ubuntu 16.04。
  • 在 Kovan 上,這並不重要。
  • 已部署的合約

目前 etherscan 不支持多文件合約的驗證。但是在 etherscan 的 reddit 上有關於這個問題的討論。

將文件連接成一個文件是前一段時間的工作,但從 0.4.7 版本開始,Solidity在已編譯合約的末尾包含合約元數據的雜湊值。由於此元數據包含文件名和雜湊,因此在連接和編譯後您可能會得到相同的字節碼,但此雜湊會有所不同。

我認為將元數據散列添加到已部署合約的動機是使原始碼驗證自動進行,因為每個已部署合約都包含指向源的 swarm-link、編譯器版本和編譯選項。

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