[前回] 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内部構造の検証です。
お楽しみに。