概要
EthereumにデプロイしたコントラクトをEthescanでVerifyする方法の解説。
Truffleでデプロイした場合を想定しています。
Remixでもできますが、エラーになる可能性が高くなります。
できること
- Etherscan上でコントラクトとやりとりができるようになる
- Etherscanでコントラクトのソースコードが公開できる
手順
- コントラクトのソースコードをFlattenする
- コンストラクタに引数があればエンコードする
- 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