koogawa blog

iOS、Android、foursquareに関する話題

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

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

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

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

github.com

インストール

  1. npm または yarn でインストール

    npm install -D truffle-plugin-verify
    yarn add -D truffle-plugin-verify
    
  2. 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 をチェックしてほしい。