Ethereum

コマンドラインでEtherアカウント作成からマイニング(mining)までの手順

はじめに

あわせて読みたい
テストネットワークでGeth起動(Gethの初期化、Gethのコマンド・オプション)はじめに(テストネットワークでGeth起動前に) http://blockmania.jp/?p=51 前回の記事で紹介した...

Gethの起動ができるようになったら、早速Etherをマイニング(mining)してみましょう。マイニング(mining)する前にまずEthereumアカウントの作成をしていきます。

今回の流れは

  1. Ethereumのアカウント(EOAとContractアカウント)について解説
  2. アカウントを作成
  3. Ether送金のために別のアカウントをもう一つ作成
  4. マイニング(mining)の準備
  5. マイニング(mining)の実行
  6. マイニングで受け取った報酬を確認

になります。

 

まずアカウントとはどんなものなのか説明します。

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)実行をしました。