本文介绍了零知识证明(ZKP)在Web3中的应用,以及在以太坊上验证ZKP的挑战和高成本。Aligned Layer通过构建去中心化的验证器网络,利用EigenLayer,旨在提供快速且经济高效的证明验证服务,支持多种证明系统,从而降低ZKP的使用门槛,加速其在各种应用中的普及,并与以太坊协同创新。
零知识和有效性证明因其在去中心化隐私计算、区块链扩容、身份协议和可验证机器学习等方面的能力而备受关注。 它们允许一方(证明者)向另一方(验证者)以时间和内存高效的方式表明给定的陈述是正确的。 零知识证明允许我们证明该陈述,而不泄露除其有效性之外的任何其他信息。 它们正成为 web3 中的主要构建块之一。 然而,尽管这项技术自 20 世纪 80 年代中期就已经存在,但由于缺乏适用于此类应用的高效构造,它并不是比特币和以太坊的核心。 这导致了我们可以验证的证明系统类型的限制,增加了以太坊的验证时间和成本,并且还增加了开发和上市时间,因为我们必须优化验证合约以减少 gas 使用量(因此降低成本)。 由 EigenLayer 提供支持的 Aligned Layer 提供了一个去中心化的验证者网络,可以快速且经济高效地检查来自任何证明系统的证明。
随着 zk-rollup 和身份协议的引入,对零知识证明的链上验证的需求急剧增加。 这些验证与以太坊中的其他应用程序(例如 DeFi 和 NFT)竞争区块空间,导致成本增加。 幸运的是,有一些方法可以减少链上验证,但需要以时间开销和较低的边际链下成本为代价。 Aligned Layer 提供了一种无需引入时间开销的解决方案,并允许开发人员选择是否要先等待以太坊上验证证明后再继续。
本文将解释什么是简洁的、非交互的知识论证,如何在以太坊中验证证明,降低成本的策略,Aligned Layer 可以为以太坊提供什么,以及它与聚合层的区别,它有能力验证比以太坊多几个数量级的证明。
简洁的、非交互的知识论证 (SNARKs) 允许我们以比天真地检查它快得多的方式证明语句的有效性。 例如,假设我们想表明我们正确计算了第 1,073,741,824 个斐波那契数。 任何人检查计算的最简单方法是重新计算整个序列,a0=1a0=1, a1=1a1=1, a2=2a2=2, a3=3a3=3, an+2=an+1+anan+2=an+1+an,即重新执行我们所做的计算。 这就是区块链解决不同方之间协议问题的方式:重新执行和共识。 然而,这在计算上证明是密集型的,如果我们想检查由于计算能力有限而无法自己检查的计算,这是有问题的。 SNARK 实现亚线性验证(通常是对数时间验证),这意味着我们需要执行更少的工作。 这也意味着我们不需要知道计算中的所有步骤(更准确地说,我们不需要整个 witness)。 使用 STARK,证明大小和验证时间的数量级为 log2nlog2n,其中 nn 是程序的长度。 在我们的斐波那契数列的例子中,n=230n=230,所以证明大小和时间将是一些常数乘以 302=900302=900,这比 230230 小得多。 因此,我们验证证明而不是重新执行,从而节省了大量时间和内存。
有不同的 SNARK 构造,基于线性概率可检查证明 (PCP)(例如 Groth 16)和交互式预言机证明 (IOP)(例如 Plonk 或 STARKs),使用不同的加密假设和承诺方案(抗碰撞哈希函数、离散对数问题的硬度、指数知识),存在或不存在可信仪式,算术化方案,使用多元或单变量多项式等。这导致了各种各样的 SNARK,在证明大小、验证时间、证明者时间和它们适用的应用程序类型方面具有不同的权衡。 一开始,SNARK 的构造涉及将计算表示为电路,这是一项开发人员密集型操作,需要专业知识并且容易出错/出现错误。 随着通用 zkvm 的出现,这项任务已大大简化,使开发人员能够用更高级的语言(如 Rust)编写程序,并在无需自己编写电路的情况下证明它们。
我们可以根据我们的需求选择多种证明计算的方法。 然而,并非所有证明系统都易于或廉价地在以太坊中验证,这归因于两个因素:与运行验证算法相关的存储和 gas 成本。 例如,验证 STARK 的成本约为 5,000,000 gas,而基于 Plonk 的证明低于 1,000,000 gas。 由于 precompiles,基于配对的 SNARK(例如 Groth 16 和使用 KZG 承诺方案的证明系统)往往成本较低,因为配对操作的成本约为 200,000 gas,并且 BN254 椭圆曲线的椭圆曲线操作(例如加法和标量乘法)相当便宜。
我们可以直接在以太坊中验证的证明系统存在一些限制。 例如,基于内积参数的证明系统(例如 Mina 的 Kimchi(通过 Pickles 实现高效递归)或基于 Brakedown 的证明系统(例如 Binius(具有平方根大小的证明)))会变得非常昂贵,要么是因为它们所涉及的操作数量,要么是因为证明大小。
为了验证这些证明,我们需要使用对以太坊来说更具成本效益的解决方案来包装它们,例如 Mina 的 KZG Kimchi。 然而,这以模拟昂贵的操作(例如外域算术和大量椭圆曲线操作)为代价,需要在开发和上市时间方面付出大量努力。 此外,如果你发明了一种非常高效但对 EVM 不友好的新证明系统,则需要花费大量时间开发包装器,使其在 EVM 中易于验证。
降低以太坊成本的最佳方法与缩小证明和公共输入大小(从而减少存储)以及证明大型计算而不是较短的计算有关(例如,验证一个区块中所有交易的证明比单独验证每笔交易的成本要低得多)。 第一种策略涉及使用恒定证明大小的 SNARK,例如 Groth 16 或 Plonk,并提供公共输入的承诺,而不是整个公共输入。 第二种策略涉及将多个计算捆绑到一个中,例如一个区块中的所有交易。 Starknet 中使用了这种想法,证明了 Cairo-vm 中 bootlader 程序的执行。 然而,许多证明系统在证明更大的计算时具有更大的内存使用量,从而限制了我们可以使用此方法证明的计算的大小。 为了解决这些问题,我们可以使用递归证明组合将多个证明聚合为一个; 因此,以太坊中的验证成本将在我们检查的不同计算之间分摊。
一些方案允许批量验证:通过执行一些额外的操作,我们可以一起检查多个证明,从而在证明之间分摊大部分成本。 例如,如果我们有来自 KZG 承诺方案的多个评估证明,我们可以通过采样随机标量一起来检查它们,而不是单独验证每个证明。 即使一次 KZG 验证可能很昂贵(它涉及一次配对操作),但通过将多个证明批量处理在一起,每个证明的成本变得可以忽略不计。 BLS 签名也利用了这个性质。 即使 BLS 签名比 ECDSA 签名检查起来更昂贵,但通过批量验证,我们可以使总体验证成本小得多。
证明聚合通常通过递归验证来执行,使用 n 元树结构(一种常见的情况是二叉树,取 2 个证明并生成证明这两个证明的验证的正确性的证明)。 然而,这并不是唯一可用的技术。 有关某些技术的概述,请参阅我们之前的博客文章。 证明递归是一种很好的聚合技术,但它通常涉及昂贵的操作。 例如,它可能涉及非原生算术(我们要验证的证明是在某个有限域上的,但验证的证明是在不同的域上的),执行昂贵的椭圆曲线操作(例如配对)或计算许多哈希(在基于哈希的系统中,例如 STARKs)。
一些项目专注于通过提供证明聚合(作为服务或作为其协议的一部分)来降低成本(例如,rollups)。 然而,证明聚合仅限于少数证明系统,并且它们会产生一些开销。 由于他们希望在以太坊中实现廉价验证,因此他们最终必须将他们的证明包装到与 EVM 友好的证明中。
证明聚合的主要缺点是与聚合相关的开销以及需要将多个证明捆绑在一起。 这意味着我们增加了延迟(这可能会使某些应用程序不可行),并且某些应用程序可能难以扩展(例如,你刚刚启动了一个尚未广泛使用的新协议,或者你提供了一项非常有价值的服务,但没有很多用户)。
Aligned Layer 提供快速且廉价的验证,这与证明聚合不同。 Aligned Layer 可以比以太坊更快,原因如下:
为了了解 Aligned Layer 在验证方面相对于以太坊的潜在优势,我们将对性能进行一些粗略的估计。 数字总结在下表中:
| 证明系统 | Groth 16 | STARKs |
|---|---|---|
| 以太坊 Gas 成本 | 220,000 | 5,000,000 |
| 以太坊中每个区块的证明 | 136 | 6 |
| 验证时间,消费级硬件 (ms) | 1-3 | <25 |
| 每个区块时间的证明 | 4000 | 480 |
| 优于以太坊的改进 | 29x | 80x |
一个 Groth16 证明的成本在 220,000 gas 到 300,000 gas 之间; 使用以太坊的全部容量,这相当于每 12 秒最多 136 次验证。 在没有并行化的情况下,在消费级硬件中验证相同的证明需要 1 到 3 毫秒,从而在相同的时间段内至少产生 4,000 个 Groth16 证明,几乎是 30 倍的证明。 对于成本约为 5,000,000 gas 的 STARK 证明,每个区块只有 6 个证明。 CPU 上的 STARK 验证取决于程序大小,但可能低于 25 毫秒,从而至少产生 480 个证明,提高了 80 倍。 以太坊的数字代表其最大标称容量,除非 gas 限制增加或证明 gas 使用量进一步减少,否则不会提高(但是,以太坊上还有其他应用程序在运行,它们争夺这有限的验证容量)。 Aligned Layer 可以使用更强大的设备,优化代码以提高速度并利用高度并行化。 此外,由于 Aligned Layer 仅验证证明,因此其计算能力不会与其他应用程序共享。
Aligned Layer 以其快速和慢速模式提供了两全其美的解决方案。 Aligned Layer 的目标是快速验证任何证明系统,并且可以轻松地合并新的证明系统。 在获得由以太坊验证者子集支持的 Aligned Layer 验证后,开发人员可以使用该结果来继续前进。 它也更便宜,因为它不受 EVM 的限制。 此外,如果你开发了一种新的证明系统,你只需要以 Rust 提供验证器代码,而无需编写包装器,从而减少了开发时间。
拥有廉价的验证使得协议和应用程序更容易采用零知识证明,从而降低了准入门槛。 此外,它还有助于扩展零知识证明,因为每单位时间的证明数量增加,使得更容易实现合理数量的证明以在以太坊中聚合和检查,从而降低了每个证明的验证成本。 慢速模式增加了额外的安全性,因为最终验证是在以太坊中完成的。 此外,如果验证者在快速模式下行为不当,慢速模式将覆盖他们提供的任何结果并导致罚没。
由于零知识证明在去中心化隐私计算、区块链可扩展性、可验证机器学习和身份协议中的应用,对零知识证明的需求不断增长。 对以太坊中链上验证的需求也在增长,但单个证明验证成本仍然很高,并且与其他应用程序竞争。 证明聚合通过将多个证明捆绑到一个中来降低成本,但代价是更高的延迟和较小的边际链下成本,预计随着证明者技术的改进,这一成本会下降。 然而,由于延迟要求或规模,引入的开销和对足够数量的证明的需求限制了可以有效利用零知识证明的应用程序类型。 Aligned Layer 提供了一个由验证者组成的去中心化网络,通过 EigenLayer 获得以太坊的信任支持,提供快速且廉价的证明验证,提供低延迟验证和低成本。 它与聚合层不同,因为它的主要目标是验证证明并允许开发人员选择最适合他们需求的证明系统。 聚合通过捆绑证明并在证明之间分配固定的验证成本来工作,但开发人员必须等到以太坊中结算。 在 Aligned Layer 中,由开发人员决定他们更喜欢快速模式还是慢速模式。 我们认为 Aligned Layer 将加速零知识证明在应用程序中的采用,并与 EigenLayer 一起,将有助于为以太坊带来进一步的创新。
- 原文链接: blog.lambdaclass.com/ali...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!