以太坊扩容战争中,Optimisticrollups因其EVM高度兼容甚至完全等效,导致该赛道的Arbitrum和Optimism在开发者采用上占据先天优势,其L1到L2无缝移植代码和丰富的开发工具可快速吸引开发者进驻并在平台上部署和创建应用。与之对比,ZK系则更难一些。其技术上固有的特性导致ZKrollups需要定制自己的虚拟机,这意味着项目方需要做更多的工作来「解释」来自EVM的代码甚至是从头开发编写全新代码。不过,目前包括Taiko、Polygon、Linea、Scroll和ZkSyncEra的多个ZKrollups赛道项目均推出了自己的zkEVM实现。作为扩容圣杯,zkEVM对开发者的合约部署体验有至关重要的影响,面对面对琳琅满目的ZKrollups项目,开发者到底该如何选择?本文编译了来自JarrodWatts发布的推文总结,他是Polygon的开发者关系工程师,通过在当前热门的ZKrollups项目上部署智能合约(1个Solidity智能合约和一个NFT合约),对Taiko、Polygon、Linea、Scroll和ZkSyncEra等项目的zkEVM性能进行了实测,比较了其各自的优缺点和L2到L1到账时间,为想要尝试部署二层合约的开发者提供实测指南。ZK-EVM是什么以及我们为何需要它?在解读ZK-EVM是什么之前,先看看为何需要ZK-EVM?ZKRollups为以太坊带来扩展性和高性能,硬币的另一面是,ZKRollups解决方案与EVM(以太坊虚拟机)不兼容,这意味着ZKRollups方案仅能支持执行有限的操作,包括转账、铸币或销毁,并且还得为用户开发钱包等工具。因此,我们需要与EVM兼容的ZKRollups,为此,多家公司都开发了自己的ZK-EVM。ZK-EVM,即零知识EVM,它是一种与零知识证明兼容的以太坊虚拟机实现。ZK-EVM主要功能是对以太坊L2(第2层)上交易进行批量处理,并将该批量交易的「有效性证明」发回至以太坊L1上。通常,zkEVM可以做以太坊主网的一切。它将Solidity或Vyper中人类可读的代码编译成字节码,执行智能合约,并更新区块链状态。构建EVM兼容的ZKRollups的难点在于,以太坊一开始的设计并没有考虑到ZK友好性。这意味着零知识证明需要大量的资源进行计算。其中,某些EVM操作码opcodes尤为「ZK不友好」,这导致各家公司最终设计出的ZK-EVM产品在EVM兼容性上各不相同。opcodes、字节码和EVM分别是什么?科普时间到,操作码(opcodes)、字节码和EVM分别是什么?
首先,EVM是以太坊上智能合约的运行环境。以太坊将所谓的「机器状态」以一种trie树形数据结构进行存储,每执行完一个区块中的交易后,该结构发生变化。EVM是有确定性的,这意味着在任何特定状态上执行一组指令都会产生相同的新状态。根据以太坊开发者文档,一个旧的有效状态(S)+一组新的有效交易(T),以太坊将产生一个新的有效输出状态S'你可以将其看作是国际象棋这样的游戏。以太坊就像是一个棋盘,其中存在不同的游戏状态,在以太坊中,这种状态的可能性则是无限的。棋盘游戏都有自己特定的移动规则(对比以太坊上的交易),并且对哪类棋子执行哪些操作也有特定的限制。游戏玩家采取行动(对比的是用户在以太坊上提交交易),游戏(以太坊)制定和执行规则,从而在每个回合(对应区块时间)后产生一个新的棋盘(以太坊全局)状态。进行以太坊或任何EVM兼容的区块链开发,需要使用Solidity编写智能合约。Solidity是一种高级语言,其目的是人类可读,这样开发者就可以专注于编写代码,而非寄存器、内存地址、调用堆栈等抽象层面的东西。然而,EVM却无法读取Solidity。相反,它只能理解「字节码」(bytecode),这是一种二进制、机器可读的低级代码。在EVM中,「字节码」(bytecode)代表的是一系列EVM「操作码」(opcodes),操作码是程序的低级可读指令,代表的是可在EVM中执行的特定操作。由于Solidity这样的高级语言无法在EVM中被直接执行,因此,我们需要一种方法将智能合约代码从人类可读的Solidity语言操作码字节码,然后由EVM执行,这就是编译器的工作。当使用RemixIDE编译器对Solidity代码编译后,可看到该智能合约转换成的特定的操作码,并查看从该操作码生成的字节码。通过将字节码转译成操作码,从而可获知字节码中包含哪些执行指令。由于对EVM中一些特定操作码进行ZK证明的难度较高,导致市面上出现了不同兼容程度的ZK-EVM,其中,有些ZK-EVM和EVM操作码集完全等效,有些对一些EVM操作码进行了部分修改,还有一种则具有完全不同的字节码。不同类型的ZK-EVM由于一开始以太坊设计并没有考虑到ZK友好性,因此理论上,越接近以太坊设计,生成ZK证明就越困难且耗时。2022年8月,以太坊创始人Vitalik曾发表博文「听Vitalik解读不同类型ZK-EVM的未来」,对不同ZK-EVM进行了分类。在该文中,Vitalik基于EVM兼容性和ZK证明生成时间(性能)两个维度对各类ZK-EVM进行了分类,Vitalik在该图表中罗列了四种(半)类型,目前市面上所有ZK-EVM产品都可被囊括其中。
1,第一种类型的ZK-EVM与以太坊完全等效,它们不会更改以太坊系统的任何部分,更易于生成证明。在这种系统中,ZK证明需要很长时间(几个小时)才能生成。Taiko属于该类型的ZK-EVM。2,第二种类型完全与EVM等效,但更改了一些不同的内部表示形式,比如链状态的存储方式,以加速ZK证明的生成时间。目前,市面上没有这种类型的ZK-EVM;不过,Polygon、Linea和Scroll正在朝这个方向努力。2.5,在类型2和类型3之间,还存在一个类型2.5。这种类型完全与EVM等效,只不过增加了某类操作的Gas成本,以「大幅缩短最坏情况下的证明时间」。目前,市面上没有这种类型的ZK-EVM;不过,一个名为Kakarot的新ZK-EVM项目正在朝这个方面发力。3,类型3几乎与EVM等效,不过等效精确性上做出了一些让步,以进一步缩短证明时间并简化EVM的开发。目前,Polygon、Linea和Scroll属于这一类型。4,类型4相当于ZK-EVM的高级语言,这一类ZK-EVM将智能合约的源代码编译为ZK-SNARK友好的语言,这将会带来更快的证明时间,相应的也会引发不兼容和限制等缺点。目前,zkSyncEra属于这一类型。值得注意的是,将有效性证明发回以太坊L1所需时间就是用户将资金转回L1的时间。如果证明生成需要几个小时,则该用户在这几个小时内无法将资金桥接回L1。实战:Taiko、Polygon、Linea、Scroll和ZkSyncEra开发评测理论知识复习完毕,以下是实战部分。通过在Taiko、Polygon、Linea、Scroll和ZkSyncEra上各自部署了Solidity智能合约和NFT合约,测试每个ZK-EVM的性能和存在的相应缺陷,作者还给出了可用的开发者资源,评估主要从开发者体验以及L2到L1的桥接时间两个维度进行。TaikoZK-EVMTaiko属于类型1ZK-EVM,目前处于测试网阶段。Taiko可准确地处理以太坊的所有行为;使用相同的哈希函数、gas价格和加密算法等。操作过程:部署了一个简单的Solidity智能合约并通过使用ThirdWeb代理部署了一个简单的NFT集合。
类型1ZK-EVM的缺点是,当一切都与以太坊完全相同时(即使在内部),生成证明需要很长时间。这意味着,用户将ETH从TaikoL2桥接回以太坊L1需要几个小时的处理时间(如下所示)。LineaZK-EVMLinea属于类型3ZK-EVM,Linea目前还不能证明所有操作码或预编译;代表的是与以太坊不同的链内部状态,比如使用不同哈希函数。部署的字节码与以太坊相同。此次部署过程几乎无缝,可轻松部署两个智能合约,并与其进行交互。这与以太坊的行为相同;可使用现有工具和钱包部署智能合约、与其交互、铸造NFT等。在撰写本文时,Linea还未上线桥接前端界面。因此,只能直接调用桥接的智能合约函数。Linea文档中显示,ETH的L2到L1桥接通常需要大约15分钟,但此次操作案例中大约花了几个小时。PolygonZK-EVMPolygonZK-EVM属于类型3ZK-EVM,自今年3月底以来已启动主网。PolygonzkEVM在官方文档列出了EVM和zkEVM之间当前的所有差异。在PolygonzkEVM上部署字节码与以太坊相同,这让部署智能合约并与其交互变得非常简单。Vitalik曾表示,「PolygonzkEVM具有独特的设计,他们正在使用ZK验证自己称为zkASM的内部语言」。Polygon工程团队表示,除了改进证明生成和提款时间之外,未来还将尽快完成剩余的预编译,目标是成为Vitalik图表中的类型2。此次部署案例中,zkEVM主网桥接十分顺利;L2->L1桥接过程大约需要1小时。ScrollScroll属于类型3ZK-EVM,目前处于测试网阶段。Scroll也在官方文档中列出了ZK-EVM与以太坊EVM之间的差异。和其他3型ZK-EVM一样,此次部署过程几乎无缝,轻松部署了Solidity智能合约和NFT集合,并进行交互。从L2到L1的桥接资金预计需要「10分钟到几个小时」。
ZkSyncEraZkSyncEra属于类型4ZK-EVM。与其他ZK-EVM完全不同,在ZkSyncEra的zkEVM上部署的智能合约字节码与以太坊不同。这让ZkSyncEra提供一个独特的功能,即对帐户抽象(Accountabstraction)的原生支持,这将带来不同的开发者体验。通常情况下,大多数加密钱包只是标准地址,可以发送和接收资金,并与智能合约互动。有了帐户抽象,加密钱包是定制化的,可以更复杂的方式设计,提供更广泛的功能。此外,该zkEVM仍允许开发者使用相同的高级语言,例如Solidity。虽然ZkSyncEra的ZK-EVM与EVM差异较大,但ZkSyncEra提供了一整套开发者最佳实践和注意事项。此外,开发者需要对开发流程进行一些小调整,以专门针对ZkSyncEra进行构建。比如,在下例中,必须使用自定义zkSync扩展安装和配置Hardhat环境,以生成可以部署到EraZK-EVM的字节码。编译生成了和以太坊完全不同的全新字节码,和以上的ZK-EVM生成的字节码完全不同。值得注意的是,ThirdWeb目前已经上线zkSyncEra,为开发者提供更加方便的部署体验。在这次操作中总共部署了两个智能合约,与它们进行交互,并将资产从L2发回L1。目前,出于安全原因,从ZkSyncEra主网到以太坊L1的提款有24小时的延迟。KakarotZkEvm另一个致力于实现2.5类型ZK-EVM的是KakarotZkEvm,该项目在今年6月获得了包括VitalikButerin和StarkWare在内的多家机构的融资,Kakarot计划于2023年晚些时候发布测试网。结语对于终端用户来说,谁赢得比赛并不重要,因为兼容EVM的ZK解决方案的进展是整个行业的一大胜利。对于各项目方而言,与其说是一场竞赛,不如说是探索不同方法来推进整个行业的进步,Vitalik甚至还有一个「多证明者理论」,其基础前提是,不同的Rollup可以协同工作,从而增强以太坊的整体安全性。归根结底,大家都希望以太坊能够成功。L2扩容转型是Vitalik认为以太坊需要经历的三个技术转型之一。未来将如何发展,我们拭目以待。