Geth(Go Ethereum)でプライベートネットワーク用のbootnodeをセットアップする

Geth(Go Ethereum)でプライベートネットワーク用のbootnodeをセットアップする
この記事は最終更新から5年以上経過しています。内容が古くなっている可能性があります。

static-nodes.jsonにネットワークに参加するノードの接続情報を記載することで複数ノードによるEthereumのプライベートネットワークを構築することが出来ますが、この方法だと参加するノードが増えた場合、都度static-nodes.jsonへ情報を追記し、ネットワークの参加者へ配布する必要があります。

ネットワークへ参加するノード数が可変な場合はbootnodeをセットアップすると、bootnodeを介して自動的に他のノードを接続することが出来ます。

前提

ノードA(ホストOS)

  • OS:Wimdows10
  • Geth:1.8.11-stable
  • IP:192.168.1.5

構築の手順は以下の記事を参照
⇒Windows10へGeth(Go Ethereum)をインストールし、ローカル環境にプライベートネットワークを構築する

ノードB(ゲストOS)

  • OS:CentOS7
  • Geth:1.8.12-unstable
  • IP:192.168.56.101

構築の手順は以下の記事を参照
⇒CentOS7へGeth(Go Ethereum)をインストールし、複数ノードによるプライベートネットワークを構築する

bootnodeのセットアップ

今回はホストOS(Windows10)側へbootnodeをセットアップします。bootnodeを起動させるためには「bootnode.exe」を使用します。Gethをインストールする際に「bootnode.exe」をダウンロードしていない場合は公式サイトからダウンロードしてください。

https://geth.ethereum.org/downloads/

InstallerでDevelopment toolsにもチェックを入れてインストールする、もしくは「Geth & Tools」のArchiveをダウンロードすることで手に入れることが出来ます。

手に入れたら、以下のコマンドでbootnodeを起動します。

bootnode --genkey=boot.key

bootnode --nodekey=boot.key
INFO [06-22|00:43:07] UDP listener up                          self=enode://1da6f7b4de57b79d1d646d77539665145b5e4076842ec94b9506a508d1621908c93a94d4c6b1474ad43530629a621743ef4af90adc4e9b059bb11c181e539f23@[::]:30301

「self=」の後に記載されている情報がbootnodeの接続情報となります。[::]の部分はIPアドレスへと置き換えます。

bootnodeへの接続

bootnodeのセットアップが完了したら、Gethを起動します。「–bootnode」オプションでbootnodeの接続情報を指定し、Gethを起動します。

・ノードA

geth --networkid "8265" --datadir D:\ethereum\eth_private_net --port 50302 --nodiscover --bootnodes "enode://1da6f7b4de57b79d1d646d77539665145b5e4076842ec94b9506a508d1621908c93a94d4c6b1474ad43530629a621743ef4af90adc4e9b059bb11c181e539f23@192.168.1.5:30301" console 2>> D:\ethereum\eth_private_net\geth.log

・ノードB

geth --networkid "8265" --datadir /home/kkamata/eth_private_net --port 50303 --nodiscover --bootnodes "enode://1da6f7b4de57b79d1d646d77539665145b5e4076842ec94b9506a508d1621908c93a94d4c6b1474ad43530629a621743ef4af90adc4e9b059bb11c181e539f23@192.168.1.5:30301" console 2>> /home/kkamata/eth_private_net/geth.log

「admin.peers」を発行すると、お互いを認識していることがわかります。

・ノードA

geth --networkid "8265" --datadir D:\ethereum\eth_private_net --port 50302 --nodiscover --bootnodes "enode://1da6f7b4de57b79d1d646d77539665145b5e4076842ec94b9506a508d1621908c93a94d4c6b1474ad43530629a621743ef4af90adc4e9b059bb11c181e539f23@192.168.1.5:30301" console  2>>D:\ethereum\eth_private_net\geth.log
Welcome to the Geth JavaScript console!

instance: Geth/v1.8.11-stable-dea1ce05/windows-amd64/go1.10.2
coinbase: 0x18273f6158dbd1a74dbf29538b3f0b942b52593c
at block: 36 (Mon, 11 Jun 2018 00:13:45 JST)
 datadir: D:\ethereum\eth_private_net
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

> admin.peers
[{
    caps: ["eth/62", "eth/63"],
    id: "47f3bad2aaecbb4d94340f2e079e6e01536934353f8d416b6e0cffd61cf408310434475bd7194413c232e16ea71e70235bb4b9a1c80df03765fef41d72da8e14",
    name: "Geth/v1.8.12-unstable-574378ed/linux-amd64/go1.9.4",
    network: {
      inbound: false,
      localAddress: "192.168.56.1:64174",
      remoteAddress: "192.168.56.101:50303",
      static: true,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 4759942,
        head: "0x2ded2ac55445e22d27172b384575429b3452da1a14693e7305ba021dbf0a33a7",
        version: 63
      }
    }
}]

・ノードB

geth --networkid "8265" --datadir /home/kkamata/eth_private_net --port 50303 --nodiscover --bootnodes "enode://1da6f7b4de57b79d1d646d77539665145b5e4076842ec94b9506a508d1621908c93a94d4c6b1474ad43530629a621743ef4af90adc4e9b059bb11c181e539f23@192.168.1.5:30301" console 2>> /home/kkamata/eth_private_net/geth.log
Welcome to the Geth JavaScript console!

instance: Geth/v1.8.12-unstable-574378ed/linux-amd64/go1.9.4
coinbase: 0xc64c00997e98be546ad576e85be6c8ca51755ec8
at block: 36 (Mon, 11 Jun 2018 00:13:45 JST)
 datadir: /home/kkamata/eth_private_net
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

> admin.peers
[{
    caps: ["eth/62", "eth/63"],
    id: "b93e95a68fd53e34248b434022777e2f8f482ecceff73a6858281f65184f4d7d24acd33d13dfc7f05d2638806f2d10ab7e942be4bd24cac0cd46739f039c4524",
    name: "Geth/v1.8.11-stable-dea1ce05/windows-amd64/go1.10.2",
    network: {
      inbound: false,
      localAddress: "10.0.2.15:47344",
      remoteAddress: "192.168.1.5:50302",
      static: true,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 4759942,
        head: "0x2ded2ac55445e22d27172b384575429b3452da1a14693e7305ba021dbf0a33a7",
        version: 63
      }
    }
}]

まとめ

以上の手順でプライベートネットワーク用のbootnodeをセットアップ出来ました。常に動作している環境にbootnodeを起動しておくと、static-nodes.jsonへ情報を追記しなくても新たなノードがネットワークに参加することが出来るようになります。

static-nodes.jsonを利用したプライベートネットワーク構築

Geth(Go Ethereum)とstatic-nodes.jsonを用いてEthereumのプライベートネットワークを自動的に構築する

Ethereumカテゴリの最新記事


Warning: Use of undefined constant XML - assumed 'XML' (this will throw an Error in a future version of PHP) in /home/kkmax/kkmax-develop.com/public_html/wp-content/plugins/wp-syntaxhighlighter/wp-syntaxhighlighter.php on line 1048