🍭

TruffleでEtherScan上のスマートコントラクトをVerifyしてみる

2022/11/18に公開

※2022/11 追記: xdai, sokol にも対応した truffle-source-verify というプラグインを見つけたので、必要であればそちらもおすすめです


Etherscanのサイトから手動でもVerifyできるが、非常に大変なのでコマンドラインからVerifyする方法をメモ。

truffle-plugin-verify というTruffleプラグインが便利。

https://github.com/rkalis/truffle-plugin-verify

インストール

  1. npm または yarn でインストール
npm install -D truffle-plugin-verify
yarn add -D truffle-plugin-verify
  1. truffle-config.js にプラグインを追加
module.exports = {
  /* ... rest of truffle-config */

  plugins: ['truffle-plugin-verify']
}
  1. Etherscan websiteにてEtherscanのAPI Key を作成

  2. Etherscan API keyを truffle-config.js に追加

API keyを直書きするのではなく、dotenv 経由で読み込むのが望ましい。

module.exports = {
  /* ... rest of truffle-config */

  api_keys: {
    etherscan: 'MY_API_KEY'
  }
}

使い方

スマートコントラクトのdeployが完了したら、次のコマンドで1つ以上のコントラクトをVerifyできる。

truffle run verify SomeContractName AnotherContractName --network networkName [--debug]

--network には truffle-config.js に記載したネットワーク名を指定できる。

例えば、 rinkeby にdeployした SimpleStorage コントラクトをVerifyするには次のコマンドを実行する。

truffle run verify SimpleStorage --network rinkeby

コントラクトのアドレスを指定することもできる。

truffle run verify SimpleStorage@0x61C9157A9EfCaf6022243fA65Ef4666ECc9FD3D7 --network rinkeby

サポートされているチェーン

EtherScan以外も多様なチェーンがサポートされている。

module.exports = {
  /* ... rest of truffle-config */

  api_keys: {
    etherscan: 'MY_API_KEY',
    optimistic_etherscan: 'MY_API_KEY',
    arbiscan: 'MY_API_KEY',
    bscscan: 'MY_API_KEY',
    snowtrace: 'MY_API_KEY',
    polygonscan: 'MY_API_KEY',
    ftmscan: 'MY_API_KEY',
    hecoinfo: 'MY_API_KEY',
    moonscan: 'MY_API_KEY',
    bttcscan: 'MY_API_KEY',
    aurorascan: 'MY_API_KEY',
    cronoscan: 'MY_API_KEY'
  }
}

最新のサポート状況は公式の https://github.com/rkalis/truffle-plugin-verify をチェックしてほしい。

Discussion