架构docs/architecture/networking.md

网络

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

text
/noid/mainnet/860e70453390bf81/1

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

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

资源边界

State 传输支持 /sync/segment/6 与 /sync/segment/5,对等节点为每次交换自动协商一个共同版本。版本 5 保留原有字节格式。版本 6 在能缩小数据时使用 zstd,并可将最多 64 个小分段合并到不超过 64 KiB 的规范数据中;大分段仍单独传输。每个分段仍须通过自身的不可变描述符和根校验。

匹配的本地分段经过相同的认证与持久化暂存后才会复用。根和长度元数据仅作为查找提示;损坏的本地数据会重新下载。State 仍只有一个在途网络请求、一个暂存工作线程和一个响应缓冲。两个传输版本共用现有服务限制和字节预算;压缩输入、解压输出及批量复制占用都在分配前准入。

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

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

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

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

挖矿对等节点门槛

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

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

接口边界

P2P 端口 9600 服务公网对等节点。9601 上的 RPC 包含钱包和进程控制方法。 本地 TCP 回环具有所有者权限;远程挖矿和运营者令牌仅开放各自固定的较窄方法集。 合约方法要求本地所有者权限。HTTP Bearer 令牌不加密流量,远程 RPC 需要私有 隧道或受保护的 TLS 传输。

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

证明传输

三个类别的单区块终端上限均为 1,100,000 字节。一次性分叉来源交换有独立的 48 MiB 响应上限。它认证从选定旧边界发生的转换;后续递归证明保持该绑定, 无需在每个区块附带完整证书。合约公开条款及授权封装随交易意图按各自限制传输。 文件、端口与限制分别列出 RPC、回执和意图上限。

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