在过去的40年里,计算机科学家发明了多种算法来安全高效地生成ZKP,其中许多算法属于两大类:可扩展的透明知识论证(STARKs)或简洁的非交互式知识论证(SNARKs)。这些算法是为大范围用例开发的,包括核裁军(消除和减少核武器的行为)、身份认证系统,以及最近可扩展的公共区块链和加密货币。特别是在以太坊上,许多开发人员认为ZKP是扩展的「圣杯」,因为与其他加密方案相比,ZKP具有简洁和易于验证的特点。难以构建或破解但易于验证是密码协议开发人员的共同目标,因为这样它就可以被广泛而有效地使用。
零知识系统很难被推广和应用于证明任意复杂性的代码,构建ZKP以本地支持和证明以太坊区块链上所有类型的交易活动一直是开发人员在过去几年中进行的一项持续研究计划。直到2021年11月,Starkware才推出了第一个用于证明基于以太坊交易的通用ZK系统,这是通过Starkware团队创建的自定义编程语言Cairo实现的。然而在2022年7月,三种不同基于以太坊的L2协议包括zkSync、Polygon和Scroll宣布在利用ZKP以zkEVM的形式扩展以太坊方面取得了突破。
注意:虽然通俗地称为zkEVM,但这些虚拟机并没有利用ZKP的隐私优势,而是完全受益于ZKP的安全和效率优势。因此,这些类型的虚拟机更准确的名称是有效性证明生成EVM,但在本报告中,它们将使用更流行的名称zkEVM。
本报告旨在让读者熟悉zkEVM的一般概念,并了解其在以太坊开发中的各种实现方式。由于zkEVM是一个比较抽象的主题,本报告首先简要概述以太坊网络的现状,并通过介绍区块生产、EVM和Rullups等核心概念为理解zkEVM奠定基础。然后,我们将总结以太坊上可以存在的不同类型的zkEVM,并比较目前生产中的5种主要zkEVM实现。我们将重点介绍这项新兴技术在实施中面临的挑战,以及我们对zkEVM随时间推移的竞争格局的展望。总体而言,zkEVM仍处于以太坊开发和采用的早期阶段。
在深入研究zkEVM的复杂性之前,首先要从高层次理解交易是如何包含在以太坊区块中的。
当用户向以太坊提交新交易时,连接到网络的计算机(也称为节点)将交易存储在称为内存池的本地数据结构中。内存池负责维护未确认交易的列表,然后随机选择运行节点和抵押32ETH的验证者,通过它们将内存池中的交易批量处理成块。选择将新区块添加到以太坊区块链的验证者有时被称为「提议者」。为了从最大可提取价值MEV中获得额外奖励,一些提议者在构建区块时将依赖第三方区块构建器而不是本地内存池。
区块按顺序排列,并通过父块(前一个区块头)链接在一起。每个区块都包含其父块的哈希值,并通过将区块链接在一起形成区块链数据结构。通过父块哈希链接块如下图所示:
在2022年9月15日之前,以太坊依赖工作量证明PoW共识机制,矿工代替验证者负责区块生产,矿工无需抵押大量资本,而是需要消耗大量电力来处理用户交易。
在PoW和PoS共识协议下,以太坊区块链缺乏可扩展性的根源在于有限的区块空间。区块空间在以太坊上以Gas为限制单位。需要更多计算工作才能执行的交易通常以较高的Gas单位定价,而具有较低计算成本(即较少资源密集型)的交易具有较低的Gas成本。Gas通过以太坊网络自动设置称为基本费用的动态Gas费率转换为ETH。以太坊协议限制了区块空间,它们最多只能包含3000万单位的Gas。这个最大区块gas限制确保了快速的区块传播时间并降低了硬分叉的风险。
一旦交易被包含在以太坊上的一个区块中,它们就会通过称为以太坊虚拟机(EVM)的自定义运行环境执行。EVM旨在在以太坊上部署任意复杂度的代码,这是使以太坊成为通用区块链的根本,有时也称为图灵完备系统。
EVM执行交易的方式存在一定规则。首先,EVM将人类可读的编程语言(如Solidity和Yul)编译为面向机器或「低级」语言,称为EVM字节码。然后,EVM将字节码解析为称为「操作码」的顺序指令列表。每个操作码命令EVM执行不同的任务,并以十六进制形式在EVM字节码中表示。例如,在链上执行智能合约时命令EVM保留瞬态数据的操作码以助记符表示为「MSTORE」,或以十六进制形式表示为「0x52」。为了帮助读者概念化操作码,以下是以太坊黄皮书中定义的简单操作码:
多年来,以太坊开发人员向EVM不断添加新的操作码,他们还添加了预编译,使用户能够在网络上执行更高级的操作,例如哈希函数和标量乘法。作为同类中的第一个运行环境,EVM已被广泛用作通用公共区块链上智能合约部署的标准。然而,作为同类技术中的第一项,EVM确实存在设计限制,其中与本报告最相关的是EVM缺乏与ZKP的兼容性。
为了提高以太坊的可扩展性,有一些L2网络将交易执行从基础层抽象到Rollups。Rollups压缩交易数据,使得将一批交易提交到基础层所需的区块空间量明显低于通过链上的内存池单独确认这些交易所需要的区块空间。Rollups由被称为「排序器」的网络运营商运营,而不是验证者或矿工。排序器负责验证Rollups的状态转换。它们是将用户交易打包成一个Rollups批次,然后将这批交易的证明提交给以太坊基础层的实体。下图说明了排序器在Rollups中的作用:
Rollups不同于以太坊上的其他扩展解决方案,例如Plasma和状态通道。在以太坊的历史进程中,核心开发人员已经研究并废弃了以太坊的可扩展性路线图。Rollups有两种主要类型:OptimisticRollups和ZKRollups。OptimisticRollups依赖于欺诈证明,这意味着L2网络状态的更改会在没有直接证明其有效性的情况下部署到以太坊。只要至少有一个诚实参与者在观察OptimisticRollup的状态转换,就可以检测并取消无效的状态转换。就Arbitrum和Optimism而言,可以提交欺诈证明的「挑战窗口」持续一周。一旦挑战窗口结束,optimisticRollup的状态转换就被认为是最终的和有效的。
另一方面,ZKRollups依赖于ZKP,每次在L2上处理交易批次时,ZKP都会生成有效性证明,并发布到以太坊。自动生成所有交易批次的有效性证明同时也增加了ZKRollup的安全保障。这也意味着每次向以太坊提交新的有效性证明时都可以从ZKRollups中提取资金,而对于optimisticRollups来说,为了允许争议和欺诈证明的生成,通常需要大约7天的等待期。ZKRollups还提供了比optimisticRollups更好用的数据压缩功能。下表总结了optimistic和ZKRollup之间的差异:
OptimisticRollup相对于ZKRollups的主要优势是OptimisticRollup的虚拟机与EVM的虚拟机几乎相同。目前在以太坊上运行的OptimisticRollup实现,如Optimism和Arbitrum,模拟了与以太坊相同的交易执行环境,分别称为OVM和AVM。大多数ZKRollups都是为某些应用程序特定的,这意味着它们不支持所有类型的基于以太坊的交易和DApp。Loopring、StarkExRollups和zkSync1.0是特定应用程序ZKRollups的示例,它们支持特定类型的支付、代币交易和NFT铸币。
StarkNet等某些ZKRollups是通用的,这意味着它们支持所有类型的交易和DApp。然而,这些ZKRollup要求DApp开发人员学习如何在新的自定义执行环境中执行他们的智能合约代码,通常该环境针对生成ZKP而优化,而不是EVM兼容性。鉴于现有的去中心化应用程序和用户难以加入新的执行环境,这对在以太坊上采用ZKRollups提出了挑战。为了克服这个问题,PolygonHermez、zkSync和Scroll等ZKRollups项目正在致力于实现与EVM兼容的ZKRollups,另外,EVM是以太坊上所有智能合约代码的原生执行环境。
在实践中,Rollups不仅根据链上发布的证明类型(optimisticRollup中的欺诈证明或ZKRollups中的有效性证明)进行区分,还根据Rollups的数据可用性策略和证明算法进行区分。
目前存在两大类有效性证明,称为SNARKs和STARKs。
以上就是万字详解zkEVM:以太坊可扩展性的未来的全部内容,望能这篇万字详解zkEVM:以太坊可扩展性的未来可以帮助您解决问题,能够解决大家的实际问题是非常好学习网一直努力的方向和目标。