ブロックチェーン初心者の自分が、手始めに「WindowsでEthereumの内部通貨etherを取得する」に取り組んでみた手順をご紹介します。
使うOSは、あえてのWindows
いろいろと検討し、取り組んでみる技術はEthereum(イーサリアム)に決めました。
まずは自分のPCにインストールしてみます。OSはWindows10です。
調べたところ、Ethereumで推奨されているCLI “geth” を入れれば良いとの事です。
CLIとはCommand Line Interfaceの事で、gethを入れればコマンド操作でEthereumを扱えるようになります。
ネット等でgethのインストールについて調べてみましたが、「LinuxかMacなら簡単にインストールできます(Windowsだと難しいので省略します)」と書かれているものが多かったです。
という事で、今回は難しいと噂のWindowsにgethを入れて、Ethereumの内部通貨etherを手に入れる
ところまでを目標に進めていきたいと思います。
途中ハマってしまったポイントもあったので、それも併せてご紹介します。
gethのダウンロード
事前にCドライブにgethフォルダを作成しておきます。
1 |
C:\geth |
まず、gethをダウンロードします。
https://geth.ethereum.org/downloads/
このサイトからWindows 64bit用の最新gethをダウンロードします。
現時点の最新バージョンは1.5.7です。
「Installer」か「Archive」が選べるので、好きな方を選択して、
「Installer」であればインストーラーexeを実行、「Archive」であればzipファイルですので解凍をします。
これで、geth.exeが手に入りましたので、作成したgethフォルダに入れます。
1 |
C:\geth\geth.exe |
どうやらこれで準備は完了のようです。
難しいという話でしたが、拍子抜けな簡単さです。
では、正常にダウンロードされたかを確認しておきます。
コマンドプロンプトを管理者として実行して、以下のコマンドを入力します。
1 2 |
> cd C:\geth > geth help |
これで、gethのコマンドやオプションについての情報が表示されたら確認OKです。
genesis.jsonファイルの用意
まず、genesis.jsonというファイルを用意します。
このファイルは、ブロックチェーンの最初のブロックの情報を定義するものなので、初めに用意しておく必要があります。
作成したファイルはgeth.exeと同じフォルダに配置します。
1 |
C:\geth\genesis.json |
ファイルの中身は以下のように記述します。
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "nonce": "0x00006d6f7264656e", "difficulty": "0x200", "mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578", "coinbase": "0x0000000000000000000000000000000000000000", "timestamp": "0x00", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x", "gasLimit": "0x2FEFD8", "alloc": { } } |
テスト用ネットワークに接続
いきなり本番ネットワークに接続するのは怖いので、テスト用のプライベートネットワークに接続することにします。
まず、コマンドプロンプトを管理者として実行して、以下のコマンドを入力して、用意したgenesisファイルの内容で初期化をします。
1 2 |
> cd C:\geth > geth --datadir ./test1 init ./genesis.json |
実行結果の中にsuccessfullyの文字があれば成功です。
続いて以下のコマンドでgethを起動します。
1 |
> geth --networkid 9991457239471 --datadir ./test1 --maxpeers 0 --nodiscover console 2>> node.log |
これでgethが起動しました。
networkidに適当な値を設定することで、プライベートネットワークに接続されます。
処理結果はgethフォルダの中のnode.logに出力するように設定します。
用意したgenesisファイルの内容を読み込んでgethが起動しているかを確認しておきます。
1 |
> eth.getBlock(0) |
用意したgenesisファイルと同じ内容が表示されていればOKです。例えば、[nonce]の値や[mixhash]の値を確認して同じかどうかです。
etherを手に入れる
gethも起動出来ましたし、今回の最終目的であるetherを手に入れたいと思います。
まず、etherを持たせるアカウントを用意します。
personal.newAccount(パスワード)を入力すると作成できます。
1 2 |
> personal.newAccount("testPass") "0x57efed60fb46d7c3472792145d918c9ef8c45389" |
コマンドの下に表示されているのは実行結果として返却されるアカウントのアドレスです。
いよいよマイニング(採掘)でetherを手に入れます。
miner.start(スレッド数)と入力し、trueが返ってくればマイニングが開始されます。
1 2 |
> miner.start(1) true |
※ハマったポイントその1
一番最初はスレッド数を入力しないでマイニングを実行しました。
採掘の途中で[eth.hashrate]というコマンドを実行すると採掘状況の確認が出来るという事だったのですが、しばらく経つと何のコマンドも入力出来ない状態となり、CPU利用率を確認すると100%になっていました。
▶この原因はスレッド数を指定しなかったためでは?と思い、[“ethereum” “miner” “start” デフォルト]というキーワードでgoogle検索したところ、「指定しない場合は動作環境でのCPUコア数に設定されます」という記載を見つけました。スレッド数を未指定にしたためCPUをフル利用してしまったようです。
そのため、スレッド数を指定して再実行しました。
では、etherが手に入ったかを確認してみます。
1 2 |
> web3.fromWei(eth.getBalance(eth.accounts[0]),"ether") 0 |
結果は0でした。手に入っていません。
ログファイルnode.logを確認してみると「panic: ethash_full_new IO or memory error」というエラーが出ていました。
残ディスク容量は余裕があるし、メモリーも16GBあるので余裕なはずなんだけど・・
と、いろいろ調べたところ、
※ハマったポイントその2
Windowsのアカウント名に日本語の全角文字を登録していた事が原因だったようです。
▶[“windows” “ethereum” “panic: ethash_full_new IO or memory error”]というキーワードでgoogle検索したところ、https://github.com/ethereum/go-ethereum/issues/1092というページが見つかり、その中で「Windowsのユーザー名がラテン文字でない場合に発生する問題」という記載がありました。
この処理では以下のフォルダが使われているので、そのpathに全角文字が入っているとダメなようです。
よって、↓このようになっている(アカウント名)の部分を半角にしなくてはなりませんが
1 |
C:\Users\(アカウント名)\ |
Windowsで普通にアカウント名を変更しても、上記フォルダのアカウント名は変更されない(出来ない)ので、対処のしようがありません。
こうなってしまったら、別のアカウントを作成してそちらのアカウントでWindowsにログオンする等の対応が必要です。
▶自分の場合は無理矢理フォルダ名を変更する方法を探して対応しましたが、Windows自体にいろいろと別な問題が起きるのでお勧めは出来ません。
なお、上記のような問題が発生していない場合でも、最初の数分から数十分間はetherは増えていきません。
ここで、ログファイルnode.logを確認すると、以下のようなログが残っており、DAGファイルを生成中となっています。
1 2 3 |
Generating DAG: 0% Generating DAG: 1% Generating DAG: 2% |
このデータファイルの生成が100%にならないとetherのマイニングは始まりません。
DAGの生成が100%になった後に、再度etherが手に入ったかを確認してみます。
1 2 |
> web3.fromWei(eth.getBalance(eth.accounts[0]),"ether") 20 |
20ETHがマイニングできました!これで目標達成です。
最後にマイニングを停止して、gethも終了させます。
1 2 3 |
> miner.stop() true > exit |
まとめ
これで、WindowsにEthereumを入れてetherをマイニングするところまで完了しました。
Ethereumの初歩の部分ではありますが、一歩を踏み出すことが出来ました!
これからもEthereumの習得に取り組んでいきたいと思います。
今回の学習、記事作成にあたり以下のサイトを参考にさせて頂きました。
https://book.ethereum-jp.net/
https://github.com/ethereum/go-ethereum/wiki/Installation-instructions-for-Windows
- Windowsにgethを入れてEthereumの内部通貨etherを手に入れる - 2017年2月3日
batファイルのgenesis.jsonのファイル作成がうまくいきません。。
successがでないのですが何か原因が考えられますか?
「genesis.jsonファイルの用意」から「テスト用ネットワークに接続」にかけてのところですね?
こちらでも(Macですが)確認したところ、確かに動作しませんでした。
どうやら、gethのバージョンがあがったどこかのタイミングで”genesis.json”に必要なパラメータが増えたようです。
英語ですが、下記ページで同様のやりとりが行なわれていました。
https://github.com/ethereum/go-ethereum/issues/14356
上記のやりとりに従って”genesis.json”を下記のようにすると、私の方では動作しました。
こちらでご確認いただけますと幸いです。
miner.start(1)するとnullになるのですが、tureでなくnullでは・・。
ご指摘ありがとうございます。
こちらの記事を書いたのが”2017年2月3日”でして、このタイミングではgethのバージョンが1.5系でした。
(記事内で明記できておらず、申し訳ないです。)
この後”2017年4月14日”に1.6がリリースされまして、そのタイミングでご指摘のように”miner.start()”の戻り値が”null”になっています。
本サイトを活用頂けるように内容充実させていきたいと思いますので、引き続きよろしくお願いいたします。