以前本Blog内にて各OS別Ethereumのインストール及び簡単な操作についてご紹介させて頂きました。今回は少しだけ進んで複数の端末から相互に接続し、プライベートネットワークを作ってみたいと思います。
前提
以降は端末2台による操作を想定し、それぞれ端末A/端末Bとします。また端末AはWindows、端末BはUbuntuを使用し作業を進めたいと思います。
※端末でOSを変えている事について深い意味はありません。せっかくなので前回までに学習した環境を使ってみます。
・端末A,BともにIPアドレスの取得を行います。
※今回は端末A:192.168.4.131 端末B:192.168.1.64とします。
・それぞれ端末にgethのインストールをします。
端末AのWindowsへのインストールについては以下以前の記事をご参照ください。
端末BのUbuntuへのインストールについては以下以前の記事をご参照ください。
・端末A,Bともに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": { } } |
・端末A,Bともにgethを実行するフォルダにtestフォルダを作成します。
gethの起動
まずはgethの起動を行います。複数ノードを接続する際は環境をあわせるため端末A、Bともに前提条件にて用意した同じファイル(genesis.json)を使用し起動します。
端末A,Bともに以下コマンドを実行します。
1 |
> geth --datadir ./test init ./genesis.json |
※–datadir:データ格納先
1 |
> geth --networkid 10 --datadir ./test --maxpeers 1 --nodiscover console 2>> node.log |
※–networkid:任意のネットワークID(1,2,3以外)
※–datadir:データ格納先
※–maxpeers:最大ピア数
※–nodiscover:ピアを自動接続させない
gethが起動されます。
ノード接続前確認
端末A,Bともに以下コマンドで接続数を確認して見ましょう。
1 2 |
> net.peerCount 0 |
双方とも接続数は0です。
また以下コマンドで接続ノード情報を確認して見ましょう。
1 2 |
> admin.peers [] |
双方とも接続情報はありません。
ノード接続
それではノードの接続に進みます。まずは端末A,Bそれぞれのノード情報を取得します。
端末A
1 2 |
> admin.nodeInfo.enode "enode://2f6b3cf1f2fbdb6c9d711fa36fad3a1a35e7f026826f854e6bd7a0480145a993e04960f33196845ffa0aea979a324ab2fbca5666024d85e2ba77bb843d401222@[::]:30303?discport=0" |
端末B
1 2 |
> admin.nodeInfo.enode "enode://f3019d8b612f58f60c9eb0aacdb58bda9290d2390cebbe7c8427bbd9f05e1d2e5869e5e0e773d6ce3c633e1852cf4361abe63cbb89465ac5f1e3fddd6ef5ce00@[::]:30303?discport=0" |
端末A,B間ノードの接続を行います。
前述で取得したノード情報の”[::]”部分に前提条件で取得したIPアドレスを記述し、端末Aに対し端末Bのノード情報を端末B対し端末Aのノード情報をそれぞれ設定します。
端末A
1 |
> admin.addPeer("enode://f3019d8b612f58f60c9eb0aacdb58bda9290d2390cebbe7c8427bbd9f05e1d2e5869e5e0e773d6ce3c633e1852cf4361abe63cbb89465ac5f1e3fddd6ef5ce00@192.168.1.64:30303?discport=0") |
端末B
1 |
> admin.addPeer("enode://2f6b3cf1f2fbdb6c9d711fa36fad3a1a35e7f026826f854e6bd7a0480145a993e04960f33196845ffa0aea979a324ab2fbca5666024d85e2ba77bb843d401222@192.168.4.131:30303?discport=0") |
ノード接続後確認
それぞれの端末で接続数、接続情報を確認して見ましょう。
端末A
1 2 |
> net.peerCount 1 |
端末B
1 2 |
> net.peerCount 1 |
端末A
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
> admin.peers [{ caps: ["eth/62", "eth/63"], id: "f3019d8b612f58f60c9eb0aacdb58bda9290d2390cebbe7c8427bbd9f05e1d2e5869e5e0e773d6ce3c633e1852cf4361abe63cbb89465ac5f1e3fddd6ef5ce00", name: "Geth/v1.5.9-stable-a07539fb/linux/go1.7.3", network: { localAddress: "192.168.4.131:53062", remoteAddress: "192.168.1.64:30303" }, protocols: { eth: { difficulty: 2048, head: "0xfc74c13f265f78d35467ba26602a165ad7873ecaa69316d71f831a53e145a720", version: 63 } } }] |
端末B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
> admin.peers [{ caps: ["eth/62", "eth/63"], id: "2f6b3cf1f2fbdb6c9d711fa36fad3a1a35e7f026826f854e6bd7a0480145a993e04960f33196845ffa0aea979a324ab2fbca5666024d85e2ba77bb843d401222", name: "Geth/v1.5.3-stable-978737f5/windows/go1.7.3", network: { localAddress: "192.168.1.64:30303", remoteAddress: "192.168.4.131:53062" }, protocols: { eth: { difficulty: 2048, head: "0xfc74c13f265f78d35467ba26602a165ad7873ecaa69316d71f831a53e145a720", version: 63 } } }] |
双方端末の接続数が1、接続情報が設定されid及びremoteAddress等端末A,Bともに相手側の情報が見えるようになりネットワークが繋がりました!
まとめ
いかがでしたでしょうか。今回プライベートネットワークを構築するにあたり初めの一歩として2ノード接続を例にご紹介させて頂きましたが3、4ノードと拡張しさらに複数のノード接続が可能になるかと思います。
筆者もEthereumについては学習し始めたばかりでまだまだ入り口のご紹介となりますが、少しでもお役に立てたらと思います。
- IBM bluemixで HyperLedger Fabricの環境を構築してみる - 2017年6月8日
- Ethereumで複数ノードをつなげてプライベートネットワークを作ってみる - 2017年3月15日
本記事に対するコメントはまだありません