ハーモニーネットワークでのピアディスカバリー

ピアディスカバリは、新しいノードがネットワークに参加するための分散ネットワークの重要なメカニズムの1つです。ブロックチェーンネットワークは、数千のノードを持つ分散ネットワークです。また、ノードがいつでもネットワークに参加またはネットワークから離脱することも珍しくありません。この投稿では、ビットコインとイーサリアムのブロックチェーンネットワークにおけるピア発見メカニズムを詳細にレビューします。

ここでは、ホワイトペーパーの現在の設計に基づいて、Harmonyブロックチェーンのピア発見プロトコルを紹介します。

BTCネットワークでのピアの発見

ビットコインネットワークでピアを検出する主な方法は、以前に接続されたBTCノードのリストに接続することです。ただし、最初の接続では、ノードは、既知のDNSフィードを使用して、長時間実行される安定したノードのIPアドレスのリストを取得する必要があります。フォールバックメカニズムは、ビットコインノードソフトウェアでハードコードされたIPアドレスのリストを使用することです。たとえば、seed.bitcoinstats.comドメイン名は、IPアドレスのリスト全体に解決されます。 http://bitcoinstats.com/network/dns-servers/は、ボランティアが実行するDNSサーバーのリストを保持しています。

bitcoinstats.comドメインは、2011年1月15日にDynadot、LLCによって登録されています。次の例は、いくつかの有名なビットコインノードをリストしています。

すべてのビットコインノードは「getaddr」メッセージを処理する必要があります。ノードは、「getaddr」メッセージに、過去3時間の最新性に基づいてノードが認識しているランダムに選択したIPアドレスの23%で応答します。また、最大2,500個のIPアドレスです。理論的には、ノードは、近隣を繰り返し照会することにより、ビットコインネットワーク内のすべてのノードのすべてのIPアドレスを知ることができます。ビットコインは、接続ごとに1つの「getaddr」応答のみを送信することで、すでにこの問題に対処しています。

新しいビットコインノードは、最初にポート8333でTCP接続を確立します。protocol_version、local service、nTime、addrYou、addrMe、subversion、startingHeight、など(Github:https://github.com/bitcoin/bitcoin/blob/e74649e95122c9c61aadf607461cf701c3953f88/src/net_processing.cpp#L334)。ピアノードは、「verack」で応答して接続を確認および確立し、オプションで接続を往復してピアとして接続するために独自の「バージョン」メッセージを送信します。 1つまたは複数の接続が確立されると、新しいノードは自身のIPアドレスを含むaddrメッセージを近隣に送信します。次に、近隣はaddrメッセージを近隣に転送し、新たに接続されたノードが既知であり、より適切に接続されるようにします。

ETHネットワークでのピア検出

イーサリアムネットワークでのピア検出では、ビットコインネットワークと同様のメカニズムが使用されます。 Ethereumノードソフトウェアには、https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go#L23-L31のように、ハードコードされたブートノードがいくつかあります

Ethereumのピア発見アルゴリズムは、Kademlia分散ハッシュテーブル(DHT)プロトコルに基づいています。元のKademliaとは異なり、256ビットのIDでKademliaプロトコルの「PING」および「FIND_NODE」RPCのみを使用します。すべてのノードは、XORメトリックを使用して近隣ノードのハッシュテーブルを維持します。 Node Discovery Protocol v4は、Ethereumノードに関する情報を保存するKademilaのようなDHTの詳細を提供します。 Kademlia構造が選択されたのは、直径が小さいトポロジを生成するためです。 Rchainには、ここでETHノード発見プロトコルに関するwikiの良い記事があります。

同様に、RapidChainは、委員会間通信にKademliaルーティングメカニズムを使用すると主張しています。これはおそらく、リーダーベースまたはクライアント主導のクロスシャードトランザクションを回避するのに役立つでしょう。

ハーモニーネットワークでのピアディスカバリー

ビットコインおよびイーサリアムと同様に、新しいノードがHarmony Networkに接続しようとする場合、ピア検出が必要です。

2つのシナリオがあります。初期接続では、新しいノードはDNSfeedを使用して、既知のノードのIPアドレスのリストを取得してネットワークに参加する必要があります。再参加の場合、ノードは以前に接続されたノードのリストを使用して開始する場合があります。

ピアに接続するには、ノードは「ハンドシェイク」を行う必要があります。ハンドシェイクはPINGメッセージです。 pingメッセージには、プロトコルバージョン、ノードのIPアドレス、公開キー(256ビットのハッシュ値)が含まれます。ピアノードはPONGメッセージで応答して、リクエスターとの接続を確認し、他のピアのリストも送り返します。ピアノードは、PINGメッセージを送信して、新しいノードとの接続を作成することもできます。ここでの質問は、すべての新しいノードが同じピアノードに接続しようとするのを避ける方法です。ピア接続が特定の数、たとえば20を超えると、ピアノードはポンメッセージで応答した後に接続を拒否する可能性があります。最終的に、ネットワーク内の各ノードは、隣接ノードへの20の同時接続を維持し、p2pネットワークを形成します。ここでの別の未回答の質問は、グローバルレベルのp2pネットワークではなく、1つの委員会内でp2pネットワークを管理する方法です。

Harmonyはシャードブロックチェーンであるため、ビーコンチェーンを介したPoS検証の完了後、最初に新しいノードがアクティブノードリストに配置されます。検証プロセスは、新しいノードがいくつかのコインをシステムアカウントに預けるためのトランザクションを作成すると開始されます。新しいノードが最初の接続を確立した後、トランザクションはビーコンチェーンにルーティングされます。ビーコンチェーンノードはコンセンサスを実行し、トランザクションを承認して承認します。トランザクションが承認されると、新しいノードは待機リストでネットワークに参加できます。ビーコンチェーンはVRF / VDFを実行して、委員会の構成を行うために不偏ランダム性を生成します。再シャーディングアルゴリズムは、ランダム性と境界のあるカッコウルールに基づいて、新しいノードを異なる委員会に配置します。カッコウ規則に従って、新しいノードがより多くのノードで委員会に参加する可能性が高いため、ノード数の少ない委員会への攻撃を回避できます。

テストネットの起動では、主にスポットインスタンスをオフラインにして再参加するため、単純なハッシュアルゴリズムを実装してノードを委員会に入れることができます。プロセス全体を簡素化します。ビーコンチェーンを表すために別のノードを使用します。リーダーノードが起動し、ビーコンチェーンに接続します。ビーコンチェーンに接続する最初のNノードについては、各委員会のリーダーとして使用されます。

シーケンス図

私たちは、私たちの設計と実装に関してコミュニティと関わることを楽しみにしています。質問については、leo @ harmony.oneで私に連絡してください。

Harmony.oneの開発進捗をフォローします。

  • ウェブサイト
  • Github
  • LinkedIn
  • Twitter
  • 電報