Go Ethereumで遊ぶ(2) 〜マイニングの開始〜

コラム

前回はGo Ethereumを使ってプライベートネットでGenesisブロックの作成まで行いました。今回はマイニングをしてみようと思います。

アカウントを作成

今回もGethコンソールを利用していこうと思います。

まず、personal.listAccountseth.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[1]
"0x46c001f57b55abbe9086d595e15cbf7dc3a9b5b2"
> miner.setEtherbase(eth.accounts[1])
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

確認してから止めるまでの間に進展があったようですね。

今回はここまでにします。

次回はトランザクションを発行し、送金を行いたいと思います。