经过域分离的语义区块头 ID 承诺除 nonce 之外的所有共识字段。规范区块 ID 与工作量证明摘要都包含 nonce,并分别使用独立域。矿工先证明一次完整 State 转换,再搜索大量采用不同 nonce 的区块头,最后通过原生 PoW 检查与精确边界检查,将找到有效 nonce 的区块头重新绑定到该证明。
Nonce 应当在哪一步进入证明?
State 是由当前未花费输出与共识计数器组成的认证集合。HistoryStep 是区块从父 State 到子 State 精确转换的递归证明。它认证计算成本较高的语义工作,而工作量证明(PoW)只改变一个 128 位 nonce,也就是矿工在搜索过程中反复尝试的区块头字段。如果 nonce 被纳入递归断言,每个候选值都会改变断言,昂贵的证明便无法预先生成。
不含 nonce 的语义区块头
该构造定义三个经过域分离的哈希值:
| 标识符 | 域 | 字段 | 作用 |
|---|---|---|---|
| 语义区块头 ID | SEMHDR__ | 除 nonce 外的全部共识区块头字段 | HistoryStep 断言 |
| 区块 ID | BLOCKHDR | 包括 nonce 在内的全部区块头字段 | 父链接与规范身份 |
| PoW 摘要 | POWHDR__ | 包括 nonce 在内的全部区块头字段 | 与区块头声明的挖矿目标值比较 |
语义投影保持区块头字段的精确顺序,只跳过 nonce。变异测试会独立修改每个字段:修改 nonce 必须保持语义 ID 不变;修改任何其他字段都必须改变该 ID。
证明一次,搜索多次
当某个 nonce 满足目标值时,节点执行一次原生 PoW 检查,并验证该区块头指向的父 State 与子 State 边界同语义模板所证明的边界完全一致。随后,完整区块与终端证明被原子提交。
这种拆分为何没有放开其他字段
递归证明省略的是 nonce,而不是挖矿目标值或任何语义 State 转换字段。原生接受规则要求终端证明中的语义 ID 与候选区块头的所有非 nonce 字段完全一致。包含 nonce 的区块 ID 仍然是链上链接使用的身份标识。
域分离防止同一组区块头字段被交替解释为语义投影、规范区块 ID 或工作量证明摘要。
结果
证明生成只对固定区块模板执行一次;随后进行的 nonce 搜索只改变被明确排除在证明断言之外的字段。
只要昂贵证明认证的是确定性对象,而独立搜索只改变一个明确的非语义字段,就可以采用这一模式。接受规则必须把胜出的搜索结果重新连接到证明所固定的全部字段。