mcpField
M
midnight-p2p-networking

midnight-p2p-networking

github.com/kali-decoder云与 DevOps18123 次安装1 天前更新
代码仓库

关于 midnight-p2p-networking

midnight-p2p-networking 介绍 Midnight 节点使用的点对点网络层,面向研究节点网络的开发者和运维人员。内容涵盖节点发现、连接建立、传输、安全机制及应用层协议。

主要功能

  1. 01通过引导节点发现对等节点
  2. 02使用 mDNS 发现局域网节点
  3. 03Kademlia DHT 随机漫步
  4. 04TCP、WebSocket 和 DNS 传输
  5. 05Noise 加密与 Yamux 多路复用
  6. 06Ping、请求响应和通知协议

适用场景

  1. 01了解 Midnight 节点如何发现对等节点
  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

发现机制

要加入网络,节点必须发现并连接对等节点。

引导节点
  • 网络配置中预定义的可信对等节点(硬编码的身份标识和地址)。
  • 启动时,节点连接引导节点以加入网络,并了解其他对等节点。
mDNS(多播 DNS)
  • 通过 UDP 广播发现同一局域网中的对等节点。
  • 适用于开发、测试网或同地部署。
  • 可通过网络设置启用或禁用。
Kademlia DHT(随机漫步)
  • 至少连接到一个对等节点后,节点会在每条已配置链的 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端到端机密性与完整性
Yamux在一个物理连接上承载多个逻辑流
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广播:新交易、区块公告、最终性更新、轻客户端状态同步

对等节点身份标识

  • 每个节点都有一个唯一的 Ed25519 公钥,用于 P2P 身份标识。
  • 此密钥对与共识消息签名密钥相互独立。
  • 在握手期间交换此密钥;用于在会话中验证对等节点身份。

有关 Ed25519 在 libp2p 和 GRANDPA 中的用法,请参阅 midnight-cryptography/。


相关技能

  • midnight-consensus/ — 验证者传播的内容(区块、最终性)
  • midnight-cryptography/ — Noise、Ed25519 对等节点身份标识
  • midnight-rpc/ — 外部客户端访问(补充 P2P 同步)

评论

支持 Markdown