原文作者:Jaehyun Ha
编译:深潮 TechFlow
摘要
虽然零知识证明(ZKPs)有望打造一个更加私密和可扩展的区块链生态系统,但许多关于零知识(ZK)的方面被误解或与普遍认知中的实施方式不同。
ZKPs 主要有两个方面:“零知识”和“简洁性”。虽然这种说法没有错,但大多数 ZK rollups 只利用了简洁性属性,交易数据和账户信息并没有完全保持零知识或私密。
对于各种类型的 DApps,ZK rollups 可能不是最佳的开发堆栈选择。例如,生成 ZKPs 可能成为快速终结的瓶颈,从而降低Web3游戏的性能,而基于状态差异发布的数据可用性保证方法可能会损害 DeFi 借贷协议的服务。
图 1 :ZK 是一个很好的流行词
来源:imgflip
区块链行业的当前状态可以比喻为零知识(ZK)时代。无论你走到哪里,ZK 都很突出,找到不将 ZK 纳入其名称的下一代区块链项目变得越来越罕见。从技术角度看,无可否认,ZK 是一项有前景的技术,能够为更具可扩展性和私密性的区块链生态系统做出贡献。然而,由于 ZK 的复杂技术背景,许多投资者,无论是散户还是机构,常常基于“相信”这看起来很酷、新颖且可能解决区块链三难问题而投资于 ZK 项目,而没有完全理解 ZK 技术如何使每个项目受益。
在这个 ZK 系列中,我们将探讨 ZK rollups 的难以忽视的事实(缺点和劣势)及其有益的应用。首先,我们将解析区块链中 ZK 证明(ZKPs)的两个核心属性:“零知识”和“简洁性”。然后,我们将讨论当前在服务中的大量 ZK rollups 为何没有真正利用“零知识”方面。接下来,我们将研究在哪些领域应用 ZK rollup 比较有害而非有益,避免实施复杂性等众所周知的问题。最后,我们将突出那些有效体现 ZK 原则并实际从使用 ZK 技术中获得明显好处的杰出项目。
回顾:ZK Rollups 中的交易生命周期
Rollup 是一种扩展解决方案,通过在链外执行交易束然后将最新 L2 状态的摘要数据存储在 L1 上来解决 L1 的吞吐量限制。其中,ZK Rollups 的突出特点是能够通过在链上提交链下计算的有效性证明来快速提取资金。在我们深入研究 ZK rollups 的问题之前,让我们简单回顾一下它的交易生命周期。
图 2 :ZK rollups 中的交易生命周期
来源:Presto 研究中心
每个L2用户生成并提交他们的交易给序列器。
序列器聚合并排序多个交易,然后在链下执行这些交易以计算新的 rollup 状态。随后,序列器将这个新的 rollup 状态以“批次”形式提交到链上状态智能合约,并压缩相应的L2交易数据成为数据块以确保数据可用性。
这个批次被发送给证明者,证明者创建该批次执行的有效性证明(或 ZKP)。然后,这个有效性证明连同额外数据(即之前的状态根)一起发送到L1的验证者智能合约,这有助于验证者识别它正在验证的内容。
在验证者合约检查证明有效后,rollup 的状态会被更新,且已提交批次中的L2交易被视为已完成。
(请注意,这种解释是 ZK Rollup 过程的简化版本,每种实现可能因协议而异。如果我们区分角色,L2中可能有更多实体,如聚合器、执行器和提议者。数据块的层级也可能不同,如块、块组和批次,具体取决于它们的用途。上述解释假设了一个情况,即一个集中式序列器具有强大的权威来执行交易,并且还生成统一的数据块格式为批次。)
与 Optimistic Rollups 不同,得益于 ZKPs(例如 ZK-SNARKs 或 ZK-STARKs),ZK Rollups 可以通过验证一个简单的证明来验证数千个交易的执行正确性,而无需重播所有交易。那么,这个 ZKP 是什么,它有什么特性呢?
ZKPs 的两个属性:零知识和简洁性
顾名思义,ZKP 基本上是一种证明。证明可以是任何能够充分支持提供者声明的东西。假设 Bob(提供者)想要让 Alice(验证者)相信他对自己的笔记本电脑有权威。证明这一点最简单的方法是,Bob 只告诉 Alice 密码,Alice 在笔记本上输入密码并验证 Bob 确实有权限。然而,这个验证过程对 Alice 和 Bob 来说都是不满意的。如果 Bob 设置了一个非常长且复杂的密码,Alice 要正确输入将非常具有挑战性(假设 Alice 不能复制粘贴)。更现实的是,Bob 可能不愿意透露他的密码给 Alice 以证明他的权限。
如果有一种验证过程,Alice 可以迅速验证计算机的权限,而无需 Bob 透露他的密码呢?例如,Bob 可以在 Alice 面前用指纹识别解锁笔记本电脑,正如图 3 中所示(注意这不是 ZKP 的完美示例)。这是 Alice 和 Bob 都可以从 ZKPs 的两个关键属性中受益的地方:零知识属性和简洁性属性。
图 3 :零知识和简洁性的高级直觉
来源:imgflip
零知识(ZK)
零知识属性指的是提供者生成的证明除了证明的有效性外,不会泄露关于秘密见证人(即私有数据)的任何信息,使验证者对数据一无所知。在区块链中,这一属性可以用于保护个人用户的隐私。如果对每笔交易应用 ZKPs,用户可以证明他们的行为的合法性(即证明一个用户有足够的资金进行交易)而不暴露他们的交易细节(例如转账、账户余额更新、智能合约部署和执行)给公众。
简洁性
简洁性属性指的是 ZK 能够从大尺寸的声明生成一个短小且快速验证的证明,换句话说,它将大的东西压缩成紧凑的形式。在区块链中,这一点特别用于 rollups。使用 ZKPs,L2中的验证者可以通过向L1中的验证者提交一个简洁的证明来声称交易的正确执行(TB 级交易的有效性可以用 10 ~ 100 KB 的证明表示)。然后,验证者可以通过验证简洁的证明而不是重播所有交易,在短时间内(即 10 毫秒至 1 秒)轻松确认执行的有效性。
ZK Rollup 很棒,但并不意味着隐私性
上述 ZKP 的特性在 ZK Rollups 中得到了很好的利用。虽然验证者无法从提供者接收的 ZKPs 中推断原始交易数据,但验证简洁的证明允许他们有效地验证提供者的声明(即新的L2状态)。也就是说,断言当前的 ZK Rollups 完全遵循零知识和简洁性属性是误导的。这可能在专注于提供者与验证者之间的互动时是正确的,但 ZK Rollups 中还存在其他组成部分,如序列器、提供者和 rollup 节点。那么,“零知识”原则也为他们确保了吗?
在任何 ZK Rollups 中用 ZKPs 实现完全隐私的挑战来自于,如果其他部分保持公开而某些部分通过 ZK 变为私有时可能出现的妥协。想想 ZK Rollups 中的交易生命周期,当交易从用户发送到序列器时,隐私是否得到维护?对于提供者呢?或者当L2批次提交到 DA 层时,个别账户信息的隐私是否得到保护?目前这些情况都不成立。
图 4 :ZK rollups 中的隐私泄露
来源:Presto 研究
在大多数主流的 ZK Rollups 中,序列器或提供者(或其他具有强大权限的集中化实体)能清晰地看到交易细节,包括转账金额、账户余额更新、合约部署和执行。举一个简单的例子,你可以通过访问任何 ZK Rollup 区块浏览器轻松观察到所有提到的细节。不仅如此,考虑一种情况,集中式序列器某种原因停止服务,另一个 rollup 节点试图恢复 rollup 状态。它将从 DA 层(在大多数情况下是L1 Ethereum)公开发布的L2数据中提取信息,并重建L2状态。在这个过程中,任何能够重播 DA 层存储的L2交易的节点都能恢复关于每个用户账户状态的信息。
因此,“零知识”的术语在当前的 ZK Rollups 中以碎片化的形式实施。虽然这不能被认为是错误的,但很明显,它与“ZK 意味着零知识等同于完全隐私”的普遍认知不同。当前 ZK Rollups 的新颖之处在于利用“简洁性”属性而不是“零知识”,即在链下执行交易,并为验证者生成简洁的证明,以便他们可以快速且可扩展地验证执行的有效性,而无需重新执行它们。
出于这个原因,一些 ZK Rollups,如 Starknet,将自己称为“有效性 Rollups”,以避免混淆,而确保真正 ZK 隐私的其他,如 Aztec,将自己标记为 ZK-ZK rollups。
深入考量 ZK Rollups 的实用性
正如前文提到的,大多数 ZK Rollups 并未完全实现 ZK 隐私。那么,我们的下一个目标是什么?通过在 Rollup 的每个部分全面部署 ZK 来实现完全的交易隐私?事实上,这并不是一个简单的问题。除了需要显著的技术进步以进一步成熟技术外,ZK 在意识形态(例如私人交易的非法使用)和实用性(例如它真的有用吗?)方面仍存在争议问题。鉴于讨论完全交易隐私的道德问题超出了本文的范围,我们将关注区块链项目中遇到的 ZK Rollups 的两个实用性问题。
第 1 点:生成 ZKP 可能是快速确定性的瓶颈
首先让我们讨论 ZK Rollups 本身的实用性。ZK Rollups 最引人注目的卖点是由于其交易的“快速终结”而使资产提取延迟时间缩短,这得益于 ZKP。提高的 TPS 和低交易费用是额外好处。最有效利用 ZK Rollups 特性的领域是游戏行业,因为游戏内货币的存取非常频繁,每秒都会产生大量的游戏内交易。
但 ZK Rollups 真的可以被认为是游戏的最佳技术栈吗?对此,我们需要更深入地思考 ZK Rollups 中的“快速终结”概念。想象一下,一个用户正在享受运行在基于 ZK Rollup 的技术栈的Web3游戏。用户将游戏内物品交易成游戏币,并试图从游戏中提取该资产。
要提取资产,游戏内交易必须被终结。这意味着交易必须被包含在新的 Rollup 状态承诺中,相应的 ZKP 应提交到L1,并且需要等待L1以太坊中证明的终结,以保证交易不可逆转。如果所有这些过程能瞬间发生,那么我们就能实现 ZK Rollups 常被吹嘘的“即时交易确认”,允许用户立即提取资产。
然而,现实远非如此。根据L2 beat 提供的不同 ZK Rollups 的终结时间统计数据,zkSync Era 大约需要 2 小时,Linea 需要 3 小时,而 Starknet 平均需要约 8 小时。这是因为生成一个 ZKP 需要时间,将更多交易包含在一个批次(即单一证明)中以减少交易费用也需要额外时间。换句话说,生成和提交证明的速度是实现 ZK Rollups 快速终结的潜在瓶颈,这可能会降低Web3游戏中的用户体验。
图 5 :ZKP 生成可能是 ZK rollups 快速确定性的潜在瓶颈
来源:imgflip
另一方面,像 Ronin 这样为游戏优化的链(支持如 Pixels 和 Axie Infinity 等Web3游戏)确保了超快终结,同时牺牲了去中心化和安全性。Ronin 不是基于 ZK 或 Rollup 的链:它是一个在 PoA(权威证明)+ DPoS(委托权益证明)共识算法下运行的 EVM 区块链。它根据委托的股份数量选择 22 个验证者,然后这些验证者以 PoA 方式(即仅在 22 个验证者之间的投票过程)生成和验证区块。因此,在 Ronin 上,交易能够迅速完成终结,几乎没有延迟被包含在区块中,并且验证时间很短。在 Shillin 硬分叉后,平均每个交易只需要6 秒钟就能完成终结。Ronin 实现了所有这些,而无需 ZKP。
当然,Ronin 也有缺点。由中心化验证者管理使其相对更容易受到 51% 攻击的威胁。此外,由于它不使用以太坊作为结算层,它无法继承以太坊的安全性。使用跨链桥也存在安全风险。但从用户的角度来看:他们会在意这些吗?当前没有去中心化排序的 ZK Rollups 也存在单点故障(SPOF)问题。以太坊为它们提供了保证,因为它减少了交易回滚的可能性,但如果中心化的序列器或验证者出现故障,ZK Rollups 也会冻结。再次注意,ZK Rollups 中的“ZK”仅用于验证执行正确性的有效性。如果有另一个项目提供相同的功能但更快更便宜,ZK Rollups 可能不再被Web3游戏用户和开发者视为首选技术栈。
第 2 点:发布状态差异是一把双刃剑
另一点是 ZK Rollup 协议实现的实用性。其中,这里我们重点关注状态差异发布,这是在 ZK rollups 中确保数据可用性的方法之一(参见 Unlocking Dencun Upgrade: Unseen Truth of Scaling DA Layers, Jaehyun Ha, 12 Apr 24)。
理解 Rollups 中数据可用性的一个简单方法是想象一个业余登山者证明并记录他攀登珠穆朗玛峰的过程。最简单的方法是从基地营到山顶的每一步都录制成视频。尽管视频文件可能很大,但任何人都可以验证登山者的攀登过程,并可能重播录像。这个比喻可以类比于确保数据可用性的原始交易数据发布方法。Optimistic Rollups 遵循这种方法,以便个别挑战者重播并验证正确的执行,因为无法信任序列器的状态承诺。在 ZK Rollups 中,Polygon zkEVM 和 Scroll 采用这种方法,在L1上以压缩形式存储原始L2交易数据,以便在需要时任何人都可以重播L2交易以恢复 Rollup 的状态。
回到业余登山者的例子,另一种验证方法可能是一位著名的登山者与业余登山者一起攀登珠峰,以向世界证明登山确实完成。由于攀登已经由可信的个人证实,登山者不再需要记录每一步以作记录。只需在起点和山顶拍摄一张照片即可,其他人就会认为登山者已经到达了山顶。这个比喻反映了用于确保数据可用性的状态差异方法。在 ZK Rollups 中,zkSync Era 和 StarkNet 采用这种方法,仅存储L2交易在L1上执行前后的状态差异,以便在必要时任何人都可以从初始状态计算状态差异以恢复 Rollup 的状态。
图 6 :原始交易发布与状态差异发布
来源:Presto 研究
这种状态差异方法无疑在成本上比原始交易数据发布方法有利,因为它可以省去存储中间交易的步骤,从而减少L1的存储成本。尽管这通常不是问题,但这里还是有一个潜在的缺陷:这种方法不允许恢复完整的L2交易历史,这对某些 DApps 可能是一个问题。
以 Compound 这个 DeFi 借贷协议为例,假设它是建立在基于状态差异的 ZK Rollup 技术栈之上的。这些协议需要完整的交易历史以每秒计算供应和借贷利率。但是,如果 ZK Rollup 序列器出现故障,其他 Rollup 节点试图恢复最新状态会发生什么?它可能恢复状态,但利率将被不准确地恢复,因为它只能跟踪批次之间的快照而不是每个中间交易。
结论
本文主要断言,大多数当今的 ZK Rollups 中并不存在“ZK”,在 DApp 中的很多地方,使用 ZKP 和 ZK 程序可能不是最佳选择。ZK 技术可能因被指责而感到无辜,因为它本身并没有什么问题,只是在利用其技术进步的过程中,它可能会带来 DApps 的潜在性能下降。然而,这并不是说 ZK 技术对这个行业毫无用处。当 ZKPs 和 ZK rollups 最终技术成熟时,它们肯定可以提供更好的解决方案来解决区块链三难问题。实际上,目前已有基于 ZK 的项目维护了 ZK 隐私,也有许多类型的 DApps 有效利用了 ZKP 和 ZK 卷积的优势。