架构docs/architecture/networking.md

网络

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

text
/noid/mainnet/1.0.0

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

对等节点身份与共识身份

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

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

节点发现

节点综合三种发现来源:

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

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

自动连接管理器以 12 个出站对等节点身份为目标。DNS 种子负责提供最初的邻居;节点通过持续发现获得至少八个稳定的普通对等节点后,才会逐步用这些节点替换种子连接,同时始终维持目标连接数。因此,种子节点只承担引导作用,不会成为长期唯一的网络拓扑。

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

Gossip

GossipSub 传输交易意图和区块公告。

完整原子区块包小于内联传输上限时直接发送;更大的区块只公告区块头,再通过带类型的请求—响应协议拉取。Gossip 消息具有严格的大小上限,因此恶意对等节点不能让普通转发触发无界内存分配。

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

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

请求—响应协议

带类型的交换负责:

  • 批量区块头;
  • 保留的完整区块;
  • 快照清单与 State 分段
  • 近期内存池清单与缺失的交易意图。

常规追赶同步每次最多请求 512 个区块头。快照同步在暂存区内以最多 4,096 个区块头为一批处理;按规范的 212 字节区块头计算,每个响应仍不超过 0.83 MiB。快照中的 State 由清单和逐段认证的数据组成,而不是作为一条无界大消息传输。

对等节点连接后可以核对近期内存池内容。每个收到的意图仍必须经过常规本地准入。

资源边界

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

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

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

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

挖矿对等节点门槛

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

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

接口边界

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

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

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