关于 midnight-p2p-networking
midnight-p2p-networking 介绍 Midnight 节点使用的点对点网络层,面向研究节点网络的开发者和运维人员。内容涵盖节点发现、连接建立、传输、安全机制及应用层协议。
主要功能
- 01通过引导节点发现对等节点
- 02使用 mDNS 发现局域网节点
- 03Kademlia DHT 随机漫步
- 04TCP、WebSocket 和 DNS 传输
- 05Noise 加密与 Yamux 多路复用
- 06Ping、请求响应和通知协议
适用场景
- 01了解 Midnight 节点如何发现对等节点
- 02梳理节点连接与安全层
- 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
建立连接
发现对等节点后:
- 建立直接连接。
- 协商共享的协议能力(传输、安全性、多路复用)。
这是更高级的同步和泛洪协议的基础。
传输层
节点 A(Alice)连接到节点 B(Bob)时:
| 传输方式 | 说明 |
|---|---|
| TCP/IP | 传统 IPv4/IPv6 套接字 |
| WebSockets | TCP + 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