文章

15. 递归、累积与折叠:Halo、Nova、HyperNova、ProtoStar

15. 递归、累积与折叠:Halo、Nova、HyperNova、ProtoStar

1. 五个经常混用的概念

1.1 Aggregation

把 $m$ 个独立 proofs

\[\pi_1,\ldots,\pi_m\]

压成一个 proof $\Pi$,证明所有 statements 成立。它不一定有时间顺序。

1.2 Recursive proof composition

外层 proof 的 relation 包含

\[\mathsf{Verify}_{\mathrm{inner}} (vk,x,\pi)=1.\]

也就是“证明一个 verifier 接受了另一个 proof”。

1.3 IVC

Incrementally Verifiable Computation 对状态转移

\[z_i=F(z_{i-1},u_i)\]

维护一个可增量更新的 proof。每来一步,只增加近似一步的工作。

1.4 PCD

Proof-Carrying Data 允许一个节点依赖多个 parent proofs,形成 DAG,而非单链。

1.5 Accumulation / Folding

不是马上验证两个完整 proofs,而是把两个待验证 claims 压成一个 accumulator claim,最后由 decider 检查。folding 通常是对某个代数 relation 的实例和 witness 做线性组合,是 accumulation 的结构化特例。

flowchart TB
    A["独立 proofs"] --> AG["aggregation"]
    R["proof 验证 proof"] --> RC["recursive composition"]
    S["状态 z_0 → z_1 → ..."] --> I["IVC"]
    D["多父节点 DAG"] --> P["PCD"]
    C["两个未决 claims"] --> F["accumulate / fold"]
    F --> O["一个未决 claim"]
    O --> DEC["最终 decider"]

2. 朴素递归:把 verifier 放进 circuit

第 $i$ 步可以证明:

\[\begin{cases} z_i=F(z_{i-1},u_i),\\ \mathsf{Verify}(vk,z_{i-1},\pi_{i-1})=1. \end{cases}\]

新 proof $\pi_i$ 因而覆盖前 $i$ 步。

sequenceDiagram
    participant P0 as Proof π_0
    participant C1 as Step circuit 1
    participant P1 as Proof π_1
    participant C2 as Step circuit 2
    participant P2 as Proof π_2
    P0->>C1: 在 circuit 内验证
    C1->>P1: 证明 step 1 + Verify(π_0)
    P1->>C2: 在 circuit 内验证
    C2->>P2: 证明 step 2 + Verify(π_1)

问题是 inner verifier 可能包含:

  • 大字段/曲线 arithmetic;
  • pairing;
  • hash/transcript;
  • MSM;
  • proof parsing 与 subgroup checks。

若 outer circuit 的原生 field 不匹配,所有运算变成 expensive non-native arithmetic。

3. Curve cycle 与 field alignment

椭圆曲线 $E_1$ 定义在 base field $\mathbb F_{p_1}$,其 scalar field 为 $\mathbb F_{r_1}$。用 $E_1$ 的 SNARK,电路通常原生运行在 $\mathbb F_{r_1}$。

若要在另一条曲线 $E_2$ 的 circuit 中原生验证 $E_1$ 运算,希望

\[p_1=r_2,\qquad p_2=r_1.\]

这构成 curve cycle。Pallas/Vesta 是常见实例。

KZG 还需要 pairing-friendly structure,构造高效 cycle 更困难;IPA 只需普通 curve arithmetic,所以 Halo 系列能避免 pairing cycle。

4. Halo:累积昂贵的 opening checks

Halo 的关键观察不是“免费验证整个 proof”,而是把 verifier 分成:

  • 可便宜放进 circuit 的 scalar/transcript 部分;
  • 昂贵的 IPA / group opening check。

后者通过 accumulation 被折成一个新的 opening claim,而不是每一步在 circuit 内完全执行。最终一次检查 accumulated claim。

若 additive PCS commitments 满足

\[\operatorname{Com}(f_1+\rho f_2) = \operatorname{Com}(f_1) +\rho\operatorname{Com}(f_2),\]

随机 $\rho$ 可把两个 linear verification claims 压成一个。

flowchart LR
    P1["opening claim 1"] --> A["随机线性 accumulation"]
    P2["opening claim 2"] --> A
    A --> C["单个 accumulator"]
    C --> N["下一递归步继续累积"]
    N --> D["最终 decider"]

Halo 因而实现无 trusted setup 的实用 recursive composition;Halo Infinite 进一步用 additive polynomial commitments 组织 PCD/accumulation。其基础仍依赖椭圆曲线离散对数,不是后量子路线。

5. Hash-based / STARK recursion

STARK verifier 主要是:

  • small-field arithmetic;
  • Merkle/hash verification;
  • FRI folds;
  • Fiat–Shamir transcript。

把这些写进 AIR/PLONKish circuit,可得到 recursive STARK。若内外层使用 recursion-friendly field/hash,成本比 non-native pairing 更可控。

常见架构是树形聚合:

flowchart TB
    L1["base STARK 1"] --> R1["recursive proof A"]
    L2["base STARK 2"] --> R1
    L3["base STARK 3"] --> R2["recursive proof B"]
    L4["base STARK 4"] --> R2
    R1 --> ROOT["root recursive proof"]
    R2 --> ROOT
    ROOT --> W["可选:短 pairing-SNARK wrapper"]

最后可:

  • 原生验证 root STARK;
  • 再用 KZG/Groth16 类 wrapper 压成适合链上 pairing 预编译的短 proof。

wrapper 改变最终 setup/量子属性:内层透明不意味着整个发布 proof stack 仍 transparent 或 post-quantum。

6. Plonky2 / Plonky3 的位置

Plonky2 把 PLONKish ideas 与 FRI-based commitment、Goldilocks field 结合,以快速递归著称。其官方仓库截至本资料快照已标注弃用并建议迁移到 Plonky3。其 verifier-in-circuit、Merkle cap、固定高元 FRI 与 cyclic recursion 详见Plonky2 递归引擎

Plonky3 是模块化 polynomial-IOP toolkit,包含 AIR、FRI、Circle、WHIR、lookup、sumcheck 等 primitives;它不是“Plonky2 proof 格式的简单第三版”。截至 2026-07-29,官方组织还有独立 Plonky3-recursion 项目:把固定 Plonky3 Uni/Batch-STARK verifier 编译为多 chip circuit,再用 Plonky3 Batch-STARK 证明,因而不再依赖 Plonky2 wrapper。该递归仓库仍明确标注 active development、未审计且不建议生产使用。

另有 QED Protocol 的 plonky2.5 2024 prototype,具体含义是在 Plonky2 circuit 中验证当时的 Plonky3 Uni-STARK proof;它是第三方固定 bridge,不是当前 Plonky3 的通用 proof version。详见Plonky2.5 跨系统递归桥Plonky3 原生递归

描述具体系统时仍需写清:

\[(\text{AIR/PLONKish},\text{PCS},\text{field}, \text{hash},\text{recursion protocol}).\]

S-two/SHARP 一类系统则走 Circle STARK 与递归聚合路线。项目状态、启用的 ZK 与 verifier generation 应以对应版本文档为准。

7. Nova 的起点:R1CS 是二次关系

R1CS instance 给出矩阵 $A,B,C$,要求 witness/public vector $\mathbf z$ 满足

\[A\mathbf z\circ B\mathbf z =C\mathbf z,\]

其中 $\circ$ 是 Hadamard product。

若两个合法 witnesses $\mathbf z_1,\mathbf z_2$,朴素地取

\[\mathbf z=\mathbf z_1+r\mathbf z_2\]

通常不再合法,因为

\[\begin{aligned} A\mathbf z\circ B\mathbf z ={}&A\mathbf z_1\circ B\mathbf z_1\\ &+r( A\mathbf z_1\circ B\mathbf z_2 +A\mathbf z_2\circ B\mathbf z_1)\\ &+r^2A\mathbf z_2\circ B\mathbf z_2. \end{aligned}\]

右侧 $C\mathbf z$ 只有关于 $r$ 的一次项,无法吸收 cross terms。

8. Relaxed R1CS

Nova 放宽 relation:

\[A\mathbf z\circ B\mathbf z =u\,C\mathbf z+\mathbf E.\]
  • 标准 R1CS instance 是 $u=1,\mathbf E=\mathbf0$;
  • relaxed instance 允许 scalar $u$ 与 error vector $\mathbf E$;
  • 这不是忽略错误,而是把 error 作为被 commitment 且受后续关系约束的状态。

设两个 relaxed instances:

\[A\mathbf z_i\circ B\mathbf z_i =u_iC\mathbf z_i+\mathbf E_i, \quad i=1,2.\]

定义 folded values:

\[\mathbf z=\mathbf z_1+r\mathbf z_2, \qquad u=u_1+ru_2.\]

展开

\[uC\mathbf z =u_1C\mathbf z_1 +r(u_1C\mathbf z_2+u_2C\mathbf z_1) +r^2u_2C\mathbf z_2.\]

令 cross term

\[\begin{aligned} \mathbf T ={}& A\mathbf z_1\circ B\mathbf z_2 +A\mathbf z_2\circ B\mathbf z_1\\ &-u_1C\mathbf z_2-u_2C\mathbf z_1, \end{aligned}\]

并定义

\[\boxed{ \mathbf E =\mathbf E_1+r\mathbf T+r^2\mathbf E_2. }\]

则逐项相减可得

\[A\mathbf z\circ B\mathbf z =uC\mathbf z+\mathbf E.\]

这就是 folding 公式的代数核心。

9. Folding protocol 的 challenge 顺序

prover 对 witnesses/errors 有 additive commitments:

\[W_i=\operatorname{Com}(\mathbf w_i),\qquad C_{E_i}=\operatorname{Com}(\mathbf E_i).\]

prover 先计算并承诺

\[C_T=\operatorname{Com}(\mathbf T),\]

transcript 再产生随机 $r$。双方公开更新:

\[\begin{aligned} W&=W_1+rW_2,\\ C_E&=C_{E_1}+rC_T+r^2C_{E_2},\\ u&=u_1+ru_2. \end{aligned}\]

若 $r$ 在 $C_T$ 前产生,作弊 prover 可针对 $r$ 选择 cross term,随机多项式 soundness 消失。

sequenceDiagram
    participant P as Prover
    participant T as Transcript
    P->>T: 两个 instances 与 commitments
    P->>T: cross-term commitment C_T
    T-->>P: random r
    P->>P: z=z_1+r z_2
    P->>P: E=E_1+rT+r²E_2
    P->>T: folded instance / witness commitment

10. Nova 如何得到 IVC

维护:

  • 一个 running relaxed instance,表示此前所有 steps;
  • 一个 fresh standard R1CS instance,表示新一步 $F$。

每轮:

  1. step circuit 检查当前状态转移;
  2. folding scheme 把 running instance 与 fresh instance 折成新的 running instance;
  3. recursive circuit 只需检查 folding 的轻量 consistency,而不是完整 SNARK verifier。
flowchart LR
    A0["running relaxed instance U_i"] --> F["fold"]
    S["fresh step instance u_(i+1)"] --> F
    F --> A1["running relaxed instance U_(i+1)"]
    A1 --> N["下一步"]

原始 Nova 的 running relaxed accumulator 只携带常数个 relation instances/commitments,因此它的结构大小不随 step 数增长;这正是 folding 避免线性证明链的意义。但未压缩 IVC 仍不对 step circuit 的变量/约束规模 succinct:running witness、最终 satisfiability/decider 工作以及相关 commitment opening 成本仍依赖该 circuit size。

可再用 Spartan 类 SNARK 做 compression,使最终 proof 与 verifier/decider 对 step circuit size 也 succinct,并按所用后端获得相应 ZK 性质。应区分:

  • 每步 folding 成本;
  • running accumulator 对 step count 的常数性;
  • 未压缩 witness/decider 对 step circuit size 的依赖;
  • 最终 compression prover;
  • final verifier/decider。

11. 为什么 folding 不等于“验证两个证明”

folding 输出的是:

一个新的 instance,如果它最终被证明/decide 为满足 relaxed relation,则除小概率外,两个输入 instances 也不能含未被发现的错误。

它通常不立即给出一个独立、公开可短验证的 SNARK proof。accumulator 把验证债务向后传,最终必须有 decider 或 compression proof。

忘记 final decider,相当于永远没有结算累计的代数声明。

12. HyperNova:从 R1CS 到 CCS

Customizable Constraint Systems 用多个 matrices $M_j$ 与集合 $S_i$ 表达

\[\sum_{i=1}^{q} c_i \left( \bigcirc_{j\in S_i}M_j\mathbf z \right) =\mathbf0.\]

它可无本质开销表示:

  • R1CS 的 quadratic term;
  • PLONKish custom gates;
  • AIR-style constraints。

HyperNova 给出 CCS folding:

  • 支持 high-degree/custom constraints;
  • 可一次 multifold 多个 instances;
  • prover cryptographic cost 以一个与变量数同阶的 MSM 为主;
  • 支持 non-uniform IVC,让不同指令使用不同小 circuits,而非每步支付最大 universal circuit。

其底层用 multilinear polynomial/sumcheck 处理高次 cross terms,而不是为 degree $d$ 手工列出所有二项展开。

13. ProtoStar:从 special soundness 得到通用 accumulation

ProtoStar 观察到许多 polynomial protocols 是 special-sound public-coin protocols。它给出 generic accumulation compiler,把多个 transcript/claims 压成一个。

对 PLONKish:

  • 支持 high-degree gates;
  • 支持 vector lookup;
  • recursive circuit 主要依赖 protocol rounds 与 verifier equation degree,而非完整 proof size;
  • 不要求 trusted setup/pairing;
  • per-step prover 不需要 FFT。

它与 Nova 的差别:

  • Nova 首先为 relaxed R1CS/CCS 构造 relation-specific folding;
  • ProtoStar 从 special-sound protocol 的 algebraic verification equations 构造 accumulation;
  • 两者都把昂贵“现在验证”改为便宜“压成一个待决 claim”。

14. Halo、Nova、HyperNova、ProtoStar 对比

方案被压缩对象主要代数工具每步避免了什么最终仍需要
HaloPCS opening / verifier claimsIPA、additive commitments完整 group opening checkaccumulator decider
Novarelaxed R1CS instancescross-term foldingcircuit 内完整 SNARK verifier可选 SNARK compression
HyperNovarelaxed CCS instancesmultilinear sumcheck + foldinguniversal max-size step circuitdecider/compression
ProtoStarspecial-sound protocol claimsgeneric accumulationproof-size相关递归 verifierdecider
recursive STARK整个 inner verifierAIR/FRI/hash依实现,常靠 field/hash alignmentroot verifier 或 wrapper

15. Non-uniform IVC 的意义

zkVM 有许多 instructions:

\[F_{\mathrm{add}},F_{\mathrm{mul}},F_{\mathrm{load}},\ldots\]

朴素 uniform IVC 把所有指令放进一个大 step circuit,通过 selector 启用一个分支;每一步都为最大 circuit 付费。

non-uniform IVC 允许每步选择一个小 circuit,并证明:

  • 被选 circuit 属于允许集合;
  • 上一步状态与这一步输入链接;
  • running accumulator 覆盖所有异构步骤。

这与 AIR 的 opcode selectors、lookup-based VM 是另一种计算组织方式。

16. 递归里的 zero-knowledge

递归/折叠首先解决完整性与增量成本,不自动提供隐私:

  • running accumulator 可能是 witness 的线性函数;
  • relaxed error commitment 可能在多步间关联;
  • inner proof 的 public inputs 可能泄露中间状态;
  • deterministic folding randomness 会链接 sessions。

ZK IVC 通常需要:

  • hiding vector commitments;
  • 随机 instance folding / rerandomization;
  • final ZK compression;
  • 对整条状态链定义清楚哪些状态公开。

“最终 proof 很短”与“中间状态被隐藏”完全是两件事。

17. Soundness 与实现边界

17.1 base case

递归链必须有明确 genesis:

\[\mathsf{base}=1\]

时不验证 previous proof,但要约束 initial state。若 selector 未约束为 boolean,prover 可混合 base/recursive 分支。

17.2 state continuity

必须证明

\[z_{\mathrm{out},i} =z_{\mathrm{in},i+1}.\]

只证明每个 step 独立有效,不能证明它们组成同一执行。

17.3 deferred checks

所有 accumulated equations 必须进入下一 accumulator,最终 decider 必须验证正确 VK/domain。漏一项会形成“永不结算的债务”。

17.4 nested transcripts

inner/outer proof 的:

  • protocol IDs;
  • recursion depth;
  • VK digests;
  • accumulator types;
  • public states;

必须 domain-separated。避免把 inner proof bytes 在外层以含糊方式重解释。

17.5 field/curve edge cases

non-native modular reduction、incomplete elliptic formulas、point at infinity、subgroup checks和 scalar decomposition 都是高风险区域。递归 circuit 中的 curve checker 必须与 native verifier 接受集合完全一致。

18. 选型视角

  • 长期顺序计算、每步 circuit 稳定:Nova 类 IVC。
  • 多种小指令 circuits:HyperNova/non-uniform folding。
  • 已有 PLONKish special-sound protocol,需 lookup/high-degree gate folding:ProtoStar 类。
  • IPA-PLONKish stack:Halo accumulation。
  • AIR/hash stack、批量 block proofs:recursive STARK tree。
  • 只需一次性 batch 多个 proofs:aggregation 可能比 IVC 更简单。

19. 边界与审计清单

  1. 目标是 aggregation、IVC 还是 PCD,安全 statement 写清了吗?
  2. base case selector 是否 boolean,initial state 是否绑定?
  3. step-to-step public state 是否连续?
  4. cross-term commitment 是否早于 folding challenge?
  5. relaxed error/accumulator 是否每轮完整携带?
  6. 最终 decider/compression 是否真实执行?
  7. inner verifier 与 recursive circuit 的接受条件是否 bit-for-bit 等价?
  8. curve points、subgroups、infinity 和 non-native reductions 是否完整约束?
  9. inner/outer transcripts 是否 domain-separated 并绑定 VK/depth/state?
  10. ZK 是否覆盖 running accumulator 与中间 states?
  11. failure probability 随 steps/树节点如何组合?
  12. wrapper 是否改变 setup 与 post-quantum 安全结论?

20. 自测

  1. 展开 $A(z_1+rz_2)\circ B(z_1+rz_2)$ 并推导 $\mathbf T$。
  2. 为什么 relaxed error $\mathbf E$ 不是“允许不满足约束”?
  3. folding challenge 为何必须晚于 cross-term commitment?
  4. 区分 running accumulator 与最终 succinct proof。
  5. Halo accumulation 与 Nova folding 分别压缩什么对象?
  6. recursive STARK 外包一层 KZG-SNARK 后,哪些安全属性发生改变?

参考


上一篇:Circle STARK 与现代哈希型 PCS · 下一篇:Plonky 系列对照与迁移 · 返回:总目录

本文由作者按照 CC BY 4.0 进行授权