为了解决区块链 Layer 1 网络的扩容问题,Rollup 方案应运而生。结合 ZK(零知识证明)技术,ZK Rollup 成为 Layer 2 赛道的新宠儿。然而,对于大多数人来说,ZK、Rollup 和 EVM 等相关概念可能有一定的理解门槛。因此,本研报旨在以简明易懂的语言系统梳理 zkEVM Rollup 的系列概念与原理,并深入分析其技术的演变和发展现状。此外,本研报还将对其中的生态项目进行详细解读,以帮助你全面深入了解和判断 zkEVM Rollup 赛道的发展趋势。
理解 ZK
ZK(或是 ZKP),全称 Zero-Knowledge Proof,即零知识证明,在密码学中,零知识
证明或零知识协议是一种方法,通过该方法,一方(证明者)可以向另一方(验证者)
证明一个事实,而无需透露该事实的具体信息,也就是说一方(证明者)无需透露任何
该事实的「具体信息」,便能让对方知道这个事实是否正确,因此 ZK 技术能够在隐私
保护领域为我们带来诸多用例和想象空间。
当然,ZK 技术除了能够带来隐私保护的好处,在 ZK Rollup 中,ZK 技术更重要是解决
“验证难” 的问题。“验证” 这个过程对于区块链非常重要,Ethereum 中绝大部分的计算
过程都是为了满足验证的要求,而 ZK Rollup 能大幅减少整个节点网络投入在验证中的
时间。举例,如果一个区块需要很长时间来验证区块生成时是否满足整个网络的规则,
那么就可以有一个证明者初次验证它的时候,并生成有关这个区块计算结果的 “证明”,
剩下其他人便可以通过快速验证这个 “证明”(而不是计算量极大的原区块数据),从而
达到验证区块的目的。
接下来,我将为你拆解一个简单的 ZK 协议的几个步骤——生成密钥、证明和验证。
生成密钥,证明和验证
在 ZK 中,我们需要首先将待验证的问题转化为数学表达式,进而转化为多项式,并将
其表示为算数电路 [见图 1] 的形式。这个要特别解释一下(此处若不理解可选择跳
过,并不对全文理解构成影响),算术电路(Arithmetic Circuit)是一种电子电路,用
于执行数字算术运算。当程序转换为算术电路时,它被分解为由加法、减法等基本算术
运算组成的单个步骤。如一个将 (a+b)×b×c 作为输出的函数,可以转化为以下电路
图,见图 1。
图 1. 一个电路图的示例,可以注意到在电路中所有的运算被拆分为最简单的基本运算 | 图源:深入了解 zkSNARK (1)
使用这个电路和一些随机数作为输入,我们可以生成一个证明密钥(pk,proving
key)和验证密钥(vk,verification key),用于后续的验证过程,示意图见图 2。
图 2. “公共参数” 的生成丨图源:Web3Caff Research 研究员 Albert 制作
我们的证明系统还需要两种类型的输入——私有输入和公开输入,与证明密钥一起生成
证明。其中,私有输入(witness)是我们想要隐藏的秘密,而公开输入是可以公开的
信息。例如,在等式 X+Y*Z=OUT中,X和OUT是公开输入,而Y和Z的值则是我们不想
向验证者公开的。虽然根据公开输入可以推出Y*Z 的值,但是 Y 和 Z 的具体取值仍然无
法确定。
图 3. ZK-SNARKs 的证明过程和验证过程丨图源:Web3Caff Research 研究员 Albert 制作
当验证方接收到证明后,使用公开输入、证明和验证密钥来验证该证明,并返回验证结
果(即是否验证成功)。
明白了上述流程之后,我们可以将这种技术运用到区块的验证当中,实现一个小小的
ZK-SNARK,见图 3——ZK-SNARK(Zero-Knowledge Succinct Non-Interactive
Argument of Knowledge),即零知识简洁非交互知识论证,它是一种零知识证明的构
造方法,用于验证者向验证方证明某个断言的真实性,而无需逐步交互证明过程。实现
零知识证明的协议和方式有很多,SNARK 是相较比较容易理解的一种,也是现阶段多
数项目的选择。此外,在 “从 ZK-SNARKs 到 ZK-STARKs” 这个段落中我们会谈到
SNARK 的优势和不足。
尝试一个小小的 SNARK
我们以一个记录账户状态的 Merkle Tree 的零知识证明为例来练习。该 Merkle Tree 记
录了账户的地址和余额。当有新的交易需要更新 Merkle Tree 时,我们需要执行以下操
作:
验证交易的发送方和接收方是否在树的叶子节点上。
验证发送方的签名。
更新发送方和接收方的余额。
更新 Merkle Tree 的根节点(即 Merkle Root),并将其作为最终输出。
在没有零知识证明的情况下,验证者需要重复这些步骤来确保计算的准确性。但是使用
零知识证明后,情况就不同了。首先,我们需要确定两种类型的输入:
输入。
其次,我们需要生成密钥和计算电路。我们将 Merkle Tree 更新、输入输出地址验证等
计算过程构建成计算电路,以获得证明密钥和验证密钥。该电路与输入的交易信息无
关,也与现有的 Merkle Root 无关,因为 Merkle Tree 的计算方式是固定的。
在生成证明的阶段,我们将前后两个 Merkle Tree 和交易信息作为输入。在验证者阶
段,验证者可以不需要获取到 Merkle Tree,也就是不了解账户信息的情况下,确保更
新情况的可靠性。该电路类似于一个稳固的黑盒,只要输入正确,就能获得正确的输
出。
使用零知识证明,其他验证者可以快速验证 Merkle Tree 的生成过程是可信的,从而减
少了网络上重复验证的时间,同时 Merkle Tree 的信息无需向验证者披露。
从 ZK-SNARKs 到 ZK-STARKs
上述讲的证明协议是 ZK-SNARKs。SNARK 代表 succinct non-interactive arguments of
knowledge,其中 succinct 指的是这种方式的简洁性,non-interactive 指的是相对于其
他证明方式,SNARKs 是非交互性质的证明,即验证者只需使用由证明者生成的 proof
(证明)即可获得验证结果。但是,ZK-SNARKs 存在一些问题。在密钥生成阶段,电
路和随机数相当于一组初始的公共参数,这个公共参数的生成过程存在不可避免的中心
化问题。
ZK-STARKs 在 SNARK 的基础上另辟蹊径,其中的 “s” 代表可扩展的,其证明生成时间
和原始计算的耗时呈拟线性关系,而验证耗时和原始计算呈对数关系,这意味着在大量
数据集作为数据的情况下,验证者所需的验证时间被大大缩短。
同时,作为 ZK-SNARKs 的升级版,ZK-STARKs 不仅仅可以提高验证效率(理论效率为
10 倍),而且不依赖椭圆曲线或可信设置,并且不需要生成初始公共参数的过程(字
母 “T” 代表透明性),这消除了对可信设置的中心化需求。一些开发者认为,ZK
STARK 中的哈希函数有助于抵御量子攻击。
然而,ZK-STARKs 的推出时间较晚,目前技术还不够成熟,并且依赖哈希函数,这限制
了它的通用性,ZK-SNARKs 仍然是通用的证明算法。基于 STARK 的算法的一些示例包
括 Fractal、SuperSonic 等,相关项目方有 StarkWare、Polygon Miden 等。
好的,今天就分享到这里了,感兴趣的朋友请关注我们!
微信1:victeam005
微信2:shijie20170405
Telegream:https://t.me/VICOINDAOCHAT