本文介绍了选择zkVM的关键特性以及如何评估不同的ZK工具包。作者讨论了为何zkVM能加快开发速度,列举了必要特性,包括支持导入包、链上验证、无限制计算以及证明组合。此外,文章还详细描述了RISC Zero在实现这些特性方面所采用的方法和技术挑战。
所以,你已意识到使用可验证的离链计算来扩展区块链的强大功能。
你有一个想要构建的项目,但不确定从哪里开始。你应该如何评估可选项?
本文将指导你了解构建所需的关键特性,并为你提供当前ZK工具的状态背景。我们将考虑以下问题:
为什么应该选择zkVM?
zkVM的基本特性是什么?
哪些zkVM提供这些基本特性?
两年前,ZK软件开发的主要工作流程是使用circom手动编写电路。编写电路的过程极其劳动力密集:电路难以编写、更新、审核和维护。将基于电路的ZK项目推向市场所需的时间和成本大约为2年和1亿美元。
在过去的两年中,RISC Zero展示了与其直接编写电路相比,为zkVM编写应用程序是更快、更便宜的市场解决方案。zkVM使ZK对普通开发者可及,并使在一个周末内将复杂应用程序变为现实成为可能。
在2022年初,我们解锁了证明常规Rust代码(包括你最喜欢的Rust事务)正确执行的能力。突然间,ZK构建者能够专注于构建实际的应用程序,利用Rust生态系统中所有成熟的工具。
如今,有多种zkVM的选项,这将我们引向下一个问题……
要构建任何有趣的东西,你绝对需要四个特点。
支持导入库/包。
支持链上证明验证。
支持无界计算,不会导致验证成本激增。
支持证明组合。
为了促进ZK的未来,这四个特性是必不可少的。继续阅读以了解哪些zkVM提供这些特性,以及它们为何如此重要。
在写这篇文章时,这里是zkVM行业的现状。
关于每个特性,让我们快速解释一下:
为什么重要
为什么难以实现
RISC Zero的方法
为什么重要
没有对导入库的支持,软件开发就是一场噩梦。允许开发者导入库是任何复杂应用的必需。
为什么难以实现
几年前,ZK系统效率低下且难以构建,因此本应支持像Rust或C++这样的成熟语言似乎在技术上无法实现。如今,zkVM开发的趋势已经从定制指令集转向RISC-V、MIPS和WASM等标准指令集。
RISC Zero的方法
在2022年4月,RISC Zero 发布了首个能够对高级语言(如Rust或C++)进行证明的zkVM。现在,我们每晚测试与我们的zkVM兼容的前1000个Rust库;目前70%能开箱即用。查看我们的 示例 目录,了解如何在zkVM中使用Rust库的示例。
为什么重要
为什么难以实现
证明系统设计涉及到证明者复杂性与验证者复杂性之间的基本权衡。当前趋势是基于哈希和纠错码的SNARK(又名STARK)为zkVM提供最佳的证明者成本,而基于椭圆曲线的SNARK则提供更好的链上验证成本。如今的zkVM通常包括多种证明系统的合并,从而获得最佳的两全其美。
RISC Zero的方法
RISC Zero使用STARKs进行高效证明,然后在SNARK电路中 验证STARK证明,以“转换”STARK为SNARK。在2023年8月,我们在Sepolia上发布并验证了 我们的第一个证明。今天,我们支持一个链上的 验证合约 ,可以用于任何zkVM应用程序。
为什么重要
如果你想证明 Ethereum区块 或 OP区块的正确构造,你将需要证明一个_非常_大的计算。
为什么难以实现
对大型计算进行证明的简单方法不可扩展 – 将计算大小增加2倍将使计算复杂度增加超过2倍。为了实现无界计算大小(而不干扰链上验证),我们需要两个组成部分,每个部分都是重大的技术壮举:
将大型计算划分为可以单独证明的块的能力
将这些“段证明”聚合为一个简洁的证明的能力。
RISC Zero的方法
RISC Zero引入了 延续 来解决生成无界大小计算证明的问题 – 我们独立证明每个段,然后使用 递归 来聚合段证明。通过这种方法,RISC Zero设法实现 线性时间证明 和 恒定验证成本。
为什么重要
证明组合 (又称证明的证明)开启了多种用例,包括更复杂的隐私应用、更加模块化的zkVM应用,以及证明聚合(包括来自RISC Zero和其他证明系统的证明)。
为什么难以实现
使证明组合高效是一个足够具有挑战性的任务,目前尚未有其他人提出过这一想法。解锁该特性不仅需要解决递归问题,还需要构建一个API,以便允许开发者从zkVM内部 调用递归证明者。
RISC Zero的方法
用户可以通过在zkVM内部调用 `env::verify()` 函数来访问证明组合。这个特性在今年2月刚刚引入;了解更多有关证明组合的信息,请查看 这篇博客 和/或 这次学习俱乐部会议。
这三大关键特性(链上验证、无界计算和证明组合)依赖于递归。在ZK世界中,递归指的是证明一个证明的正确验证的能力。换句话说,你在证明者内部运行验证者。
这听起来可能很简单,但构建递归电路可谓复杂。RISC Zero zkVM旨在尽可能易用,但在内部,我们维护三个相关但独立的ZK电路的兼容性。在RISC Zero中,我们实际上有两个基于STARK的zkVM:我们首先使用RISC-V电路生成RISC-V执行的证明,然后使用一个单独的递归电路来聚合这些证明。然后,我们将结果输入到SNARK电路中,以实现链上验证。
这里需要的工程是一项严肃的工作 – 为了支持这一努力,我们正在构建一个基于MLIR的语言,用于构建递归电路,称为Zirgen。要了解有关Zirgen的更多信息,请查看Julian Sutherland(Nethermind)进行的 这次演讲。
性能似乎是最自然的比较标准,但不幸的是,ZK项目的基准测试仍处于起步阶段。市面上有一些基准测试项目,但显然开发出一个稳健的“苹果对苹果”的比较框架是非常困难的。
在比较性能之前,请确保你正在从能力上进行“苹果对苹果”的比较。当一家新参与者宣布他们的Zeth版本时,他们迅速声称他们的区块构建证明比RISC Zero快30倍。不幸的是,他们的Zeth证明也是比我们的证明大1000倍。如果你无法将证明放上链,那么生成证明的速度真的重要吗?
RISC Zero一直专注于准备一个功能完整的zkVM用于生产使用。一旦我们完成审计、信任设置仪式,并将验证者部署到主网,你可以指望获得一些显著的性能提升。目前,我们建议使用唯一功能完整的zkVM:RISC Zero。
值得提及的还有几个其他特性:
确定性构建zkVM本身能够原生证明给定_二进制文件的正确执行,但对于大多数用例,我们将希望能够证明给定 Rust程序_(或某种其他高级语言)的正确执行。RISC Zero通过我们的 cargo risczero 工具解决了这个问题。
加速电路支持
当你在zkVM应用中识别出性能瓶颈时,能够修改zkVM以提供特定用例的加速会很不错。例如,可以添加Keccak加速器,以支持对以太坊区块构建的高效证明。RISC Zero目前提供对 大整数运算和SHA的加速;请查看Victor即将于zkSummit 11上进行的讲座,以了解我们扩展此功能的计划。
证明聚合是指将多个证明合并为一个证明的能力。为了使链上验证变得实惠,这一特性是必不可少的。证明组合 使此功能成为可能,但值得注意的是,其他系统可能提供证明聚合的解决方案,而没有完全解决证明组合的问题。
- 原文链接: risczero.com/blog/the-4-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!