Ethereumを動かす ~Part12~

前回、Ethereumのウォレットを作成し、truffleの導入と、ほんのさわりだけご紹介しました。
今回は実際にSolidityファイルで書かれたコントラクトをデプロイしてみたいと思います。
前回に引き続き、テストネット環境(Ropsten)へのデプロイを目標とします。
サーバー情報の取得
デプロイするテストネットのRPCサーバー情報を得なければなりません。
https://infura.io/でテストネットサーバーも本番サーバーも獲得することができます。
アクセスし、「GET STARTED FOR FREE」をクリックしてください。ユーザー情報を求められるので入力して進むと、いくつかのURLが列挙されているページに辿り着きます。
「Mainnet」が冠されているURLが本番サーバーURL、「Ropsten」が冠されているURLがテストネットサーバーURLとなります。
今回はテスト環境へのデプロイが目標なので「Ropsten」のURLをコピーしておきます。
設定ファイルの修正
truffleに戻りましょう。
truffleコマンドで生成したプロジェクト直下にtruffle.jsというファイルが存在しています。このファイルがそのtruffleプロジェクトの設定を司っています。
前回作成したプロジェクトをもう一度見てみましょう。
プロジェクト(test_truffleという名前で作成した)
test-truffle
├── contracts
│ └── Migrations.sol
├── migrations
│ └── 1_initial_migration.js
├── test
├── truffle-config.js
└── truffle.js
truffle-config.jsというファイルも存在していて、こちらの方が設定に関するファイルのような名前ではありますが、あくまでも設定を司っているのはtruffle.jsファイルです。
先ほど得たテストネットサーバーURLなどもこの中に設定することになります。
では、truffle.jsの中身を以下のように変更しましょう。
const HDWalletProvider = require("truffle-hdwallet-provider-privkey");
const privateKey = "自分のEthereumウォレットのPrivateKey(頭に0xがある場合はそれのみ除く)";
module.exports = {
networks: {
development:{
host:'localhost',
port:8545,
network_id: '*'
},
ropsten: {
provider: () => {
return new HDWalletProvider(privateKey, "テストネットサーバーURL")
},
network_id:3,
gas: 4600000
}
}
};
一行目はtruffle導入時に一緒に導入したtruffle-hdwallet-provider-privkeyを呼び出しています。
二行目は自分のPrivateKey(秘密鍵)を書くのですが、秘密鍵さえあればウォレットを自在に操作できてしまうため、コード内に直接書き込んでしまうのが不安な方は、Mac環境下でいうと.bash_profileなどに書き込んでコード内で呼び出すようにすると良いでしょう。
module.exportsの中身なのですが、肝心なのは「ropsten」の箇所です。こちらでテストネットにデプロイするときの設定を書きます。テストネットサーバーURLも、先ほどと同じようにコードに直接書きたくない方は別途管理して、コード内で呼び出すようにしてください。他はほぼほぼこの書き方と同じで大丈夫かと思いますが、gasの値に関しては460000はかなり多めに設定しています。デプロイにかかる手数料はデプロイするファイルの量などによって変わってくるのですが、それに対しここで設定しているgasの値が足りないとデプロイ失敗となってしまいます。
それを防ぐために余裕を持った値を設定しているだけなので、ファイルサイズなどを鑑みて調整することももちろん可能です。
デプロイ
truffle.jsの設定が完了したら、いよいよデプロイします。
プロジェクトディレクトリ直下で
truffle migrate --network ropsten
とコマンドを打ち込んでください。「–network」の後に何を指定するかで、truffle.jsで設定したどのネットワークへデプロイするか決定します。なので
truffle migrate --network development
と打つとローカルネット(localhost)へとデプロイします。
solidityファイルやmigrationファイル、truffle.jsに誤りがなければ、まずsolidityファイルがコンパイルされ、buildディレクトリにコンパイルされたファイルが格納されます。
コンパイル後に、migrationファイルがファイル名の頭のナンバリング通りに実行されます。
途中まででデプロイを止めたり、一旦デプロイが完了した後に新たに次のナンバリングから始まる名前のファイルを追加して再びデプロイした場合、前回のデプロイしたナンバリングの続きの数字から始まるファイルからデプロイされます。
もう一度改めて1からデプロイし直したい場合は、上のコマンドの最後に「–reset」というオプションをつけると再び”1_initial_migration.js”からデプロイが始まります。