协议docs/protocol/proof-of-work.md

工作量证明

Parano1d 的工作量证明是在固定语义区块头字段上计算的带域分离 Poseidon2b 摘要。它只在不含 nonceHistoryStep 完成证明后运行。

字段序列

POWHDR__ 海绵函数精确吸收 16 个 GF(2^128) 元素:

索引 字段
0–1 prev_block_hash
2–3 state_root
4–5 tx_root
6 timestamp
7 height
8–9 miner_address
10 128 位 nonce
11–12 difficulty_target
13 log_slots
14 active_slot_count
15 alloc_counter

32 字节值拆成两个小端序 128 位半段,标量整数以零扩展。海绵结构的速率为二,因此该字段序列恰好占八个速率块,不需要变长填充。

PoW 域同时区别于含 nonce 的区块身份域和无 nonce 的语义区块头承诺域。

目标值比较

摘要与目标值均解释为 256 位小端序整数。Nonce 只有在以下条件成立时有效:

text
pow_digest < difficulty_target

相等也视为失败。

ASERT

目标出块间隔为 15 秒。ASERT 使用六区块参考周期和 90 秒半衰期。在每个高度,验证过程根据规范锚点、经过时间与高度差推导精确目标值。

时间戳还必须大于前 11 个区块头的过去时间中位数(median time past),并且最多领先验证节点本地时钟 120 秒。

运行时内核

同一个固定置换按 nonce 批次计算。发布版二进制文件会在运行时选择主机支持的最佳实现:

  • x86-64 上以 PCLMULQDQ 为基线;
  • 可用时使用带 VPCLMULQDQ 的 AVX2;
  • 支持主机上的 AVX-512;
  • ARM64 上带 PMULL 的 NEON。

批量执行只改变吞吐量,不改变摘要。标量实现是用于交叉校验的参考实现,不作为发布版运行时的回退路径。

外部挖矿边界

外部挖矿进程收到精确的 16 字段输入序列、nonce 索引与目标值,只返回规范的 16 字节小端序 nonce。节点在提交区块前,根据不可变的一次性模板验证结果。

外部挖矿进程无法修改交易、State 根、收益地址或证明。使用过期模板求得的 nonce 会被拒绝。

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