WindowsでEthereumスマートコントラクト入門「gethのインストールからHelloWorldまで」を写経してみる(1)
以下の本を読んでいるが、amazonのレビューによると、イーサリアムの仕様?が変わっていて、2018年1月現在、Chapter3以降は、なんと動かないらしい。
(分かっていて購入しましたが、まだ実行していないのでなんとも、、、)
とりあえず、以下のサイトを写経してみる。
https://blockchain-jp.com/tech/240
(開発環境)
Windows 8.1 Pro 64bit
geth 1.7.3
Visual Studio Code
(1)gethのZIPファイルのダウンロード
いきなり写経できないのだが、以下のサイトからダウンロード。
https://geth.ethereum.org/downloads/
なんかこのページ。開いてから30秒ほど待たされる。ブロックチェーンと何か関係があるのかな?
しかし、1回目のダウンロードは、「ネットワークエラー」で失敗。
こんなことあったかな、今まで。。。
なんか、ダウンロードに数分時間がかかっているので、そちらの方はやめて、下の方へ行ってWindows 64bit用のArchive(約10MBのZIPファイル)をクリックしてダウンロード。
1分以内にダウンロードが終了し、ZIPファイルを展開すると以下の容認なっている。
C:/geth/ フォルダを作成し、その中に、上記ZIPファイルの中のgeth.exeをコピーする。
(2)VisualStudioCodeで開いて、geth.exeの動作確認。
C:/geth/ フォルダを、VisualStudioCodeで開く
Ctrl + @ でVisualStudioCode内にコマンドプロンプトが出てくるので、そこで、
geth help
(3)genesis.jsonを作成
C;/geth/ フォルダに、genesis.json を作成して、こちらのサイトのコードをコピペ。
一度、VisualStudioCodeを閉じます。
(4)テスト用ネットワークに接続
テスト用のプライベートネットワークに接続する。
VisualStudioCodeを右クリックして、「管理者として実行」をクリック。
「ターミナル」のところに、
geth --datadir ./test1 init ./genesis.json
とりあえず、Successfully wrote genesis state と書いてあるので大丈夫そう。
geth --networkid 9991457239471 --datadir ./test1 --maxpeers 0 --nodiscover console 2>> node.log
よくわからないけれど、こちらのサイトにあるように、以下のコマンドを入力。
eth.getBlock(0)
genesis.json と同じ内容が表示されればOKらしい。全く同じではないが、genesis.jsonの一部が表示されているので、OKかな。
(5)etherを手に入れる(プライベートネットワーク内で)
あくまで、自分のプライベートネットワーク内で通用するetherをマイニングします。
実際に世界で使用できるetherをマイニングするためには、メモリ4GB以上のGPUが必要だそうです。え!?メモリ4GB以上のGPUって、ひと昔私に自作パソコンしていた私にはありえないです。ちなみに、メモリ6GBのGTX 1060 は、GPUだけで4万円くらいのようです。
とりあえず、以下のコマンドを入力。(今回はプライベートネットワーク内なので、パパスワードは見えるようにしていますが、本番では、この"testPass”というのが、他の人に絶対に知られてはいけない「秘密鍵」になるらしいです。自分がパスワードを忘れても、そのウォレットに入っていたお金は二度と戻らないらしいです。)
personal.newAccount("testPass")
以下のコマンドを入力して、etherのマイニングを開始。(あくまで、プライベートネットワーク内ですが、、、)
miner.start(1)
がっくし、ここでエラー。
と思ったら、nullと出ても、このサイトによると、
miner.getHashrate()
と入力した後に出てくる値は0以上であれば、エラーではないらしい。実際、タスクマネージャーを見てみると、CPU 100 %となっており、私の貧弱なノートパソコンは、なんだかマイニングしまくっているらしい。
しばらくして、20分くらいたったころ、タスクマネージャーを見ると、以下のようになっており、
miner.getHashrate()
すると、以下のうように、"35487″と表示された。
(6)マイニングを停止
miner.stop()
(7)残高を確認
eth.getBalance(eth.accounts[0])
geth ではなく、eth でした。とりあえず、1.9×10^21 wei (1 wei = 0.000000000000000001 ether) はマイニングできたようです。(自分のプライベートネットワーク内でしか使用できませんが。)
もう一つ、以下の方法でも、手に入れたETHを確認できるそうです。
web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")
こっちの方が、1935ETH手に入ったということで、分かりやすいかもしれません。
とりあえず、プライベートネットワーク内で、ETHをマイニングすることができました。
次回こそ、Hello Worldしたいと思います。
(参考)
https://blockchain-jp.com/tech/240
https://qiita.com/amachino/items/b59ec8e46863ce2ebd4a
https://tatujin-dejimono.com/virtual_currency/eth_2017_02/
ディスカッション
コメント一覧
まだ、コメントがありません