mcpField
M
midnight-p2p-networking

midnight-p2p-networking

github.com/kali-decoderクラウド・DevOps18123 回インストール1 日前に更新
リポジトリ

midnight-p2p-networking について

midnight-p2p-networkingは、Midnightノードが利用するP2Pネットワーク層を解説するスキルです。ノードネットワークを調べる開発者や運用担当者向けに、ピア発見、接続、トランスポート、セキュリティ、アプリケーション層プロトコルを扱います。

主な機能

  1. 01ブートストラップによるピア発見
  2. 02mDNSによるLAN内のピア発見
  3. 03Kademlia DHTのランダムウォーク
  4. 04TCP、WebSocket、DNSトランスポート
  5. 05Noise暗号化とYamux多重化
  6. 06Ping、リクエスト・レスポンス、通知プロトコル

活用シーン

  1. 01Midnightノードのピア発見方法の理解
  2. 02ノード接続とセキュリティ層の確認
  3. 03トランザクションやブロック通知経路の追跡

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kali-decoder/midnight-skills --skill midnight-p2p-networking

インストール後、Claude Code で/midnight-p2p-networkingを入力して読み込まれたか確認します。

詳細

P2P ネットワーキング

ピアツーピア(P2P)レイヤーは、Midnight ノードを接続し、分散型ネットワーク全体でのデータ交換を可能にします。Midnight は、デフォルトの Polkadot SDK Rust libp2p 実装を使用します。

スタックの概要

flowchart TB
  subgraph Discovery["Peer discovery"]
    BS["Bootstrap nodes"]
    MDNS["mDNS (LAN)"]
    KDHT["Kademlia DHT random walk"]
  end

  subgraph Transport["Connection"]
    TCP["TCP/IP"]
    WS["WebSockets"]
    DNS["DNS resolution"]
  end

  subgraph Security["Upgrade"]
    Noise["Noise Protocol — encryption"]
    Yamux["Yamux — multiplexing"]
    MS["Multistream-Select negotiation"]
  end

  subgraph Protocols["Substream protocols"]
    Ping["Ping — liveness"]
    RR["Request-Response — block/tx queries"]
    Notif["Notifications — gossip, finality, sync"]
  end

  Discovery --> Transport
  Transport --> Security
  Security --> Protocols

検出メカニズム

ネットワークに参加するには、ノードがピアを検出して接続する必要があります。

ブートストラップノード
  • ネットワーク設定で事前に定義された信頼できるピアです(ハードコードされた ID とアドレス)。
  • 起動時に、ノードはブートストラップピアに接続してネットワークに参加し、追加のピアに関する情報を取得します。
mDNS(マルチキャスト DNS)
  • UDP ブロードキャストを介して、同じ LAN 上のピアを検出します。
  • 開発環境、テストネット、または同じ場所に配置されたデプロイに役立ちます。
  • ネットワーク設定で有効/無効を切り替えます。
Kademlia DHT(ランダムウォーク)
  • 少なくとも 1 つのピアに接続すると、ノードは設定された各チェーンの DHT 上で Kademlia ベースのランダムウォークを実行します。
  • FIND_NODE クエリを送信して、さらに多くのピアを検出します。
  • 時間の経過とともに、耐障害性の高い、拡大するネットワークの全体像を構築します。
flowchart LR
  Start["Node starts"] --> Boot["Connect to bootstrap"]
  Boot --> Learn["Learn peer addresses"]
  Learn --> Walk["Kademlia random walk"]
  Walk --> More["More peers discovered"]
  More --> Walk
  MDNS["mDNS on LAN"] -.-> Learn

接続の確立

検出後、ピアは次の処理を行います。

  1. 直接接続を確立します。
  2. 共有プロトコルの機能をネゴシエートします(トランスポート、セキュリティ、多重化)。

この基盤は、より上位の 同期プロトコルとゴシッププロトコルを支えます。


トランスポートレイヤー

ノード A(Alice)がノード B(Bob)に接続する場合:

トランスポート説明
TCP/IP従来の IPv4/IPv6 ソケット
WebSocketsTCP + WebSocket フレーミング(ブラウザー/プロキシに適しています)
DNS接続時にドメイン名を IP アドレスに解決します

暗号化と多重化

基本トランスポートの接続後、ピアはネゴシエートされたプロトコルを介してアップグレードします。

プロトコル目的
Noiseエンドツーエンドの機密性と完全性
Yamux1 つの物理接続上で複数の論理ストリームを実現します
Multistream-Select互換性のある暗号化と多重化のオプションを選択します
sequenceDiagram
  participant A as Alice
  participant B as Bob

  A->>B: TCP / WebSocket connect
  A->>B: Multistream-Select (Noise)
  Note over A,B: Encrypted channel
  A->>B: Multistream-Select (Yamux)
  Note over A,B: Multiplexed substreams
  A->>B: Open Ping / Request-Response / Notifications

サブストリームプロトコル

各サブストリームは、専用のアプリケーションレベルプロトコルを実行します。

プロトコル目的
Ping生存確認とレイテンシ測定
Request-Response構造化されたやり取り(ブロッククエリ、トランザクションクエリ)
Notificationsブロードキャスト:新しいトランザクション、ブロック通知、ファイナリティの更新、ライトクライアントの状態同期

ピアの識別

  • 各ノードは、P2P の ID として一意の Ed25519 公開鍵を持ちます。
  • この鍵ペアは、コンセンサスメッセージの署名鍵とは別のものです。
  • ハンドシェイク中に交換され、セッション中のピア認証に使用されます。

libp2p と GRANDPA での Ed25519 の使用方法については、midnight-cryptography/ を参照してください。


関連スキル

  • midnight-consensus/ — バリデーターがゴシップで送信する情報(ブロック、ファイナリティ)
  • midnight-cryptography/ — Noise、Ed25519 ピア ID
  • midnight-rpc/ — 外部クライアントアクセス(P2P 同期を補完)

コメント