下記の記事はIOGブログの記事「Boosting network decentralization with P2P」を翻訳したものです。
P2Pでネットワークの分散化を促進
ステークプール間のピアツーピア通信により、ネットワークの成長に伴い、カルダノはよりダイナミックでより効率的になります。
2021年4月6日 Olga Hryniuk 7 mins read
カルダノの分散化により、ブロックチェーンの運営責任はステークプールの手に委ねられています。そのためには、分散されたすべてのノード間の信頼性の高い効果的な接続と、障害に対するネットワークの回復力の確保が不可欠です。
よりシンプルだったバイロン版ブロックチェーンでは、カルダノ財団、Emurgo、IOHKが管理するフェデレート(OBFT)ノードが、ブロック生成とネットワーク接続の管理を全面的に担当していました。これにより、ネットワークを維持しつつ、ステークプールによって運営される数千の分散ノードのシステムを構築した。今回、分散化を実現するために、カルダノは2017年の誕生以来、システムを支えてきた連合ノードの普及を終了しました。
2020年12月6日、私たちは「実行可能な」プールの数を拡大し、分散化をさらに促進するために、kパラメータを500に設定しました。また、ブロック生産の力を完全にコミュニティの手に委ねるために、dを徐々に減らしてきました。現在、ブロックの100%はステークプールオペレーター(SPO)コミュニティによって生産されており、カルダノのブロック生産は完全に分散化されていることになります。これらのパラメータの変更は、長期的なチェーンの持続性をサポートし、ステークプールの間でステークと潜在的な報酬をより均等に広げることを促します。
わずか半年で、私たちは一握りの連合ノードに依存したシステムから、コミュニティによって運営されるプルーフオブステークシステムへと進化し、2,000以上のステークプールによってエポック毎に何千ものブロックが生成されるようになりました。
ネットワーク
カルダノのネットワーク層は、ノードとその相互作用を統合的なシステムにする物理的なインフラです。ネットワークは、取引やブロック作成に関する情報を、すべてのアクティブなノードに分配します。このようにして、システムはブロックを検証してチェーンに追加し、取引を確認する。このように、分散型ネットワークのノードには、通信の遅延を最小限に抑え、障害や容量制限、ハッカーなどに対応できる回復力が求められます。
従来のフェデレートシステムでは、ノードはトポロジーファイルで定義された静的な構成で接続されていました。シェリー(Shelley)が導入されて以来、システムはハイブリッド・モードで機能しており、ノードはフェデレート・リレーと他のSPOのリレーに接続しています。この接続性は部分的に手動で構築されていますが、SPOはフェデレートされたノードに依存することなく、ブロックやトランザクションの情報を交換することができます。
Marcin Szamotulski氏は、記事「Cardano’s path to decentralization」の中で、ネットワークの設計について説明し、シェリーの登場によりネットワークの分散化を図ったカルダノのアプローチについて述べています。ブロック生産の面で完全な分散化を達成した今、ネットワークの接続性も分散化されることが不可欠です。カルダノでは、P2P(peer-to-peer)接続への移行によってこれを実現する。
P2Pネットワーク
ここで、ネットワークの「スタック」について触れておきましょう。これは、より大規模で、よりダイナミックで、より複雑なネットワークに対応するために、エンジニアリングチームが最近強化したソフトウェアツールのセットです。
P2P通信は、ノード間の情報の流れを強化することで、ネットワークのフェデレーションノードへの依存度を下げ(最終的には外し)、カルダノの分散化を可能にします。望ましい回復力を実現するために、IOGのネットワークチームは、高度なP2P機能を備えたネットワークスタックの改良に余念がありません。この改良はプロトコルの変更を必要とせず、ピアの選択と通信の自動化を可能にするものです。
P2Pネットワークは、以下のコンポーネントの使用により実現されています。
ここでは、ノードの接続が確立されるまでのプロセスを詳しく見ていき、最新の開発によってノード間のデータ交換がどのように効率化されているかを見ていきましょう。
ミニ・プロトコル
ノード間の通信を可能にするのが、一連のミニ・プロトコルです。各プロトコルは、最新ブロックの通知、ブロックの共有、トランザクションの処理など、基本的な情報交換の要件を実装しています。Chain-sync、block-fetch、tx-submissionの各プロトコルは、ネットワーク上のノード間通信のためにブロックやトランザクションのチェーンを配布するために使用されています。
- block-fetchは、チェーンデータベースから情報を取得します。
- block-fetchはチェーンデータベースから情報を取得し、chain-syncは取得したデータをネットワーク上で同期させます。
- tx-submission2は、ピアのmempoolからトランザクションを消費してローカルのmempoolに追加し、ピアがそのトランザクションをノードに送信できるようにします。これは、現行のtx-submissionプロトコルを改良したものです。
これらのミニプロトコルは、コンセンサスプロトコル「Ouroboros」をサポートしています。最適なネットワークサービスを実現するために、チームは追加のプロトコルを実装しました。
- keep-alive:ノード間の継続的な接続を確保し、パフォーマンス上の障害を最小限に抑えることができます。
- tip-sample:どのピアがパフォーマンス的に優れた接続を提供しているかの情報を提供します。
ネットワーク・アーキテクチャやミニ・プロトコルの例については、Cardanoのドキュメンテーション・ウェブサイトで確認することができます。
接続管理
ネットワークサービスは、Linux、Windows、macOSをサポートしていますが、OSごとにサポートされる接続数が異なります。
システムの過負荷を避けるために、マルチプレクサ(multiplexer)が複数のチャンネルを1つのTCP(Transmission Control Protocol)接続チャンネルにまとめています。これには2つの利点があります。1つは、ピア間の双方向通信(同じチャネル内であれば、双方に読み取り権限と書き込み権限があるため、どのピアでも制限なく通信を開始できる)、もう1つは、パフォーマンスに影響を与えずにノード間の通信を強化できることです。
ネットワーキングチームは、P2Pガバナと統合された双方向性を考慮した「コネクション・マネージャ」を実装し、現在、展開前の最終テストを行っています。さらに、マルチプレクサのAPIがアップグレードされ、新しい接続やプロトコルを監視できるようになりました。この改良により、より効率的な接続管理と問題の追跡が可能になりました。
P2Pガバナー機能
カルダノのネットワークには、複数のピアノードが存在しています。あるものは他のものよりアクティブであり、あるものは確立された接続を持ち、あるものは最高のシステムパフォーマンスを確保するために昇格させる必要があります。「Cardano’s path to decentralization」で述べたように、ピアは3つのカテゴリーにマッピングされます。
- コールドピア
- ウォームピア
- ホットピア
それらの間で双方向の接続を確立するためには、どの接続がアクティブであるかを知ることが極めて重要です。
P2Pガバナは接続を管理し、どのピアがアクティブでパフォーマンスが高いかという情報を提供する。この機能は、システムのパフォーマンスを向上させるためにピアの接続を促進し、ネットワーク全体の接続マップを構築・維持することで、優れた可視性を提供します。ガバナーは、接続定義を自動的に処理することでプロセスを簡素化し、少数のセントラルステークプールが手動で設定する必要がなくなります。ガバナーは、コールド、ウォーム、ホットの各状態間でピアを昇格・降格させるほか、コネクション・マネージャーと対話して、新しい接続を開いたり、既存の接続を再利用したりします。
P2P展開のロードマップ
IOGのネットワークチームは、P2Pガバナとノードの統合に関する品質テストの最終段階に入っています。その後、ネットワークスタックを拡張し、特にゴシップなどのプロトコルを追加する予定です。ゴシップは、ピア間のシームレスなデータ交換を実現し、分散型コミュニケーションマップの構築に役立ちます。
これらの技術的なアップグレードにより、カルダノのノードインターフェースを簡素化し、システムの構成を改善することができます。テストが終了すると、すべてのSPOは、接続性を高めるために設定の環境設定を更新し、簡素化することができます。
これには、P2Pの完全展開の前に以下の段階があります。
チーフアーキテクトのDuncan Coutts氏による計画の説明は、3月に開催されたCardano360ショーのビデオをご覧ください。
ネットワークの構築、維持、サポートにはガバナンスが重要な役割を果たしていますが、分散化があってこそ、すべてのステークプールに平等な機会を保証する真のネットワークの持続可能性が実現します。そのため、スタックの改良の目的は、すべてのステークプールが同じ構成で実行できるようにして、分散化された環境で同等の能力を確立することです。
このブログでは、より多くの開発情報を提供していきます。また、カルダノのステータス・アップデートをフォローすることで、最近の改良や開発状況を知ることができます。