ローカル環境でTruffleを使って色々実装してみたもののマイグレーションが止まったままうまく進まない時のチェックリストです。私は3番目の対応でうまくいきました。
##目次##
・1.gethはローカルで起動しているかを確認
・2.それでも止まっている場合、コンソールを確認
・3.まだダメな場合、別建てでトランザクションを発行してみる
・4.マイグレーションファイルをそのまま修正してませんか?
#1.gethはローカルで起動しているか?#
ソースコードのデプロイにもトランザクションは発生します。
truffle migrateの場合、複数にわたるトランザクションが実装される場合もあります。
gethが起動されているか確認し、されていない場合は任意のディレクトリで開発環境として起動しましょう。
$ geth --dev --datadir .
#2.それでも止まっている場合、コンソール等で確認#
gethを起動したディレクトリからgethのコンソールを起動します。consoleでもいいですが、attachサブコマンドを用いるのもオススメです。
gethを入れたディレクトリから起動してください。
$ geth attach geth.ipc
その後、マイニングが止まっていたらマイニングを開始
$ miner.start()
マイニングステータスは下記で確認できます。
trueならOKです。
$ eth.mining
#3.まだダメな場合、別建てでトランザクションを発行します#
コンソールでアドレスをもう一個発行して少量のテスト用イーサリアムを送付してみましょう。
例:(なお、(web3.toWei(任意のETH額, "ether")}))
で指定するとWei建で計算しなくて良いので便利)
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(0.01, "ether")})
マイグレーションの対象が複数にわたる場合は、完了するまで任意の回数送付処理を試してみること。
#4.マイグレーションファイルをそのまま修正してませんか?#
例えば、下記のようにやっぱりトークンの発行量を10,000,000から変更したいなという場合。
このファイルを書き換えるのではなく新しいマイグレーションファイルを作成したほうがいいです。ただし影響範囲には注意しましょう。
~/hoge/migrations/X_contract_deploy.js
var hoge = artifacts.require("./hoge.sol");
module.exports = function(deployer) {
let initialSupply = 10000000;
deployer.deploy(hoge, initialSupply);
};
基本的に番号を一つ増やして、わかりやすい名前にするといいです。
~/hoge/migrations/X+1_Modify_Supply.js
var hoge = artifacts.require("./hoge.sol");
module.exports = function(deployer) {
let initialSupply = 800000;
deployer.deploy(hoge, initialSupply);
};
↑ X_ですでにトークンを投げ合っていた時、X+1_でmigrationると、Xでの内容は無効になります。