1
0

More than 1 year has passed since last update.

Web3.0検証(7)-Blockchainのプライベートネットワーク

Last updated at Posted at 2022-04-21
[前回] Web3.0検証(6)-Blockchainのプライベートネットワーク

はじめに

前回は、1ノード(Peer)しか存在しないBlockchainプライベートネットワークを構築しました。
今回は、ノードを一つ追加します。

端末を二つ用意します。

  • 端末1: ノード1操作用(前回作成済み)
  • 端末2: ノード2操作用(今回作成予定)

端末1で、ノード1の新しいアカウントを作成

  • ノード1にアタッチ
$ geth attach $HOME/eth_private_net/data1/geth.ipc
  • 新しいアカウントを作成

コンソールから、MYPASSPHRASEをご自分の内容に書き換えた上、newAccountコマンド実行

> personal.newAccount("MYPASSPHRASE")
"0x92aad50ffefa0cf6a15ad9b924c98abd3296e05a"
  • ノード1の接続情報を確認

コンソールから、ノード1のenodeアドレスを取得。

> admin.nodeInfo.enode
"enode://f15f3be7ee06e09da37a417a4123f40fabf7eb9bcfbc3047d11555a62ff2313d4cda79809555a85a6758be3cd591f71b7f8e92f250f1a6a6459661aee6f16b64@127.0.0.1:30303?discport=0"

ノード1のenodeアドレスで、末尾のdiscport=0を除いた文字列が接続情報となります(IPv6の[::]などはIPv4に置き換え)。

"enode://f15f3be7ee06e09da37a417a4123f40fabf7eb9bcfbc3047d11555a62ff2313d4cda79809555a85a6758be3cd591f71b7f8e92f250f1a6a6459661aee6f16b64@127.0.0.1:30303"

端末2で、ノード2を作成しノード1と接続

  • データディレクトリを作成
$ cd
$ mkdir -p eth_private_net/data2
  • Gethの初期化
$ geth --datadir $HOME/eth_private_net/data2 init $HOME/eth_private_net/TestGenesis.json
  • Gethをコンソールモードで起動
$ geth --networkid 1234 --port 30304 --nodiscover --datadir $HOME/eth_private_net/data2 console 2>> $HOME/eth_private_net/data2/geth_error.log

※ 注意: portオプションを指定しないと、すでに起動中のノード1と衝突し起動失敗します。

Fatal: Error starting protocol stack: listen tcp :30303: bind: address already in use
  • 新しいアカウントを作成

コンソールから、MYPASSPHRASEをご自分のものに書き換えた上、newAccountコマンドを実行

> personal.newAccount("MYPASSPHRASE")
"0x5dcb4eca88e578495857d383be55bc6659dd2317"
  • ノード2からノード1へ直接接続してみる(一時的)

コンソールから、上述のノード1の接続情報を指定し、addPeerコマンドを実行。

> admin.addPeer("enode://f15f3be7ee06e09da37a417a4123f40fabf7eb9bcfbc3047d11555a62ff2313d4cda79809555a85a6758be3cd591f71b7f8e92f250f1a6a6459661aee6f16b64@127.0.0.1:30303")

成功するとtrueが表示されます。

  • ノード2とノード1の疎通確認

コンソールから、peersコマンドを実行。

> admin.peers
[{
    caps: ["eth/66", "snap/1"],
    enode: "enode://f15f3be7ee06e09da37a417a4123f40fabf7eb9bcfbc3047d11555a62ff2313d4cda79809555a85a6758be3cd591f71b7f8e92f250f1a6a6459661aee6f16b64@127.0.0.1:40116",
    id: "234e8b4a6f8b846c11eaaee3c727bdcabf306f02e75386f7370fe24dbf0cbe9f",
    name: "Geth/v1.10.18-unstable-bb5633c5-20220417/linux-amd64/go1.18.1",
    network: {
      inbound: true,
      localAddress: "127.0.0.1:30304",
      remoteAddress: "127.0.0.1:40116",
      static: false,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 16384,
        head: "0xcbfef64b08ea63eeb3a1787dc5cacca4887b56791da5790d1a62f9ab0cafcbee",
        version: 66
      },
      snap: {
        version: 1
      }
    }
}]

疎通確認できました。

  • ノード2のGethを停止
> exit
  • static-nodes.jsonを使って、ノード接続情報を保持

Gethが停止すると、上記の一時的接続情報はリセットされます。
static-nodes.jsonに接続情報を保存することで、ノードにアタッチ後に自動的にノード間接続が確立されるようになります。

  • ノード2のデータディレクトリに、static-nodes.jsonを作成

接続先ノードの接続情報をstatic-nodes.jsonへ記載。
ここでは、ノード2からノード1に接続したいので、ノード1の接続情報を記載。

$vi $HOME/eth_private_net/data2/static-nodes.json

[
 "enode://f15f3be7ee06e09da37a417a4123f40fabf7eb9bcfbc3047d11555a62ff2313d4cda79809555a85a6758be3cd591f71b7f8e92f250f1a6a6459661aee6f16b64@127.0.0.1:30303"
]
  • ノード2をバックグラウンドで起動
$ nohup geth --networkid 1234 --port 30304 --nodiscover --datadir $HOME/eth_private_net/data2 2>> $HOME/eth_private_net/data2/geth_error.log &
  • ノード2にアタッチ
$ geth attach $HOME/eth_private_net/data2/geth.ipc
  • ノード2とノード1の疎通確認
> admin.peers
[{
    caps: ["eth/66", "snap/1"],
    enode: "enode://f15f3be7ee06e09da37a417a4123f40fabf7eb9bcfbc3047d11555a62ff2313d4cda79809555a85a6758be3cd591f71b7f8e92f250f1a6a6459661aee6f16b64@127.0.0.1:30303",
    id: "234e8b4a6f8b846c11eaaee3c727bdcabf306f02e75386f7370fe24dbf0cbe9f",
    name: "Geth/v1.10.18-unstable-bb5633c5-20220417/linux-amd64/go1.18.1",
    network: {
      inbound: false,
      localAddress: "127.0.0.1:45646",
      remoteAddress: "127.0.0.1:30303",
      static: true,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 16384,
        head: "0xcbfef64b08ea63eeb3a1787dc5cacca4887b56791da5790d1a62f9ab0cafcbee",
        version: 66
      },
      snap: {
        version: 1
      }
    }
}]

疎通確認できました。

Peer Countを確認

> net
{
  listening: true,
  peerCount: 1,
  version: "1234",
  getListening: function(callback),
  getPeerCount: function(callback),
  getVersion: function(callback)
}

二つのノード間の接続のみで、peerCountは1となっています。
ネットワークとしては、寂しいですね。

おわりに

Blockchainプライベートネットワーク環境を構築できました。
次回は、さらにノード追加し、いろいろ検証してみます。
お楽しみに。

[次回] Web3.0検証(8)-Blockchainのプライベートネットワーク
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0