(2017/3/25追記)
以下の投稿リンクに続きを記載しました。
どちらかと言うと、複数ノード接続によるプライベート環境構築の方法に力点をおいていますが。。。
<リンク>
「Ethereum go-ethereum/gethでのプライベート環境構築方法について」
以上
Ethereum go-ethereum/gethをubuntuへインストールし、プライベート環境にて複数ノードの接続検証実施時に気づいたgethバージョンによる注意点について纏めました。
(ざっくりした感じですみません。。。)
【本文】
複数ノードをプライベート環境でP2P接続を実施する場合、geth起動時にオプションにてNetwork Listening Port(--port XXXXX(※パブリック環境はデフォルトで30303))を指定する必要がありますが、インストール時のgethバージョンによっては、正常に機能していない可能性があることに気づきました。
具体的には、gethバージョン1.5.9以上だと、geth起動時にNetwork Listening Portを指定しても、geth起動後にnodeinfoで中身を覗くと、ランダムなport番号が割り当てられてしまうようです。
なお、幾つかのバージョンで検証した結果、gethバージョン1.4.20までは指定したport番号の通りに起動するようです。
【検証したgethバージョン】
v1.3.6
v1.4.20
v1.5.9
v1.6.0
【geth起動例】
$ geth --dev --datadir ABC --port 50303 --nodiscover --maxpeers 10 console
上記でgeth起動後、
> admin.nodeInfo
を実行。
<~v1.4.20:geth>
[nodeinfo]
{
enode: "enode://publickey_of_node@[::]:50303?discport=0",
(以下略)
}
(コメント)
「--port 50303」と指定した通りに起動していることが、nodeinfoで確認できる。
<v1.5.9~:geth>
[nodeinfo]
{
enode: "enode://publickey_of_node@[::]:XXXXX?discport=0",
(以下略)
}
(コメント)
「--port 50303」と指定したもののnodeinfoで確認すると、実際にはランダムなport番号が割り当てられる。
【Network Listening Portがランダムに割り当てられる場合の問題点】
本来であれば、プライベート環境で複数ノードを接続する際に、static-nodes.jsonを使用すれば、毎回、接続コマンド(addPeer)を発行しなくても、static-nodes.json内の接続先情報を各ノードが読み込み自動接続してくれます。
その際、設定情報として、「"enode://publickey_of_node@ip:port"」が必要なのですが、今回の問題でいうと、portが毎回ランダムに変更されるため、static-nodes.jsonファイルを読み込んで自動接続ができなくなります。
また手動接続する場合も、ランダムなport番号を指定してaddPeerコマンドを発行しても、うまく接続できないという事象が発生します。
以上よりプライベート環境で複数ノードによる接続検証を行いたい場合、現時点では、gethバージョンをv1.4.20以下にしておくことをお薦めします。
【後記】
今回のgeth起動オプションの一つである「--port XXXXX」(Network Listening Port)がgethバージョン次第では指定したport番号ではなくランダムに割り振られる、という事象については、他事例や解決策がないか調査中です。
(※現状、英文含めこの話題に触れている記事を見つけることができず、私だけの固有な事象かもしれませんし。。。)
私と同事象が発生して悩んでおられる方がいればと思い、今回の投稿となりました。
何か有益な情報が確認できたらまた連携します。
【参考情報】
<複数ノードの接続方法について>
・ethereumのPrivate Chainを2台のマシンで運用する(ばりきのあしあと)
http://barikidazu.blog.fc2.com/blog-entry-98.html
・Ethereum(geth)でプライベート・ネットワークを作る手順
http://qiita.com/hshimo/items/8b69975d40466022f278