跳到主要内容

为什么需要证明?

索引器扫描 PIVX 区块链并构建名称登记簿。可为什么要信任它呢?万一它:

  • 捏造一次链上从未发生过的注册?
  • 收取错误的费用?
  • 把同一个名称注册两次?
  • 篡改登记簿的状态?

ZK 证明消除了这些疑问。每一份证明都是一张密码学凭证,表明该次注册被正确处理。任何人都可以独立验证这份证明。

每份证明验证了什么

PIVX 证明生成器使用 SP1——一个 RISC-V 零知识虚拟机。对于每一笔带域名的交易,生成器都会在 zkVM 内部执行以下检查:

  1. 名称有效性 — 1-64 个字符,小写字母、数字和连字符,位于允许的区域内
  2. 地址有效性 — 目标地址是正确网络上的 PIVX Sapling 屏蔽地址,且为现代 bech32 形式
  3. Ed25519 签名 — 对确切被签名消息的签名有效,且由该操作所要求的密钥做出
  4. 操作不变式 — 所有权、价格状态与 nonce 顺序都与正在执行的操作相一致
  5. 重放保护 — nonce 严格大于记录中先前的 nonce
  6. 状态转移 — 默克尔证明重建出旧根,而新根正是应用了这一处变更之后的结果

只要有任何一项检查未通过,证明就无法生成。

证明检查什么

在这里,精确比听起来令人印象深刻更重要:

  • 付款并不在电路内验证。 一笔交易是否支付了正确的费用、一个 BUY 是否真的转移了资金,由注册方在 链下强制保障,而任何用已公开的查看密钥重放这条链的人都能加以检查。在 zkVM 内证明票据所有权的代价,将远高于 今天整个批次的成本;而且它给出的保证比复现已经提供的更弱——电路只看得到票据 承诺,而重放的索引器看得到解密后的金额和备注。
  • 电路并不证明输入就来自真实的链。 它证明的是:给定这个批次,状态转移符合规则。至于该批次是否 就是真实、完整且顺序正确的命令流,则由复现来确立——参见信任与隐私

正因如此,PiNS 让欺诈可被察觉,而不是加以阻止:错误的批次根本无法被证明,而并非来自真实链的批次 会被每一个独立索引器反驳。

公开输出

每份证明都承诺 3 个与之永久绑定的值:

输出说明
old_root本次注册之前的默克尔树根
new_root本次注册之后的默克尔树根
end_block_height该注册批次的最后一个 PIVX 区块

end_block_height 像检查点一样把证明钉在某个具体的 PIVX 区块上。任何人都可以用已公开的查看密钥把链扫描到该高度,确认备注与金额和批次所声称的一致。