【Ethereum/Turffle】デプロイしたスマートコントラクトをEtherscanでVerifyする方法


概要

EthereumにデプロイしたコントラクトをEthescanでVerifyする方法の解説。
Truffleでデプロイした場合を想定しています。
Remixでもできますが、エラーになる可能性が高くなります。

できること

  • Etherscan上でコントラクトとやりとりができるようになる
  • Etherscanでコントラクトのソースコードが公開できる

手順

  1. コントラクトのソースコードをFlattenする
  2. コンストラクタに引数があればエンコードする
  3. EtherscanでVerifyする

1. コントラクトのソースコードをFlattenする

コントラクトコードを単一のファイルにまとめるためのツールをインストール。
-Dで開発用のパッケージとしてインストールします。

$ npm install -D truffle-flattener

コントラクトを単一ファイルにまとめます。
以下のコマンドでコントラクトへのパスを引数に与えます。

$ ./node_modules/.bin/truffle-flattener path/to/your/contract.sol > flat.sol

flat.solというファイルに書き込まれるので、その内容をコピーします。

2. コンストラクタに引数があればエンコードする

コンストラクタに与えた引数を16進数表記にエンコードします。
こちらのサイトでエンコードできます。
赤枠のところで引数を16進数に変換ができます。
変換できたらそれをコピーしておきます。

3. EtherscanでVerifyする

EtherscanでVerifyしたいデプロイ済みのコントラクトのページに行きます。
赤枠のところをクリック。

ソースコードのタイプにSingle Fileを指定し、コンパイラのバージョンを指定する。

赤枠にflat.solの中身をペースト。
青枠にコンストラクタの引数を16進数でエンコードしたものをペースト。

Verufy & Publishをクリック。

問題なければ完了!

Verifyに失敗する場合

  • コンパイラのバージョン指定を見直す
  • 最適化(Optimization)のオプションをコンパイル時と合わせる
  • Remixでデプロイした場合はソースコードが異なる可能性がある

Happy Hacking !

参考

https://michalzalecki.com/how-to-verify-smart-contract-on-etherscan/
https://abi.hashex.org