こんにちは。badyと申します。
最近、金融やIT業界の一部ではブロックチェーンが話題となっていますね。書籍やWeb上など、至るところでブロックチェーンの概念や仕組みに関する記事を見かけることが多くなってきました。
しかしその一方で、「実際にブロックチェーンを使うにはどうすればいいのか?」といった、技術者寄りの情報はまだあまり多くないように感じます(あったとしても英語の記事が多いですね)。
そこで本記事では、ブロックチェーン・プラットフォームの一つである「Ethereum」を、手元のMac(OS X El Capitan 10.11)を使って利用してみたいと思います。今回は導入ということで、Ethereumの内部通貨であるetherの採掘までを試してみたいと思います。
このページの目次
Gethのインストール
まずEthereumクライアントの一つであるGethをインストールしてみましょう。
MacであればHomebrewを使うことで簡単にインストールすることができます。
1 2 |
$ brew tap ethereum/ethereum $ brew install ethereum |
インストールが成功したか確認するためには、次のコマンドを実行しましょう。
1 |
$ geth help |
コマンドのオプション情報が表示されればインストール成功です。
プライベート・ネット用のディレクトリ作成
Ethereumには不特定多数のノードが参加しているライブ・ネットのほか、限られた参加者のみが参加出来るプライベート・ネットがあります。今回はテスト用として、プライベート・ネットを作成してその中で作業していきたいと思います。
まずはプライベート・ネットのデータを保存するためのディレクトリを、任意の場所に作成しておきましょう。
1 |
$ mkdir /Users/bando-sy/eth_private |
genesisファイルの作成
次に、先ほど作成したディレクトリの下にgenesis.jsonという名前のファイルを作成します。中身は下記のようにしましょう。
1 2 3 4 5 6 7 8 9 10 11 |
{ "nonce": "0x0000000000000042", "timestamp": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x0", "gasLimit": "0x8000000", "difficulty": "0x4000", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": {} } |
このgenesis.jsonファイルは、ブロックチェーンの一番最初のブロックであるgenesisブロックの情報を記述したjson形式のファイルとなっています。
genesisブロックの初期化
genesisファイルを作成したら、その内容に沿ってブロックチェーンの情報を初期化します。
1 |
geth --datadir /Users/bando-sy/eth_private/ init /Users/bando-sy/eth_private/genesis.json |
–datadirで指定した先のディレクトリに、genesisブロックの情報が保存されました。
Gethを起動しプライベート・ネットに接続
ここまできたら、いよいよgethを起動します。次のコマンドを実行してみてください。
1 |
geth --networkid 10 --nodiscover --datadir /Users/bando-sy/eth_private console 2>> /Users/bando-sy/eth_private/private_geth.log |
Welcome to the Geth JavaScript console!
という文字が表示され、gethのコンソールに入ることができたら成功です。処理結果はprivate_geth.logとしてログファイルを出力するようにしています。
先ほどのコマンドでは、まず–networkidオプションで任意の整数を指定することでプライベート・ネットを立ち上げています。この例では10ですね。
次の–nodiscoverオプションでは、マシン間のノード検知のプロセスを無効化しています。つまり、自分のPCの中だけでノードを接続するようにするということです。
また、consoleを付与することにより、Gethが用意しているコンソールを立ち上げることができます。
アカウントの作成
実際にetherを採掘したり、送金したりするためにはEOA(Externally Owned Account)と呼ばれるEthereum上のアカウントが必要になります。登録されているアカウントはeth.accountsで表示することができますが、まだアカウントを作成していないため、何も表示されません。
1 2 |
> eth.accounts [] |
gethコンソール上ではpersonal.newAccount(“password”)形式のコマンドを実行することでアカウントを作成することができます。発行したアカウントのパスワードは復元できないので絶対に忘れないようにしましょう!
1 2 |
> personal.newAccount("pass01") "0xde3027698788360e46b09b0864cdf7bbee0ce1a3" |
eth.accountsで確認すると、
1 2 |
> eth.accounts ["0xde3027698788360e46b09b0864cdf7bbee0ce1a3"] |
どうやらちゃんと作成できたみたいです。
etherの採掘
アカウントの作成が完了したので、実際にノード間でやり取りされるetherを採掘してみましょう。採掘はminer.start()で行えます。
1 2 |
> miner.start() true |
マイニングが開始されました。採掘状況の確認にはeth.hashrateを使用します。0でなければ採掘が行われています。
1 2 |
> eth.hashrate 0 |
採掘できていないみたいですね…。
どうやら最初の採掘はDAGというデータセットを作成してからではないとできないみたいです。ログを確認してみるとDAGを生成する様子が記録されていました。
1 2 3 4 |
Generating DAG: 10% Generating DAG: 11% Generating DAG: 12% ... |
DAGを生成し終えるまでかなり時間がかかるようなのでゆっくり待ちましょう(だいたい10~20分くらいかかるようです)。
DAGの生成が100%になったら、もう一度eth.hashrateで採掘できているか確認してみます。
1 2 |
> eth.hashrate 766590 |
今度はちゃんと採掘できているみたいですね。eth.blockNumberコマンドで、実際にどれだけのブロックを採掘したのかも見てみましょう。
1 2 |
> eth.blockNumber 75 |
結果から、75個のブロックを採掘したようです。
ここまでできたら一旦採掘を止めましょう。採掘を停止させるにはminer.stop()を実行します。
1 2 3 4 |
> miner.stop() true > eth.hashrate 0 //0なら停止できています。 |
eth.getBalance(address)コマンドで採掘の報酬であるetherの残高を確認できます。
1 2 |
> eth.getBalance(eth.accounts[0]) 753593750000000000000 |
先ほど作成した0番目のアカウントがetherを所持していました!
まとめ
macにgethをインストールし、無事にetherの採掘を行うことができました。
まだ初歩の初歩ではありますが、そこまで難しい手順ではなかったと思います。
ブロックチェーンの仕組みは少々難解でとっつきにくいと感じている方も多いと思われますが、こういった簡単なところから触れていくことで、ブロックチェーンの全容を理解することの助けになるのではと考えています。
私自身もまだまだ理解仕切れていない部分があるので、少しずつ勉強していきたいと思っています。
それでは今回はこの辺りで失礼させていただきます。
最後まで読んでいただきありがとうございました。
- Macにgethを入れてEthereumの内部通貨etherを手に入れる - 2017年2月3日
本記事に対するコメントはまだありません