ステークプール間のP2Pコミュニケーションにより、ネットワークが拡大するにつれCardanoがよりダイナミックで効率的に
2021年4月6日 Olga Hryniuk 読了時間7分
Cardanoの分散化はブロックチェーンの運営責任をステークプールの手に委ねます。この重要な要素は、分布したすべてのノード間に安定した効果的な接続と、障害に対するネットワークの回復性を確保します。
より単純なブロックチェーンバージョンであるByronでは、Cardano財団、Emurgo、IOHKが操作する連合型(OBFT)ノードがブロック生成およびネットワーク接続の管理に全責任を負っていました。これは、ステークプールが運営する何千もの分散型ノードで構成されるシステムを構築する間、ネットワークを維持していました。Cardanoは分散化を達成するために、2017年の創設時以来システムをサポートしてきた連合型ノードを終えました。
2020年12月6日、kパラメーターを500に設定し、「実行可能」なプールの数を拡大することにより、さらなる分散化が促進されました。また、dを段階的に減らして、ブロック生成権を完全にコミュニティの手に移しました。現在すべてのブロックがステークプールオペレーター(SPO)コミュニティにより生成され、Cardanoのブロック生成は完全に分散化されています。このパラメーター変更は長期的なチェーンの持続性をサポートし、ステークプール間におけるステークと見込み報酬のより平等な拡散を促進します。
わずか6か月ほどで、一握りの連合型ノードに依存したシステムは、2000を超えるステークプールにより、エポックごとに何千ものブロックが生成される、コミュニティ運営のプルーフオブステークシステムへと進化を遂げたのです。
ネットワーク
Cardanoのネットワーク層は物理的なインフラストラクチャーであり、ノードとそのやり取りを統一されたシステム内で結合しています。ネットワークは、すべてのアクティブノードにトランザクションおよびブロック生成の情報を拡散します。この方法で、システムはブロックを認証し、チェーンに追加し、トランザクションを検証します。したがって、分散型ノードのネットワークにおいては、通信遅延を最小に抑え、障害や容量制限、ハッカーに対応できるに足る回復性を持つ必要があります。
旧連合型システムでは、ノードはトポロジーファイルで定義された静的設定によって接続されていました。Shelleyの導入以来、システムはハイブリッドモードで機能しており、ノードは連合型リレーとともに他のSPOリレーと接続されています。この接続は部分的に手動設定で、SPOは連合型ノードに依存せずにブロックやトランザクション情報をやり取りすることができます。
Marcin Szamotulskiは「Cardano分散化への道」でネットワークの設計について述べ、CardanoのShelleyを使用したネットワーク分散化へのアプローチを説明しています。ブロック生成という観点から完全な分散化を果たした今、ネットワークの接続も分散化させることが肝要です。CardanoはこれをP2P接続へのシフトにより達成します。
P2Pネットワーク
ここで、より大規模でダイナミック、そして複雑なネットワークに対応するためにエンジニアリングチームによって最近強化されたソフトウェアツールのセットであるネットワークの「スタック」について説明しましょう。
P2P通信はノード間における情報の流れを強化して連合型ノードへのネットワークの依存度を削減(最終的には排除)し、Cardanoの分散化を可能にします。望ましい回復性を達成するために、IOHKのネットワークチームは、高度なP2P機能を使用したネットワークスタックの改良に勤しんでいます。こうした改良はプロトコルの変更を必要とせず、むしろ自動的なピア選択および通信を可能とします。
P2Pネットワークは以下のコンポーネントを使用することで可能となります。
図1:P2Pアーキテクチャー
では、ノード接続の確立方法についての詳細、そしてノード間のデータ交換が最新の開発によりどのように合理化されたかを見てみましょう。
ミニプロトコル
一連のミニプロトコルはノード間の通信を可能にします。各プロトコルは基本的な情報交換要件を実装します。例えば、ピアに最新ブロックを伝える、ブロックを共有する、トランザクションを処理する、などです。Chain-sync、block-fetch、tx-submissionの各プロトコルは、ネットワーク内におけるノードツーノード通信にブロックのチェーンやトランザクションを分配するために使用されています。
- block-fetch:チェーンのデータベースから情報を引き出す
- chain-sync:フェッチしたデータをネットワーク内で同期する
- tx-submission2:ピアのメモリープールからトランザクションを得て、それをローカルのメモリープールに追加する。これにより、ピアが自分のトランザクションをノードに送信することが可能になる。現行のtx-submissionプロトコルの改良版
これらのミニプロトコルはOuroborosコンセンサスプロトコルをサポートしています。最適なネットワークサービスを確保するため、チームは追加プロトコルを実装しています。
- keep -alive:ノード間の継続的接続を確保し、パフォーマンス障害を最小化する
- tip-sample:パフォーマンスの観点から、どのピアがより優れた接続性を持つかという情報を提供する
ネットワークアーキテクチャーの詳細とミニプロトコルの例は、Cardanoドキュメンテーションサイトをご覧ください(英語のみ)。
接続管理
ネットワークサービスはLinux、Windows、macOSをサポートしていますが、各オペレーティングシステムによりサポートされている接続数は異なります。
システムの過負荷を避けるために、マルチプレキサーが複数のチャネルを1つのTCP(Transmission Control Protocol)接続チャネルにまとめます。これは2つの利点を提供します。ピア間の双方向通信(すべてのピアが同チャネル内で読み書きの許可を得ているため制限なしに通信を開始できる)、そして、パフォーマンスに影響しないノードツーノードの通信強化です。
ネットワークチームは、P2Pガバナーを統合する双方向対応の「接続マネージャー」を実装しており、現在デプロイ前の最終テスト段階に入っています。さらに、マルチプレキサーのAPIは、新たな接続およびプロトコルを監視できるようにアップグレードされました。この強化により、接続管理の効率と不具合の追跡が向上します。
P2Pガバナーの機能性
Cardanoネットワークにはさまざまなピアノードが関わります。一部は他よりもアクティブで、一部は接続を確立しており、一部は最高のシステムパフォーマンスを確保するために促進させる必要があります。「Cardano分散化への道」で説明したように、ピアは3つのカテゴリーに分類されます。
- コールドピア
- ウォームピア
- ホットピア
こうしたピア間で双方向接続を確立するためには、どの接続がアクティブかを知ることが不可欠です。
図2:Cardanoのピアディスカバリー
P2Pガバナーは接続を管理し、どのピアがアクティブで、パフォーマンスが優れているかという情報を提供します。この機能は、ピアの接続を促進してシステムパフォーマンスを向上させ、ネットワーク全体の接続マップを構築および維持することで優れた可視性を提供します。ガバナーはこれらを自動で処理することで接続定義のプロセスを簡易化するため、少数の中心的ステークプールが手動で設定する必要はなくなります。ガバナーはコールド、ウォーム、ホットのステータス間でピアを昇格または降格し、接続マネージャーとやり取りして新たな接続を開いたり、既存の接続を再利用したりします。
P2Pデプロイメントロードマップ
IOHKネットワークチームは、P2Pガバナーとノードの統合で品質テストの最終段階に入っています。この後、チームはネットワークスタックをより多くのプロトコル、特にゴシッププロトコルで拡張します。これは、ピア間にシームレスなデータ交換を提供し、分散型通信マップの構築に役立ちます。
こうした技術的アップグレードにより、Cardanoノードのインターフェイスは簡易化され、システム設定は改善されます。テストが終了すると、すべてのSPOは、接続を強化するために設定を更新し、単純化することができるようになります。
P2Pの完全なデプロイまでに、以下の段階を踏むことになります。
図3:P2Pデプロイメントロードマップ
チーフアーキテクトのDuncan Couttsによるプランの説明は、3月のCardano360から抜粋したこの動画をご覧ください。
ガバナンスがネットワークの確立、維持、サポートに重要な役割を果たした一方で、すべてのステークプールに公平な機会を確保するネットワークの真のサステナビリティは分散化によってのみ達成できます。したがって、スタック改良の目的は、すべてのステークプールが分散化された環境で同じ設定を実行し、公平な可能性を確立することを可能にすることです。
このブログでは、今後も開発に関する更新情報をお届けします。また、最近の改良や開発については、Cardanoの週刊技術レポートもあわせてご覧ください。