zcash-shielded
本文记录 ProofForge 对 Zcash 的第一版分类。它不会立刻添加 Lean target
profile。目的是在修改 registry 或编译器前,先确定 Zcash 的 ZK 隐私模型如何
进入目标系统。
主要来源:
- How is Zcash different than Bitcoin?
- Zcash protocol specification
- ZIP 224: Orchard Shielded Protocol
- Zcash RPC documentation
- z_sendmany RPC
分类
Zcash 比账户型智能合约链更接近 Bitcoin,但不应该被并入 Bitcoin Script/Miniscript 目标。 更合适的第一版分类是:- Bitcoin Script/Miniscript:只表达 spending policy,没有 shielded note 系统。
- BCH/CashScript:UTXO script/covenant sourcegen,没有原生 shielded pool。
- Kaspa Toccata:在 covenant 执行中可选 inline proof verification。
- Psy/DPN:目标程序编译为 ZK circuit 制品。
ZK 如何进入 JDL-Z11-like 脚本
面向用户的脚本不能假装 Zcash 暴露了带私有存储的通用链上合约方法。类似 JDL-Z11 的脚本应该通过受限的 privacy transaction DSL 使用 Zcash ZK:- private note value、recipient data、memo 和 witness path 仍是链下 witness data;
- public transaction data 包含协议暴露的 anchors、nullifiers、value balance、 fees 和 pool/action metadata;
- ProofForge 可以证明自身 source-level invariant:用户想表达的是哪种 payment policy;
- Zcash 共识验证的是协议 ZK proof,不是任意 ProofForge 业务逻辑。
为什么这对 ProofForge 重要
把 Zcash 简化成“Bitcoin plus ZK”太粗。transparent 侧可以复用 Bitcoin-like UTXO 概念,但 shielded 侧需要目标专属建模:- shielded state 是 note set 和 commitment tree,不是 global contract storage;
- note spend 通过公开 nullifier 防止双花,但不公开被花费的 note;
- proof statement 由 Sapling/Orchard 协议规则固定;
- value conservation 通过 shielded value balance 和 transparent turnstile 执行;
- viewing key 和 wallet scanning 是链下可观测性工具,不是合约状态;
- privacy 取决于 transaction construction policy,而不只是 proof 是否验证通过。
候选目标家族
在目标模型能表达 shielded note 和 privacy 能力前,不要把它加入ProofForge.Target.Registry。
候选家族:
候选能力
这些是 research candidate,不是规范 capability id。 当语义匹配时,transparent Zcash 流程可以复用已有 UTXO 和 Bitcoin 候选能力, 包括storage.utxo、tx.builder、signature.checksig、fee.weight 和
test.bitcoin_core 风格的本地节点验证。shielded 路径需要新增能力:
zk.circuit 不是 Zcash 的第一能力。只有未来辅助目标在 Zcash 共识证明系统之外
生成或验证自定义电路时,它才可能适用。对普通 Zcash 转账来说,proof circuit
由协议固定。
实现路径
Road 1: Transparent Zcash UTXO
用这条路径验证 Bitcoin-derived transaction handling,不触碰 shielded proofs。 第一版 spike:- 构造一个 transparent Zcash transaction 场景;
- 在安全处复用 Bitcoin-like UTXO 和 fee metadata;
- 记录 Zcash network、address、fee 和 transaction-version 差异;
- 通过 zcashd RPC 或兼容本地库验证。
Road 2: Orchard Shielded Payment Manifest
这是第一条真正的 Zcash ZK 集成路径。 第一版 spike:- 定义一个 one-input、one-output shielded payment policy;
- 建模 shielded note、commitment anchor、nullifier、value balance、fee 和 recipient;
- 生成 transaction/proving manifest,而不是 raw proving internals;
- 调用 zcashd RPC、lightwallet flow 或 Rust library boundary 来生成或验证交易;
- 记录哪些是 public、哪些仍是 private witness data、viewing-key disclosure 能 揭示什么。
Road 3: JDL-Z11-like Privacy DSL Frontend
当 transaction manifest 形态明确后,再走这条路径。 第一版 spike:- 定义 script-level primitives,例如
shield、spendNote、createNote、revealNullifier、selectAnchor和privacyPolicy; - 静态拒绝不支持的模式,例如 global mutable shielded storage、contract method dispatch、arbitrary proof verification,以及从 public code 读取 private note data;
- 将脚本降级到 Road 2 manifest;
- 保持 proof generation boundary 显式,让用户能审计需要哪些 witness fields。
第一阶段非目标
- 在候选能力完成审查前,不要把
zcash-shielded加入代码 registry。 - 不把 Zcash 归类为通用智能合约链。
- 不把 Zcash shielded logic 降级到 Bitcoin Script 或 Miniscript。
- 第一版 spike 不让 ProofForge 负责实现 Orchard/Sapling proving internals。
- 不声称 Zcash 支持 arbitrary ZK verification。
- 不把 shielded notes 建模为 EVM-style global storage。
- 如果交易跨越 transparent 和 shielded pools 并泄漏 sender、recipient 或 amount 信息,不声称它具备完整隐私。
Research 退出标准
Zcash 只有在满足以下条件后才能离开 Research:- 经过审查的 target profile proposal;
- 针对 shielded notes、nullifiers、anchors、value balance 和 privacy policy 的 已提交 capability proposal;
- 针对 transparent 和 shielded transaction 路径的最小 artifact manifest schema;
- 本地验证工具链决策,可能是 zcashd RPC 或 Rust wallet/protocol library boundary;
- 一个可重复的本地命令或脚本,能够验证极小 shielded payment manifest,或记录 明确的外部工具阻塞。