自分だけのEthereum(イーサリアム)作ってみた【第二回:マイニング編】

ブロックチェーン

自分だけのEthereum(イーサリアム)作ってみた【第二回:マイニング編】

おはようございます。平野羽美です。
前回に引き続き、Ethereum(イーサリアム)をローカル環境上で動かし「自分だけのEthereum」の構築方法をまとめていきます。

本記事では、ローカル環境で実行したEthereum(Geth)を使って仮想通貨のマイニングを行うまでを紹介していきます。
自分だけの仮想通貨をいっぱいマイニングして億万長者気分を味わいましょう!(換金はできませんが)

Ethereumとは(おさらい)

Ethereumは、分散アプリケーションを構築するためのプラットフォームで、ブロックチェーン技術がベースとなっています。
ここでいうプラットフォームとは、OSやミドルウェアのようにアプリケーションやソフトウェアが動作する基盤の仕組みを指しています。
分散アプリケーションについてはこちらのサイトに詳細や定義が記載されています。

これまでの一般的なシステムとは異なり、特別な権限を持った管理者がいない状態(非中央集権)でシステム全体が信頼性を保てるようにできています。
なお、ブロックチェーン技術自体の解説は、過去の記事もございますのであわせてご覧ください。

やりたいこと

まずは簡単な例として、AさんからBさんにETH(Ethereum上での通貨の単位、記事執筆時点では1ETH = 7〜8万円)を送金しようと思います。(下図参照)

ここで送金を行うためにはAさんが事前にETHを持っている必要があります。
日本円ですと日銀がお札や硬貨を発行していますが、Ethereumではどこからお金を調達すれば良いのでしょう?
その答えとなるのが「マイニング」と呼ばれる仕組みです。

マイニングは、仮想通貨やブロックチェーンについて調べると必ずと言っていいほど出てくるキーワードで、言葉の通り新しいETHを掘り出すことを指します。

余談:マイニングについて

マイニングというとBitcoinマイニングの方が有名かもしれません。
BitcoinもEthereumも現時点ではマイニングの仕組みは近い方式を取っています。

マイニングという言葉から「コインを掘る」イメージが強いですが、実際の処理は、当たりの数字が出るまでランダムな数字が生成される計算を繰り返していきます。
イメージ的には「当たりが出るまでひたすらガチャを引き続ける」感じです。

この辺りの仕組みはこちらのページが参考になるかと思いますので、
興味がございましたらご覧ください。(結構な情報量です)

実践! Ethereumマイニング!!

一つ前の図ではAさんとBさんしかいませんでしたが、ETHを発行するためにマイナー(マイニングを行う人)を用意する必要があります。
なので、今回の例では マイナー horihoriさんに登場いただきます。

前回記事の最後でご紹介したgethコンソールの起動後にアカウントの作成を行います。

Gethコンソールの起動(再掲)

geth --networkid "10" --nodiscover --datadir "$ETH_HOME/testNet" console 2>> "$ETH_HOME/testNet/geth_err.log"

アカウントの作成

personal.newAccount("horihori")
"0x8dfc8cc09c656a4aa44613dcc8fe80bc00127xxx"

これでマイナーhorihoriさんのアカウントが作成されました。
最初に作成したアカウントが自動的にcoinbaseと呼ばれる、コンソールが標準でマイニングを行うアドレスとなります。

では、早速マイニング…を始める前に新しく作ったアカウントの所持しているETHの数を確認しておきましょう。

> eth.getBalance(eth.accounts[0])
0

eth.accounts[0]は最初に作成したアカウントを示しています。
0 → 所持金 0ETHという結果が出力されていることがわかります。

いよいよマイニングを実施してみましょう!

※注意:
これ以降の処理を実施するとかなりの処理能力が持っていかれます。
ノートPC等で実行するとCPUがかなり熱を持つ場合がありますので、極力長時間の実行はお控えください。


> miner.start()
null

こちらの処理を実施後にCPU使用率を確認すると、使用率が徐々に増加し設定によってはいずれ80%〜100%になる様子が見られるかと思います。
このままずっと実行しているとCPUがかわいそうなので1〜2分したら以下のコマンドでマイニングを停止してあげましょう。

> miner.stop()
true

マイニング実行後にもう一度所持しているETHの数を確認してみると、ETHが増加していることがわかります。

> eth.getBalance(eth.accounts[0])
815000000000000000000

815000000000000000000 → 815 ETH

※ETHの数はマイニングの実行環境や実行時間によって変動します

今回はマイニングを実施し、ETHを取得するところまでを実施しました。
マイニング処理をずっと回していると、記事冒頭でお伝えしたように自分だけのETHをいっぱいマイニングして億万長者気分を味わえるかと思います。(換金はできませんが)

次回はいよいよAさんからBさんへの送金処理を実施していきます。
以上、平野でした。

参考