递归 SNARKs 详解:证明如何验证其他证明

发布: (2026年3月1日 GMT+8 14:59)
4 分钟阅读
原文: Dev.to

Source: Dev.to

如果一个证明可以检查另一个证明?

在大多数零知识系统中,验证者只检查单个证明对应单个声明。递归 SNARK 打破了这一模型:一个证明可以自身验证另一个证明,从而形成链——甚至是树形结构的已验证计算。

这并非理论上的好奇心。递归组合是 zkRollup 将成千上万笔交易批量化为单个链上证明的核心机制,也是 NovaHalo 2SP1 等实现增量可验证计算(IVC)的系统的核心。

工作原理

标准的 SNARK 证明:

"I know a witness w such that C(x, w) = true."

递归 SNARK 证明更强的内容:

"I know a witness w **and** a valid proof π of a prior statement, and both check out."

关键在于将验证器电路嵌入到证明电路中。证明者将之前的验证器作为子计算运行,然后证明整个过程——新的计算加上旧的验证——都是正确的。

这非常耗费资源。SNARK 验证涉及椭圆曲线配对或多项式求值,将这些编码为算术约束会导致电路规模膨胀。突破性的洞见(始于 2019 年的 Halo)是累积方案:推迟昂贵的配对检查,将其在多个步骤中累积,最后只验证一次。

为什么重要

压缩

一个 zkRollup 处理 10 000 笔交易。没有递归时,证明一次性覆盖全部 10 000 笔——电路庞大。使用递归时,每个区块的证明验证前一个区块的证明并加入新交易。最终的证明大小是常数级的,与历史长度无关。

并行

递归树允许你并发证明独立的分支,然后合并。这正是 SP1 和 RISC Zero 等系统在大程序上实现实用证明时间的方式。

互操作性

一个证明系统可以验证来自不同证明系统的证明。这使得跨链桥成为可能:链 A 可以验证在链 B 上生成的证明,而无需信任链 B 的验证者。

权衡

递归电路比非递归电路更大、每一步的证明速度更慢。每次递归都需要嵌入验证器,从而产生额外开销。只有在步骤很多、可以摊销这些开销时,优势才会显现——这正是 rollup、长期运行计算和增量状态机的典型场景。

该领域正趋向折叠方案(Nova、ProtoStar、HyperNova)作为下一步演进——它们用更廉价的“折叠”操作取代完整的递归验证,进一步推迟工作。预计到 2027 年,这将成为生产 ZK 系统的默认架构。

0 浏览
Back to Blog

相关文章

阅读更多 »

当工作成为心理健康风险时

markdown !Ravi Mishrahttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...