Ropstenでコントラクトをテストしようと思い、せっかくだからEtherscanに登録して弄ってみようと思ったものの、スムーズにいかなかったのでメモ。
Etherscanにコントラクトを登録して内容を公開するには、deployしたコントラクトのソースを用意する必要があります。ここで問題なのが、コントラクトでたくさんimportしていた時に、すべてのコントラクトのコードを一箇所にまとめなきゃいけないという点です。初めて知った時は地獄だと思いました。
複数ファイルにまたがるコントラクトをまとめる
でも世の中には便利なツールを開発してくださる先駆者の方々がいらっしゃいます。
自分はtruffleで開発していたのでtruffle-flattener 一択でした。truffleを使っていないならsolidity-flattener もありだと思いますが、自分の場合はpipを使ったことがなくて導入に苦労したのと、openzeppelin-solidityとかの継承関係を解決してくれないので使えませんでした。
truffle-flattenerはコマンドラインで
truffle-flattener original.sol >> output.sol
とやれば、継承関係も重複なく一箇所に出力してくれます。超便利。 これでまとめたコードをEtherscanにコピペして登録完了!と思いきや、うまく行かない。なんで。
コンストラクタに与えた引数のabiを取得する
ここでもう一つ問題が。deploy時にコンストラクタに与えた引数のabiを入力しなきゃいけないんですね。これは面倒臭い。 ※ちなみにcontract abiの詳細はこちらのwiki に書いてあります。
幸い手元にdeploy時の引数のデータが残っていたので、6つあった引数を最悪全部エンコードして繋げればよかったのですが、なんせ泥臭いので何か方法はないかと模索したところ出会ったのが、こちらのEthereum Contract ABI Converter というサイト。
めっちゃ簡単にabi出せるやん。超便利。
ということでめでたくEtherscanにコントラクトを登録できました。 過去に数回登録してたのにめっちゃ手間取った。。。