2
0

More than 1 year has passed since last update.

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

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

はじめに

2ノード(Peer)構成のBlockchainプライベートネットワークを構築できました。
今回は、さらにノードを二つ追加し、さまざまな検証ができるようにします。

端末をノード数分、四つ用意します。

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

端末1

  • (起動していない場合)ノード1をデフォルトのport 30303で、バックグラウンド起動
$ nohup geth --networkid 1234 --nodiscover --datadir $HOME/eth_private_net/data1 2>> $HOME/eth_private_net/data1/geth_error.log &
  • ノード1にアタッチ
$ geth attach $HOME/eth_private_net/data1/geth.ipc
  • ノード1の接続情報を確認

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

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

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

"enode://f15f3be7ee06e09da37a417a4123f40fabf7eb9bcfbc3047d11555a62ff2313d4cda79809555a85a6758be3cd591f71b7f8e92f250f1a6a6459661aee6f16b64@127.0.0.1:30303"
  • コンソールを終了
> exit

端末2

  • (起動していない場合)ノード2をport 30304で、バックグラウンド起動
$ 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の接続情報を確認

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

> admin.nodeInfo.enode
"enode://80c31e18e82947be6c4c6494d443af009a501eca7f3568c886e3154d59eb05308a268da9f1e6e0cb8a69be47e0267c8c98dab0f915806049d9bebc4eb30e5f0f@127.0.0.1:30304?discport=0"

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

"enode://80c31e18e82947be6c4c6494d443af009a501eca7f3568c886e3154d59eb05308a268da9f1e6e0cb8a69be47e0267c8c98dab0f915806049d9bebc4eb30e5f0f@127.0.0.1:30304"
  • コンソールを終了
> exit

端末3

  • ノード3のデータディレクトリを作成
$ cd
$ mkdir -p eth_private_net/data3
  • Gethの初期化
$ geth --datadir $HOME/eth_private_net/data3 init $HOME/eth_private_net/TestGenesis.json
  • ノード3をport 30305で、バックグラウンド起動
$ nohup geth --networkid 1234 --port 30305 --nodiscover --datadir $HOME/eth_private_net/data3 2>> $HOME/eth_private_net/data3/geth_error.log &
  • ノード3にアタッチ
$ geth attach $HOME/eth_private_net/data3/geth.ipc
  • 新しいアカウントを作成

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

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

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

> admin.nodeInfo.enode
"enode://6bcd825019877aaad5db0c9d1a37fba4ec199f974bd1a272ef5d2450dee1622077cbbdb3165e35fb5c68a5a979b95a0542d30f6402039ec28b6481569701fb65@127.0.0.1:30305?discport=0"

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

"enode://6bcd825019877aaad5db0c9d1a37fba4ec199f974bd1a272ef5d2450dee1622077cbbdb3165e35fb5c68a5a979b95a0542d30f6402039ec28b6481569701fb65@127.0.0.1:30305"
  • コンソールを終了
> exit

端末4

  • ノード4のデータディレクトリを作成
$ cd
$ mkdir -p eth_private_net/data4
  • Gethの初期化
$ geth --datadir $HOME/eth_private_net/data4 init $HOME/eth_private_net/TestGenesis.json
  • ノード4をport 30306で、バックグラウンド起動
$ nohup geth --networkid 1234 --port 30306 --nodiscover --datadir $HOME/eth_private_net/data4 2>> $HOME/eth_private_net/data4/geth_error.log &
  • ノード4にアタッチ
$ geth attach $HOME/eth_private_net/data4/geth.ipc
  • 新しいアカウントを作成

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

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

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

> admin.nodeInfo.enode
"enode://ba4c7255254e8f8934d6edca6d24b9c99d2e23f3bf64359f84fad6c7353f53cce00da78be720d75fe2b851ab6a570d4aa62ce2abf9b059a75af5bd0a9ee5dd8e@127.0.0.1:30306?discport=0"

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

"enode://ba4c7255254e8f8934d6edca6d24b9c99d2e23f3bf64359f84fad6c7353f53cce00da78be720d75fe2b851ab6a570d4aa62ce2abf9b059a75af5bd0a9ee5dd8e@127.0.0.1:30306"
  • コンソールを終了
> exit

端末1

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

接続先のノード2/ノード3/ノード4の接続情報をstatic-nodes.jsonへ記載。
※ 各接続情報の末尾のポート番号に着目

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

[
  "enode://80c31e18e82947be6c4c6494d443af009a501eca7f3568c886e3154d59eb05308a268da9f1e6e0cb8a69be47e0267c8c98dab0f915806049d9bebc4eb30e5f0f@127.0.0.1:30304",
 "enode://6bcd825019877aaad5db0c9d1a37fba4ec199f974bd1a272ef5d2450dee1622077cbbdb3165e35fb5c68a5a979b95a0542d30f6402039ec28b6481569701fb65@127.0.0.1:30305",
 
"enode://ba4c7255254e8f8934d6edca6d24b9c99d2e23f3bf64359f84fad6c7353f53cce00da78be720d75fe2b851ab6a570d4aa62ce2abf9b059a75af5bd0a9ee5dd8e@127.0.0.1:30306"
]
  • Gethプロセスを4ノード分すべて終了
$ pkill geth
  • ノード1をバックグラウンドで再起動
$ nohup geth --networkid 1234 --nodiscover --datadir $HOME/eth_private_net/data1 2>> $HOME/eth_private_net/data1/geth_error.log &

端末2

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

接続先のノード1/ノード3/ノード4の接続情報をstatic-nodes.jsonへ記載。

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

[
 "enode://f15f3be7ee06e09da37a417a4123f40fabf7eb9bcfbc3047d11555a62ff2313d4cda79809555a85a6758be3cd591f71b7f8e92f250f1a6a6459661aee6f16b64@127.0.0.1:30303",
  "enode://6bcd825019877aaad5db0c9d1a37fba4ec199f974bd1a272ef5d2450dee1622077cbbdb3165e35fb5c68a5a979b95a0542d30f6402039ec28b6481569701fb65@127.0.0.1:30305",
 
"enode://ba4c7255254e8f8934d6edca6d24b9c99d2e23f3bf64359f84fad6c7353f53cce00da78be720d75fe2b851ab6a570d4aa62ce2abf9b059a75af5bd0a9ee5dd8e@127.0.0.1:30306"
]
  • ノード2をバックグラウンドで起動
$ nohup geth --networkid 1234 --port 30304 --nodiscover --datadir $HOME/eth_private_net/data2 2>> $HOME/eth_private_net/data2/geth_error.log &

端末3

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

接続先のノード1/ノード2/ノード4の接続情報をstatic-nodes.jsonへ記載。

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

[
 "enode://f15f3be7ee06e09da37a417a4123f40fabf7eb9bcfbc3047d11555a62ff2313d4cda79809555a85a6758be3cd591f71b7f8e92f250f1a6a6459661aee6f16b64@127.0.0.1:30303",
 "enode://80c31e18e82947be6c4c6494d443af009a501eca7f3568c886e3154d59eb05308a268da9f1e6e0cb8a69be47e0267c8c98dab0f915806049d9bebc4eb30e5f0f@127.0.0.1:30304",
 
"enode://ba4c7255254e8f8934d6edca6d24b9c99d2e23f3bf64359f84fad6c7353f53cce00da78be720d75fe2b851ab6a570d4aa62ce2abf9b059a75af5bd0a9ee5dd8e@127.0.0.1:30306"
]
  • ノード3をバックグラウンドで起動
$ nohup geth --networkid 1234 --port 30305 --nodiscover --datadir $HOME/eth_private_net/data3 2>> $HOME/eth_private_net/data3/geth_error.log &

端末4

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

接続先のノード1/ノード2/ノード3の接続情報をstatic-nodes.jsonへ記載。

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

[
 "enode://f15f3be7ee06e09da37a417a4123f40fabf7eb9bcfbc3047d11555a62ff2313d4cda79809555a85a6758be3cd591f71b7f8e92f250f1a6a6459661aee6f16b64@127.0.0.1:30303", 
 "enode://80c31e18e82947be6c4c6494d443af009a501eca7f3568c886e3154d59eb05308a268da9f1e6e0cb8a69be47e0267c8c98dab0f915806049d9bebc4eb30e5f0f@127.0.0.1:30304",
 "enode://6bcd825019877aaad5db0c9d1a37fba4ec199f974bd1a272ef5d2450dee1622077cbbdb3165e35fb5c68a5a979b95a0542d30f6402039ec28b6481569701fb65@127.0.0.1:30305"
]
  • ノード4をバックグラウンドで起動
$ nohup geth --networkid 1234 --port 30306 --nodiscover --datadir $HOME/eth_private_net/data4 2>> $HOME/eth_private_net/data4/geth_error.log &

端末1

  • ノード1にアタッチ
$ geth attach $HOME/eth_private_net/data1/geth.ipc
  • ノード間の疎通確認
> admin.peers
[{
    caps: ["eth/66", "snap/1"],
    enode: "enode://ba4c7255254e8f8934d6edca6d24b9c99d2e23f3bf64359f84fad6c7353f53cce00da78be720d75fe2b851ab6a570d4aa62ce2abf9b059a75af5bd0a9ee5dd8e@127.0.0.1:30306",
    id: "069629886d0ca4a6f9b5263b3e84095ea001debc4865ff4ddb5d35ed3719ee72",
    name: "Geth/v1.10.18-unstable-bb5633c5-20220417/linux-amd64/go1.18.1",
    network: {
      inbound: false,
      localAddress: "127.0.0.1:44136",
      remoteAddress: "127.0.0.1:30306",
      static: true,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 16384,
        head: "0xcbfef64b08ea63eeb3a1787dc5cacca4887b56791da5790d1a62f9ab0cafcbee",
        version: 66
      },
      snap: {
        version: 1
      }
    }
}, {
    caps: ["eth/66", "snap/1"],
    enode: "enode://80c31e18e82947be6c4c6494d443af009a501eca7f3568c886e3154d59eb05308a268da9f1e6e0cb8a69be47e0267c8c98dab0f915806049d9bebc4eb30e5f0f@127.0.0.1:30304",
    id: "86c5825c93cee6abed50c1b61a40160630f9d2b0c5911dbb03f37decf58c4996",
    name: "Geth/v1.10.18-unstable-bb5633c5-20220417/linux-amd64/go1.18.1",
    network: {
      inbound: false,
      localAddress: "127.0.0.1:59394",
      remoteAddress: "127.0.0.1:30304",
      static: true,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 16384,
        head: "0xcbfef64b08ea63eeb3a1787dc5cacca4887b56791da5790d1a62f9ab0cafcbee",
        version: 66
      },
      snap: {
        version: 1
      }
    }
}, {
    caps: ["eth/66", "snap/1"],
    enode: "enode://6bcd825019877aaad5db0c9d1a37fba4ec199f974bd1a272ef5d2450dee1622077cbbdb3165e35fb5c68a5a979b95a0542d30f6402039ec28b6481569701fb65@127.0.0.1:30305",
    id: "b20320753843685c0d24b73ca11226675e1a7f6bec5ef1e30b14ae590c5bc0c7",
    name: "Geth/v1.10.18-unstable-bb5633c5-20220417/linux-amd64/go1.18.1",
    network: {
      inbound: false,
      localAddress: "127.0.0.1:43146",
      remoteAddress: "127.0.0.1:30305",
      static: true,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 16384,
        head: "0xcbfef64b08ea63eeb3a1787dc5cacca4887b56791da5790d1a62f9ab0cafcbee",
        version: 66
      },
      snap: {
        version: 1
      }
    }
}]

ノード1からノード2/ノード3/ノード4への疎通を確認できました。

  • Peer Countを確認
> net
{
  listening: true,
  peerCount: 3,
  version: "1234",
  getListening: function(callback),
  getPeerCount: function(callback),
  getVersion: function(callback)
}

期待とおり、peerCountが3になっています。

端末2

  • ノード2にアタッチ
$ geth attach $HOME/eth_private_net/data2/geth.ipc
  • ノード間の疎通確認
> admin.peers

ノード1/ノード3/ノード4への接続を確認。

  • Peer Countを確認
> net

peerCountが3になっていることを確認。

端末3

  • ノード3にアタッチ
$ geth attach $HOME/eth_private_net/data3/geth.ipc
  • ノード間の疎通確認
> admin.peers

ノード1/ノード2/ノード4への接続を確認。

  • Peer Countを確認
> net

peerCountが3になっていることを確認。

端末4

  • ノード4にアタッチ
$ geth attach $HOME/eth_private_net/data4/geth.ipc
  • ノード間の疎通確認
> admin.peers

ノード1/ノード2/ノード3への接続を確認。

  • Peer Countを確認
> net

peerCountが3になっていることを確認。

おわりに

ノードが四つになり、ようやくBlockchainプライベートネットワークぽく仕上がりました。
次回は、いよいよスマートコントラクトを用いたBlockchain内部構造の検証です。
お楽しみに。

[次回] Web3.0検証(9)-スマートコントラクトの作成
2
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
2
0