证明系统的公开 statement 可以是“给定旧状态根、交易数据承诺及新状态根,存在符合约束的私有执行 witness”。witness 是满足电路/约束的输入,不等于用户一定拿到了数据,也不一定是加密了隐私的交易。区块链(33):状态可验证、数据可取得与跨域可领取各有门槛要求恢复用户可用数据,本篇只考察约束是否真的由验证器确认。

flowchart LR
  W[witness: 执行路径/私有输入] --> P[真实证明器]
  S[statement: 公开根、批次承诺] --> P
  P --> Z[proof]
  Z --> V[按冻结验证密钥执行密码学验证]
  S --> V
  V -->|仅接受指定命题| L[链上状态更新]

电路若漏了输入金额守恒约束,完美的密码学证明也只能证明“不完整的电路被满足”;验证密钥若由可升级治理控制,还要检查改变约束的权力。SNARK/STARK 是证明技术家族而非每条 rollup 的同一成本曲线。有效性证明可以是零知识的,也可以只追求简洁验证;“zk-rollup”名称不等于公开交易数据天然保密。为验收必须调用真实证明器/验证器,保留电路和工具完整 SHA、公开输入、生成命令、验证成功与篡改公开输入/证明时的拒绝证据。

33 篇的 Batch.transition_accepted 是人为设定的布尔量;它演示数据缺失时依然可能缺少退出材料,没有执行约束、生成 proof 或验证 proof。这个有限模型不计入本篇的密码学验收。

证明的“真”只等于那个被写下的命题

明确一条教学公开输入:(旧根, 新根, 批次承诺, 链 ID, 合约版本)。witness 提供交易列表、消费前后订单金额、签名授权和状态路径。约束必须把每笔输出上限、一次性消费、授权身份、旧状态成员证明以及新根生成过程都绑定到公开输入;若漏掉资产守恒约束,生成者仍能为不完整的命题做出合法证明。若漏掉链 ID 与版本,另一网络的同格式批次还可能被错误复用。真实系统的公开输入和约束形式须从冻结电路及验证合约读取,这里只提供应核查的规格。

合格的正反对照要用同一固定证明工具:正常 witness 生成 proof 并由验证器接受;分别篡改旧根、批次承诺、金额或 proof 字节后验证器拒绝;还要保存验证密钥的发布和更换权限。如果原批次数据没有被及时提供,验证器接受“这次转换符合约束”也不能帮助用户自行重建资产清单或保证日后可提款。纯摘要比较和人工返回布尔值连第一道密码学门槛都没有跨过。实际 prover、电路、验证密钥与客户端均缺失,不能在文章中填入生成速度、验证 gas 或假造的 tamper 输出。

练习一:用 hash(witness)==expectedHash 充当证明验证,能说明状态转移遵守约束吗?答案:不能,这只检查字节摘要相符。练习二:旧根和新根都固定,却不把交易数据承诺纳入公开 statement,攻击者可以改变什么?答案:可能对另一批输入证明不同转移,必须具体分析约束是否绑定全部待证明对象。真实证明工具与 rollup 验证合约未安装,生成/篡改拒绝 NOT_RUN。

可迁移原则:先审证明的 statement 和约束,再审验证器。参考:Ethereum zk-rollup 入口、EIP-4844(具体实现、网络与源码待核);导航:区块链(33):状态可验证、数据可取得与跨域可领取各有门槛 · 34 · 区块链(35):Fabric 的背书、排序与有效提交是三个阶段。