架构docs/architecture/networking.md

网络

Parano1d 使用 libp2p 完成对等节点身份、发现、转发与同步。公网协议标识为:

text
/noid/mainnet/860e70453390bf81/1

默认 P2P 监听 TCP 9600JSON-RPC 是单独的本地管理接口,监听 127.0.0.1:9601

对等节点身份与共识身份

每个节点持久保存一个 libp2p Ed25519 对等身份。它用于认证网络会话,并在重启后维持稳定的对等节点 ID(peer ID)。

该身份没有共识权限:不能花费 UTXO、签署区块,也不能影响证明验证。钱包所有权、区块有效性和工作量证明使用的是二进制共识栈。

节点发现

节点综合三种发现来源:

  • 内置 DNS 种子,用于首次找到公网对等节点;
  • Kademlia,用于持续发现;
  • mDNS,用于发现本地网络中的节点。

成功连接的地址会持久保存并复用。对等节点存储最多保存 500 个对等节点,并限制单个节点可记录的地址数量。

GossipSub 维持四邻居传播网格,自动拓扑管理器以八个普通邻居为目标,用于精确对象下载与故障切换。这是连接目标下限,而非总连接数上限。最多四个非主动选择的入站节点计入此目标,因此本节点仍独立选择至少四个普通邻居。DNS 种子提供最初的两条路径;普通节点稳定后才替换种子,不预先降低连接数。发现采用按身份错开的时间、单个活动查询与指数退避。

内置种子名称首先通过操作系统解析,以支持 VPN 配置的 DNS;同时保留 DNS 多地址供之后重新解析 A/AAAA。

DNS 记录指向网络端点,而不是链上 State。只要公网地址不变,更新软件或重置节点都无需修改 DNS 名称。

Gossip

GossipSub 传输交易意图和小型 header-first 区块公告。区块体与递归终端证明随后按精确内容标识拉取,不会占用区块头控制通道。Gossip 消息具有严格的大小上限,因此恶意对等节点不能让普通转发触发无界内存分配。

只有本地内存池验证规范结构、授权和当前冲突后,交易才会转发。收到 Gossip 消息绝不等于接受相应的共识 State。

对于本地新接纳的交易,节点会在 GossipSub 之外执行有界的直接推送。连接数不超过八时,交易直接推送给所有已连接对等节点;连接数更多时,随机选择最多四个对等节点直接推送,GossipSub 仍负责全网传播。这样既能让小型网络立即覆盖第一跳,又不会把大型网络中的交易传播变成面向所有连接的广播。

请求—响应协议

带类型的交换负责:

  • 批量区块头;
  • 保留的区块体与递归后缀链尖终端证明;
  • 小型快照头、内容寻址的清单页与 State 分段
  • 近期内存池清单与缺失的交易意图。

常规追赶同步每次最多请求 512 个区块头。快照同步在暂存区内以最多 4,096 个区块头为一批处理。每批数据使用 zstd 压缩,压缩数据与解压结果均有严格的大小限制。解压后最多包含 0.83 MiB 的规范区块头,每个区块头为 212 字节。快照中的 State 由小型清单头、有界描述页和逐段认证的数据组成。同一个不可变计划可以从不同对等节点取得不同的精确对象;来源断开不会丢弃已经验证的进度。

每个内存池核对响应最多包含 128 个意图和 16 MiB 数据。部分响应可沿单条、受消费速度控制的恢复通道继续,最多使用四个选定来源。同一来源的请求至少间隔 30 秒;超时、失败次数和扫描工作均有界。达到本地容量后停止,不定期轮询空闲种子。任意入站连接不能启动新的恢复,但已授权的恢复可通过仍存活的认证连接继续。不支持可选续传协议的对等节点使用原有交换。

gossip 与直接推送中逐字节相同的副本会在重复消耗入站额度前合并。这不是有效性缓存,仍须通过常规本地准入。先前已接受但已不在内存池中的条目可重新考虑。成功接纳后的常规转发保持不变。断开或不响应的来源不能永久占用恢复通道。

种子选择绑定到配置中已认证的种子身份,而不只是一条套接字。重连或同时互拨可以保留这一选择;普通邻居替换稳定后才关闭种子的剩余传输连接。任意入站节点不能自行取得被选中地位。

资源边界

公网通信在多个层次上保持有界:

  • 入站与出站服务各自具有响应字节预算;
  • 区块与 Gossip 消息大小受限;
  • State 按段传输;
  • 对等地址与对等节点存储条目数受限;
  • 重复无效行为会受到惩罚;
  • 连接按网络组保持多样性。

出站选择中,同一网络组最多允许两个对等节点。入站服务允许同一 IP 地址最多对应 32 个对等节点身份,同一网络组最多建立 96 条连接。入站连接总数超过 96 后,其余容量仅供当前代表性不足的网络组使用,且任一此类网络组最多占用其中八个保留连接位。这样既能兼容共享 VPN 出口和运营商级 NAT,又不会让单一托管网段占满全部入站连接。

这些限制不能替代多样化的公网拓扑。种子节点与挖矿设施仍应分布在相互独立的网络和运营方。

挖矿对等节点门槛

普通挖矿要求至少连接一个已完成身份认证的对等节点。这可以防止无人值守的节点仅因网络链路中断,就继续扩展其隔离的私有视图。

该门槛是运维保护,不是投票。对等节点不会批准区块,也不能使无效转换变得可接受。连接建立后,矿工仍完全依据本地证明验证和累计工作量共识。

接口边界

P2P 端口 9600 可以公开暴露,RPC 端口 9601 不应公开。RPC 包含钱包与进程控制方法,本身没有面向公网的传输认证层;请仅在回环地址上监听,或将其置于经过认证的私有隧道之后。

部署选项见配置,同步协议承载的数据见同步

ParanO(1)d 技术文档共识行为以源代码为准。