前回はGo Ethereumを使ってプライベートネットでGenesisブロックの作成まで行いました。今回はマイニングをしてみようと思います。
アカウントを作成
今回もGethコンソールを利用していこうと思います。
まず、personal.listAccountsやeth.accountsでアカウントの確認から行ってみようと思います。
> personal.listAccounts
[]
> eth.accounts
[]
空なので、personal.newAccountでアカウントを作成してみます。パスフレースを文字列として渡せるそうなので渡してみましょう。
> personal.newAccount("passphrase")
"0xae9abfc6eca2b25d579be8649d4f232f80d3bd46"
実行すると作成されたアカウントのアドレスが返ってきます。先程の方法でアカウントを確認してみると
> personal.listAccounts
["0xae9abfc6eca2b25d579be8649d4f232f80d3bd46"]
> eth.accounts
["0xae9abfc6eca2b25d579be8649d4f232f80d3bd46"]
と返ってきます。
マイニング
アカウントの作成はできたので、マイニングを始めましょう。マイニングにあたって、マイニング報酬が支払われるアカウントをeth.coinbaseで確認してみます。
> eth.coinbase
"0xae9abfc6eca2b25d579be8649d4f232f80d3bd46"
先程作成したアカウントが設定されていますね。この報酬の行き先はminer.setetherbaseで変更が可能です。変更も試してみたいので、もう1つアカウントを作成して変更してみようと思います。
> personal.newAccount("passphrase")
"0x46c001f57b55abbe9086d595e15cbf7dc3a9b5b2"
> personal.listAccounts
["0xae9abfc6eca2b25d579be8649d4f232f80d3bd46", "0x46c001f57b55abbe9086d595e15cbf7dc3a9b5b2"]
> eth.accounts
["0xae9abfc6eca2b25d579be8649d4f232f80d3bd46", "0x46c001f57b55abbe9086d595e15cbf7dc3a9b5b2"]
作成できたので次は変更です。
> eth.coinbase
"0xae9abfc6eca2b25d579be8649d4f232f80d3bd46"
> eth.accounts[0]
"0xae9abfc6eca2b25d579be8649d4f232f80d3bd46"
> eth.accounts
"0x46c001f57b55abbe9086d595e15cbf7dc3a9b5b2"
> miner.setEtherbase(eth.accounts)
true
> eth.coinbase
"0x46c001f57b55abbe9086d595e15cbf7dc3a9b5b2"
戻してみます。
> miner.setEtherbase("0xae9abfc6eca2b25d579be8649d4f232f80d3bd46")
true
> eth.coinbase
"0xae9abfc6eca2b25d579be8649d4f232f80d3bd46"
文字列を渡すよりeth.accountsの配列から要素を指定したほうがわかりやすいですね。
ではマイニングです。マイニングの状態はeth.miningで確認できます。
> eth.mining
false
当然ですが、まだマイニングを始めていないのでfalseが返ってきました。開始はminer.startで可能です。miner.startはマイニングの際のスレッド数を指定することが可能なので、今回は1を指定します。コインベースに設定したアカウントの残高をeth.getBalanceで確認してからマイニングを開始してみましょう。
> eth.getBalance(eth.accounts[0])
0
> miner.start(1)
null
> eth.mining
true
これでマイニングが開始されました。ちょっと時間がかかるので、確認しながら待ってみます。ちなみに現在のブロック番号をeth.blockNumberで確認することができます。
> eth.getBalance(eth.accounts[0])
0
> eth.blockNumber
0
> eth.mining
true
> eth.getBalance(eth.accounts[0])
0
> eth.getBalance(eth.accounts[0])
45000000000000000000
途中大丈夫なのか不安になりましたが、マイング報酬が入ったのでminer.stopでマイニングを止めて確認してみます。
> miner.stop()
null
> eth.mining
false
> eth.getBalance(eth.accounts[0])
80000000000000000000
> eth.blockNumber
16
確認してから止めるまでの間に進展があったようですね。
今回はここまでにします。
次回はトランザクションを発行し、送金を行いたいと思います。