ZK Rollups 会是通用智能合约系统的未来吗?关于这个问题的讨论,我们似乎已听到太多。但是,根据我们从运行数百个DApp、数十万用户、数百万笔交易的开放、安全、与 EVM 兼容的 Layer 2 中实践经验来看,ZK Rollups 不会成为通用智能合约系统,至于原因,本文会做详细解释。
我们将 Arbitrum 构建为 Optimistic Rollup (OR) 扩容解决方案,因为我们相信 Optimistic Rollup 是满足用户对安全、去信任、与 EVM 兼容 L2 的现实需求最佳方式。我们选择了 Optimistic Rollup而不是 ZK Rollups,因为 Optimistic Rollup 系统具有固有可扩展性和成本优势;时至今日,如果再让我们做一次选择,答案依然是 Optimistic Rollup,想知道为什么吗?请继续读下去。
内容概要:
1、人们想要一条能够提供安全性、有保证进度、可见性和快速确定性的去信任区块链——他们希望这条区块链上的交易成本更低且能与现有工具兼容。
2、在提供上述服务和功能的时候,与 ZK Rollup 相比,我们深入研究了如何使用Optimistic Rollup的具体细节。
3、Optimistic Rollup 可以以较低的成本提供用户想要的功能,因为构建 ZK Rollup 证明的链下成本非常高。
4、由于 ZK 证明非常昂贵,因此完全参与 ZK 协议可能需要专用硬件和/或大规模并行性,从而使网络变得更加中心化。
5、ZK Rollup所谓的“优势”,要么 Optimistic Rollup 也可以支持,要么需要牺牲重要的安全性或可用性功能。
6、总之,Optimistic Rollup 在操作成本上占据优势,因为执行代码比计算复杂的密码证明要“便宜”得多。
让我们从头开始
首先,肯定要先谈以太坊。以太坊用户创建交易以部署智能合约或与智能合约交互,你可以通过几种不同的方式来考虑以太坊交易。一方面,您可以将其视为不透明的数据区块,但如果你查看数据内容,就会发现一笔交易当然远不止这些;所谓交易,其实应该是一个请求,要求智能合约做某事,比如:记录一些信息,移动一些资产等。
当交易在以太坊区块链上发布时,会发生两件重要的事情——
第一件事:一旦某笔交易被包含在区块链内,以太坊则会根据有序交易集达成共识。
第二件事:以太坊执行这些交易并计算结果状态更新。
Rollups:Optimistic Rollup 和 ZK Rollup都有什么共同点?
如果让每个以太坊节点执行每笔交易,成本势必会非常高,而 Rollups 其实是一类可以显着减轻网络负载的扩展解决方案,交易实际执行并不是在以太坊区块链上完成的,而是转移到 Layer 2(“L2”)上。
但是等一下 – Rollups 应该由以太坊保护,不是吗?的确,这些扩容解决方案的安全性离不开以太坊,这意味着即使交易发生在 Layer 2 上,我们仍然需要以太坊用某种方式来保证交易执行的正确性。那么,以太坊如何才能对 Rollups 状态给予批准呢?
答案就是:证明。Rollups使用专门的证明来向以太坊证明自己的正确性,即使不执行交易,以太坊也可以验证其正确性。
Rollups:Optimistic Rollup 和 ZK Rollup都有什么不同点?
这些“证明”看起来很神奇:允许以太坊在不实际执行交易的情况下验证 Rollups 状态。您可能想知道这些证明是什么样子,以及它们在实践中是如何实现的——而这,就是各种 Rollups 风格与众不同的地方。
ZK Rollups 使用 有效性证明(validity proofs),它依赖于某一方发布简洁的密码证明,这个“证明”可以确定该方知道以特定状态结尾区块链的有效性。也就是说,“提供证明的那一方”需要执行区块链交易才能知道如何构造证明,然后通过一系列复杂的密码操作来构造“证明”。这些“证明”将由 Layer 1 链上合约进行检查。ZK Rollups的“证明”比较简洁,而且验证交易也相对比较便宜,因此可以直接通过以太坊交易来完成。
Optimistic Rollups使用不同类型的证明:欺诈证明(fraud proofs)。顾名思义,Optimistic Rollups 是“积极、乐观 ”的,因为当他们将更新的状态发布到以太坊区块链时,他们根本没有发布任何“证明”。任何人都可以发布一个 Rollup 区块,其中包含关于执行某个交易正确结果的声明,其他节点执行相同交易时,只要不同意第一个节点的主张就可以提出挑战。有效的争议协议可以解决任何分歧,保证正确的一方将赢得挑战。各方有强烈的动机只发布正确的主张,而不是质疑不正确的主张,因此在常见情况下,所有节点都会“简单地”执行所有交易,并且永远不需要调用证明代码——整个过程都由 Layer 1 合约负责管理。
好的,那么哪种类型的 Rollup 更好?在本文的其余部分,我们将在几个维度上比较 ZK Rollup 和 Optimistic Rollup,并解释为什么我们认为未来是属于 Optimistic Rollup 的,而且本质上来看,像 Arbitrum 这样的 Optimistic Rollup 可扩展性显然更好。
Optimistic Rollup vs. ZK Rollup:成本
Optimistic Rollup和 ZK Rollup 之间最重要的一个区别可能就是成本。
Optimistic Rollup 要求节点简单地执行合约,例如,如果合约执行添加操作,则节点执行该添加操作。
相比之下,ZK Rollup 需要生成复杂的密码证明,需要进行成百上千次椭圆曲线运算才能将加法运算包含在证明中,因此成本很高。更重要的是,ZK Rollup 会导致每个合约中的每条指令产生成本,由于需要对每条指令生成复杂的密码证明,而不仅仅是执行指令,因此给 ZK Rollup 带来了一个固有成本劣势——而且是一个很大的劣势。
ZK Rollup的支持者有时会争辩说,该解决方案只需要一方创建“证明”,而Optimistic Rollup 则要求系统有许多节点。但是,如果你正在运行一个规模较大的区块链,无论你使用哪种证明系统,它都会有很多节点。真正的区块链需要很多节点来服务各类活动,比如非变异调用、搜索事件日志、向用户显示交易数据、为用户提供将资金提取回 Layer 1 所需的数据等等。Optimistic Rollup 区块链的安全性依赖于这些节点做他们已经需要做的事情——执行交易并追踪区块链的正确状态。
另一方面,使用 ZK Rollup,就会导出出现昂贵的、基于椭圆曲线的证明,而这会造成非常大的附加成本。为了希望大规模证明 ZK Rollup,要么需要专用硬件设备,要么需要支持大规模并行——或者两者兼而有之,这些都是非常昂贵的。
结论:Optimistic Rollup 系统具有巨大的固有成本优势。
Optimistic Rollup vs. ZK Rollup:EVM 兼容性
我们在构建 Arbitrum时的一个重要考虑因素,就是与以太坊虚拟机(EVM)的兼容性。 Arbitrum 完全兼容 EVM,而且具有相同的 RPC 接口并接受与 EVM 相同的字节码,这意味着为以太坊编写的任何代码都可以在 Arbitrum 上“即插即用”。
Optimistic Rollup已经运行开放的、与 EVM 兼容的区块链(包括测试网)一年多了,我们了解到真正兼容以太坊非常具有挑战性。最初阶段 95% 的兼容性并不太难,但在实践中还不够好,只有付出大量努力和构建不会妨碍产品的架构才能让兼容性表现的更好。
在兼容性方面,ZK Rollup 系统运行的范围很广。但有些人认为 ZK Rollup 是个“老派”工具,因为他们还在鼓励人们学习他们的自定义语言。此外,一些 ZK Rollup 系统并不试图兼容以太坊,当然,对于那些不关心以太坊兼容性的开发人员和用户来说,也不错。
客观上来说,EVM算是有史以来最好的链上工具。我们认为,考虑到已经与 EVM 配合使用的开发人员、代码和开发人员工具的数量,EVM 本身具有非常大的实际优势。考虑一个部署在以太坊上的项目,如果该项目想要扩展到 Rollup,那么开发人员就必须用新语言重写他们的代码、委托新的安全审计、并且维护多个代码库,这些工作不仅繁琐且容易出错。但即使对于尚未编写任何代码的新项目,EVM 兼容性也是非常重要,因为兼容 EVM 意味着这些项目可以充分利用围绕 EVM 存在的代码、工具和人才库。
也一些 ZK Rollup 项目正在努力实现 EVM 兼容版本,但声明含糊不清,我们也不知道迄今为止发布的代码是否允许在 ZK Rollup上运行 EVM 合约,一些系统仍然不具备 EVM 兼容性。举个例子,一个声称与 EVM 兼容的 ZK Rollup 系统真实兼容性并不太好,该系统——
- 未能实现 ADDMOD、SMOD、MULMOD、EXP、SELFDESTRUCT 和 CREATE2 操作码兼容;
- 正在考虑取消对 XOR、AND 和 OR 的支持;
- 不支持标准交易格式;
- 不支持任何预编译;
- 可能会限制交易中的合约调用次数。
似乎看起来 ZK Rollup 模式从根本上就不兼容 EVM,这显然与Optimistic Rollups 实现的完全兼容性有很大差距。
需要澄清的是,目前依然存在多个特定于应用程序的 ZK Rollup 系统示例(比如 Zcash、ZKSync 1.0、Loopring)。事实上,这些系统运行良好,但核心区别在于,它们针对非常适合 ZK Rollup实现的特定应用程序进行了微调和专门优化。虽然有团队声称在研究一种通用编译器,允许以兼容方式“打通” EVM 到 ZK Rollup,但并没有可用公共代码或基准来说明用户定义的 ZK-EVM 合约的证明成本,根据现有掌握的知识和所有公开可用的数据,我们认为这个成本会非常高。
结论:只有 Optimistic Rollups 以最低的成本支持完全的 EVM 兼容性。
Optimistic Rollup vs. ZK Rollup:去信任可见性和压缩
在设计交易套利时,Optimistic Rollups 的关键属性之一是去信任可见性。简而言之,去信任可见性意味着任何人都可以在没有中心化组织帮助的情况下查看或获取区块链的内容。更重要的是,这不仅意味着每个人都可以偶尔看到状态快照——也意味着每个人都可以看到链的完整历史——它是如何达到当前状态的。一个实用的区块链让任何人都可以运行一个节点,同时节点也可以支持非变异调用、搜索事件历史记录并查看每笔交易——无需依赖中心化的数据提供者,而无信任的可见性使这成为可能。
坦率地说,一些 ZK Rollup 系统在可见性方面似乎走了捷径,并试图谈论他们没有提供完整的区块链功能的事实。当您听到谈论“压缩”时,请仔细想想看——他们是不是说他们正在更有效地编码链的内容?(Arbitrum 这样做,并且在我们的 Nitro 版本中会做得更好)或者他们是说区块链历史的某些部分根本不可用,除非中心化数据提供者愿意稍后与您共享?
回想一下,ZK Rollup 证明其实只证明了“证明者”知道的有效链,但“证明”本身不会告诉你那个链是什么,即使你有足够的数据来验证“证明”,可能也没有足够的数据来重建区块链的历史数据。
举个例子,假设 Alice 提交了一笔支付给 Bob 的 1 ETH 交易,很快又出现了 Bob 提交了一笔支付给 Charlie 的 1 ETH 连续交易。接下来,你需要验证一个证明,即:Alice 比以前少了 1 ETH,Bob 的余额没有改变,而 Charlie 比以前多了 1 ETH。
但是发生了什么? Alice 付钱给 Bob 了吗?Bob 付钱给Charlie 了吗?也许是 Alice直接付钱给 Charlie,也许是 Alice 销毁了一个 ETH,而 Charlie 所获得的 1 ETH 是由其他人支付的,也许这个“其他人”名叫 Diana,而不是 Bob。如果我们从区块链中寻找 Bob 的支付证据,但对于一些不提供区块链可见性的 ZK Rollup 来说,根本无法区分并找到 Bob 支付交易。
许多智能合约应用程序所需要的不是仅仅知道几个检查点,而是需要了解整个链条——了解发生了什么以及如何达到最终状态。 ZK Rollups 有时吹嘘比 Optimistic Rollups 更好的“压缩”,但它们隐藏了区块链的数据,这意味着只有“证明者”知道数据不是压缩,它们甚至有可能删除依稀重要数据。如果 ZK 提供者说他们“不需要”发布整条区块链的历史,其实他们真正的意思是他们无法保证区块链的可见性,而放弃区块链可见性保证并不是 Optimistic Rollup 愿意做出的妥协。
结论:Optimistic Rollup 系统能以最低成本提供去信任的可见性。
Optimistic Rollup vs. ZK Rollup:去信任,及时终结
在评估 Rollup 时,我们需要确定一个关键要求,即:Rollup 是否需要提供去信任的、及时的终结。简单来说,这意味着在您提交交易后,你和其他所有人都应该及时且确定地知道该交易的结果,并且没有人能够更改或撤消这个交易。
在我们看来,实现及时终结的最佳方法是将交易的顺序与交易执行分开。排序产生一个最终的提议交易序列,并且尝试按该序列执行交易。如果交易的执行是确定性的,因为它是基于Arbitrum的,那么确定交易的顺序就足以确定结果,因为结果是交易顺序的确定性函数。如果每个人都知道交易的顺序,那么每个人都可以轻松确定结果。
完成一个序列需要将序列发布到 Layer 1 链,并包含足够的信息以允许任何人自己执行交易,以便无需信任地了解结果。理想的汇总是尽可能频繁地将排序的交易数据发布到 Layer 1 链。
在 Optimistic Rollup 系统中,发布到 Layer 1 链的成本最低,实际上 Arbitrum 通常会在每一分钟左右将排序的交易数据发布到 Layer 1 链,为用户提供快速确定性并保证没有人可以撤消他们的交易。此外,Arbitrum 还会每隔一小时左右就产生一个新的Optimistic Rollup 结果主张(Result Assertion),但由于序列已经最终确定并且执行是确定性的,因此完全不会减慢最终确定的速度。
原则上,ZK Rollup 系统也可以按照类似的方式运行;即,将交易的顺序(可以经常发布到 Layer 1)与稍后进行的验证与偶尔的有效性证明分开。然而,与 Optimistic Rollup 系统发布数据一样,以这种方式运行的 ZK Rollup 需要将基本相同的数据发布到 Layer 1 链上,但对于上文中讨论的(所谓)“压缩”技术并不支持这么做。ZK Rollup 为了让“压缩”技术起作用,必须实时证明一系列 Layer 2 交易的有效性,在同一个 Layer 1 交易中,而且每次发布一批 Layer 2 交易时都必须这么做。
因此,虽然所谓的“压缩”技术备受 ZK Rollup 吹捧,但在遇到上述情况时,他们不得不做两个选择:
1) 每分钟左右发布排序交易以及执行证明:这可以保持快速确定性,但需要每分钟在情况链外生成 ZK 证明并在 Layer 1 链上进行验证。根据实施情况,在区块链链上发布 ZK 证明的成本估计在 500,000 到 500 万 gas 之间。
2) 每小时发布排序交易和证明:这种做法虽然可以使 ZK 证明检查成本变得略微合理,但将最终确定时间会延长到一个小时。在用户向 ZK Rollup 运营者提交交易和其发布到情况链上之间的时间里,用户无法保证他们的交易是否会被包括在内,而且只能相信 ZK Rollup 的运营者。
如果你正在构建一个 ZK Rollup 系统,会发现上述两个选项其实都是不可接受的——第一个成本太昂贵,第二个无法提供及时的终结。因此,如果最终会使用相同类型的序列器(sequencer),就需要在 Arbitrum 的 ZK Rollup 版本中发布与我们的 Optimistic Rollup 版本基本相同的数据。
如果您听到有人吹捧 ZK Rollup 可以将数小时的数据压缩为一个点,请不要担心。如果他们只在很长一段时间结束时发布单点数据,那么这意味着他们在这段时间内没有提供最终确定性。
结论:出于实际考虑,ZK Rollup 系统不得不以 Optimistic Rollup 相同的方式处理实时终结。
Optimistic Rollup vs. ZK Rollup:去信任活性
去信任活性意味着任何人都可以迫使系统取得进步。(去信任的安全属性可以确保进度是正确的。)
Optimistic Rollup 允许任何节点声明正确执行交易,提出该声明只需要节点执行链的交易,然后存入一笔可以在协议确认声明后退还的质押即可。
在 ZK Rollup 系统上,进程要求任何节点都可以创建并发布推进区块链状态所需的 ZK 证明,但并不是每个人都可以使用普通硬件和软件就能实现的。因此,如果要完成 ZK 证明就必须构建或购买特定的专用硬件而且还要进行大规模并行计算。即便是在普通设备上,也需要构建合适的ZK证明的路径,不提供此功能或未发布为其系统生成证明的代码的 ZK 提供者就无法提供去信任进程,系统也就没有任何活性保证。也就是说,ZK Rollup 的系统是中心化的,因为只有拥有特殊设备的证明者才能推动进程。(目前尚不清楚领先的 ZK rollup 提供这是否会为普通用户提供可行的证明。)
结论:在 Optimistic Rollup 系统中更容易提供去信任进程。
Optimistic Rollup vs. ZK Rollup:桥接
当然,ZK Rollup 并非一无是处,它在一个领域里具有较大优势,即:以太坊跨链连接。在资金转移到 Layer 1 时,Optimistic Rollup 系统会比预期延迟一周,而 ZK Rollup 允许在 ZK 证明发布到 Layer 1 后立即建立桥接。但从本质上来看,这两种方式其实并没有太大的区别,因为 Optimistic Rollup 也可以让用户快速利用桥接服务,以低延迟将 Layer 2 资金交换为 Layer 1 资金。所以ZK的优势主要是用户可以避免支付跨链桥接服务所收取的小额费用(在价格上具有一定竞争里)。但在实际应用中,Optimistic Rollup 的表现其实也不错,因为目前已经有许多实时快速跨链桥提供从 Arbitrum 的即时提款服务。
需要强调的是,ZK Rollups 的桥接优势其实并不是非常大:因为它只能用于从 Layer 2 桥接回以太坊。曾几何时(大约 2019 年),许多人认为以太坊扩容解决方案不会那么快出现,也许只会有一两个 DApp 缓慢推出。但在实际应用中,Rollup 用户会发现自己需要在 Layer 1 和 Layer 2 之间来回切换,而这其实是 ZK Rollup 无法支持的,相比之下,Arbitrum 拥有一个蓬勃发展的生态系统,数百个 DApp 遍布在 DeFi 领域里的每个角落,许多用户正在连接到 Arbitrum 并长期留在那里。此外,在为用户提供跨链支持方面,Arbitrum 不仅仅支持以太坊,也会和其他 Lauer 1 和侧链对接,对于这种直接桥接,ZK Rollups 的优势就没有 Optimistic Rollups 那么大了。
结论:ZK Rollup 系统在桥接到 Layer 1 方面略有优势,但在快速桥接和多链使用模式下,ZK Rollup 的实际应用并没有预期的那么好。
总结
在全面比较 Optimistic Rollup 与 ZK Rollup 系统之后,我们认为 Optimistic Rollup 系统显然是赢家。Optimistic Rollup 成本更低,与 EVM 和现有工具完全兼容,实践中唯一真正的缺点是在没有快速跨链桥接服务的情况下,Layer 1 的桥接速度较慢。ZK Rollup 的许多假定优势需要牺牲区块链可见性或终结时间,我们认为这不是用户想要的。
不仅如此,ZK Rollup 想要做出改变似乎也不太可能。与 EVM 兼容的合约执行的 ZK 证明仍将比 Optimistic Rollup 执行要昂贵得多,并且 ZK Rollup 也很难实现有保证的进度、区块链可见性和去中心化的要求。如果情况发生变化,我们愿意将 Arbitrum 切换到基于 ZK Rollup 的交易执行,但我们认为它们不会做出优化改变。
最后要说的是,人们倾向于将 Arbitrum 当前提供的内容与 ZK 系统声称他们将在未来提供的内容进行比较,但这种比较其实毫无意义,因为我们要比,就拿现有系统作对比。像 Arbitrum 这样的 Optimistic Rollup 扩容解决方案是唯一支持通用智能合约的开放部署系统。或者,如果要比较未来的系统,那么我们就应该将未来的 Arbitrum与未来的 ZK 系统进行比较。
我们正在不断改进 Arbitrum,举个例子,在我们即将发布的 Nitro 版本里,将会为用户提供更低的交易成本和更好的链上优化无损压缩数据,不仅如此,我们正在不知疲倦地工作以改进交易套利并将成本降低到理论极限。正如我们在这篇文章中所分析的那样,我们相信,当考虑到目前存在的两个系统以及它们各自的理论限制时,Optimistic Rollups 显然是真正的赢家。