はじめに


Gethの起動ができるようになったら、早速Etherをマイニング(mining)してみましょう。マイニング(mining)する前にまずEthereumアカウントの作成をしていきます。
今回の流れは
- Ethereumのアカウント(EOAとContractアカウント)について解説
- アカウントを作成
- Ether送金のために別のアカウントをもう一つ作成
- マイニング(mining)の準備
- マイニング(mining)の実行
- マイニングで受け取った報酬を確認
になります。
まずアカウントとはどんなものなのか説明します。
Ethereumアカウントの作成

Ethereumには2つの種類のアカウントがあります。それぞれ紹介します。
EOA(Externally owned accounts)アカウント
EOA(Externally owned accounts)は私たちが実際にログインして使用するアカウントです。Etherを送金したり、Contractを実行したりすることができます。EOAでEtherの送金をするためにはトランザクション生成する必要があります。
EOA(Externally owned accounts)は外部所有アカウントとも呼ばれることがあります。
Contract(コントラクト)アカウント
Contract(コントラクト)アカウントはContract(コントラクト)をブロックチェーン上にデプロイした際に作成されるアカウントです。また、コントラクトコードによって制御されています。既にContractアカウントに設定されているコントラクトコードに何かしらのバグがある場合、Etherの不正送金やアカウントの凍結などの深刻な状態を招く可能性があります。
Contractアカウントにはコードを実行したり、他のアカウントにメッセージを送ったりする役割があります。
EOAアカウントや他のContractアカウントから働きがけがない限り、Contractアカウント自ら実行することはありません。
アカウント(EOA)を作成する

前回と同様Gethを起動するコマンドを入力しましょう。コンソールが表示されている状態にします。
$ geth --networkid 15 --nodiscover --maxpeers 0 --datadir ./ console
続いてアカウントを作成するコマンドを入力していきます。
> personal.newAccount("password0") "0efd7300a788e022dfkja4d7969a1j3p59f2c3ebcc3"
今回引数として指定した”password”は自由に変えても構いません。
次に出力された、”0efd7300a788e022dfkja4d7969a1j3p59f2c3ebcc3″は今作成されたアカウントのアドレスになります。誰かにEtherを送金したいな〜と思ったときはこのアドレスを使って送ります。アドレスは人によって値が必ず異なるようにできているので違っていても大丈夫です。
次に、アカウントが作られたか確認します。以下のコマンドを入力してみましょう。このノードが管理しているアドレスを全て表示することができるコマンドです。
> eth.accounts ["0efd7300a788e022dfkja4d7969a1j3p59f2c3ebcc3"]
さきほど作ったアカウントのアドレスが表示されましたね。
送金するためにもう1つアカウント(EOA)を作る
今回は2つのアカウントを使って送金処理をしていきます。先ほどと同じような手順でもう1つアカウントを作成してましょう。
> personal.newAccount("password1") "0eff4822bb24dd802fff9ce3900ba11eels40ac328"
2つ目のアカウントは引数を”password1″に設定しました。
アカウントが2つできている状態かもう一度確認しましょう。
> eth.accounts ["0efd7300a788e022dfkja4d7969a1j3p59f2c3ebcc3", "0eff4822bb24dd802fff9ce3900ba11eels40ac328"]
以下の表示になったでしょうか。
配列の番号を指定することで、それぞれのアカウントのアドレスを取得することもできます。
> eth.accounts[0] "0efd7300a788e022dfkja4d7969a1j3p59f2c3ebcc3" > eth.accounts[1] "0eff4822bb24dd802fff9ce3900ba11eels40ac328"
マイニング(mining)をする前に
Etherbaseとは
マイニングをする前にEtherbaseという重要な役割について説明します。Ethereumではマイニングの報酬を受けとるアカウントのことをEtherbaseと呼びます。デフォルトではeth.account[0]が設定されています。
Etherbaseアカウントを変更してみましょう。今回はeth.account[0]とeth.account[1]のアカウントがあるためEtherbaseを0から1に変更していきたいと思います。
Etherbaseアカウントを変更する
まずEtherbaseアカウントのアドレスをコンソールから確認します。
> eth.coinbase INFO [08-22|09:19:15.977] Etherbase automatically configured address=0x922d827229F70fe444daD7B889C2D54FE26c95b5 "0x922d827229f70fe444dad7b889c2d54fe26c95b5" #eth.account[0]のアドレスが表示されている
上のような出力が出ればおっけいです。このアドレスは先ほど作成したeth.account[0]のアカウントと同じであることを確認してください。
次にEtherbaseをeth.account[0]からeth.account[1]に変更します。Etherbaseの変更はminer.setEtherbaseコマンドで行うことができます。
> miner.setEtherbase(eth.accounts[1]) true
trueが出力されれば成功です。本当にEtherbaseが変更されているか確認しましょう。
> eth.coinbase "0x4f4822bb24dd802fff9ce3900ba117ad540ac328" #前と違うアカウントが表示されている
変更できることが確認できたらわかりやすいようにeth.accounts[0]の方にEtherbaseを戻しておきましょう。
> miner.setEtherbase(eth.accounts[0]) true
マイニング(mining)をしてみる

実際に自分のPCでマイニング(mining)をしてEtherを採掘していきましょう。マイニング(mining)前後の残高を比較するために、残高とブロック数の確認を行います。
アカウントが持っている残高の確認
以下のコードを入力してアカウントが持っている残高の確認をしましょう。
> eth.getBalance(eth.accounts[0]) 0 > eth.getBalance(eth.accounts[1]) 0
作ったばかりなのでまだ残高は0です。
アカウントが持っているブロック数の確認
続いてブロック数も確認していきます。以下のコマンドを打ち込んでください。
> eth.blockNumber 0
こちらも同様に0になったと思います。ここからマイニングをしてEtherを採掘していきます。
miner.startコマンドでマイニングをする
miner.startコマンドでマイニングをしていきましょう。以下のコマンドを入力するとマイニング(mining)が始まります。
> miner.start(1) INFO [08-22|15:00:42.977] Updated mining threads threads=1 INFO [08-22|15:00:42.977] Transaction pool price threshold updated price=18000000000 INFO [08-22|15:00:42.977] Starting mining operation null > INFO [08-22|15:00:42.979] Commit new mining work number=1 txs=0 uncles=0 elapsed=1.506ms INFO [08-22|15:00:57.793] Successfully sealed new block number=1 hash=05ac18…cdea1c INFO [08-22|15:00:57.794] mined potential block number=1 hash=05ac18…cdea1c INFO [08-22|15:00:57.795] Commit new mining work number=2 txs=0 uncles=0 elapsed=135.141µs INFO [08-22|15:01:00.953] Successfully sealed new block number=2 hash=cdf6a7…0825e0 INFO [08-22|15:01:00.953] mined potential block number=2 hash=cdf6a7…0825e0 INFO [08-22|15:01:00.954] Commit new mining work number=3 txs=0 uncles=0 elapsed=109.197µs INFO [08-22|15:01:02.772] Successfully sealed new block number=3 hash=0901cd…8c4ce8 INFO [08-22|15:01:02.772] mined potential block number=3 hash=0901cd…8c4ce8 INFO [08-22|15:01:02.773] Commit new mining work number=4 txs=0 uncles=0 elapsed=98.353µs INFO [08-22|15:01:08.910] Successfully sealed new block number=4 hash=b13013…c9c9b1 INFO [08-22|15:01:08.912] mined potential block number=4 hash=b13013…c9c9b1 INFO [08-22|15:01:08.913] Commit new mining work number=5 txs=0 uncles=0
初回実行時はDAGというものが生成されるためマイニング(mining)はすぐ行われず時間がかかります。
しばらくするとDAGの生成が終わりマイニングが始まります。以下のコマンドでマイニング(mining)ができていることを確認しましょう。
> eth.mining true > eth.hashrate 12034 > eth.blockNumber 43
それぞれのコマンドの役割はこちらです。
eth.mining
マイニング(mining)しているかどうかを確認できます。している場合はtrue、していない場合はfalseを返します。
eth.hashrate
マイニングの計算力を表す値です。ハッシュレートの値が12034であることは、1秒間に12034回のハッシュ計算ができることを意味します。
マイニング(mining)で受け取った報酬を確認する

ある程度時間がたったらマイニング(mining)の報酬が溜まっているので確認してみましょう。
報酬額は以下のコマンドで確認できます。
> eth.getBalance(eth.accounts[0]) 1.895e+21
とてつもなく大きな数字がでてきました。これはweiという単位で表示されています。weiはEthereumにおける最小単位です。
1ether = 10の18乗のwei
を意味します。weiだとどくらいの値段なのか価値がわからないので、Etherに変換します。
weiからEtherに数値を変換してみる
> web3.fromWei(eth.getBalance(eth.accounts[0]), "ether") 2555
2555Etherを取得できたことがわかります。
以上でマイニング(mining)が終了します。
まとめ
今回はEthereumのアカウント(EOA及びContractアカウント)についての紹介、Ethereumアカウントの作成(EOA)、マイニング(mining)実行をしました。