ZK-Rollup一直被认为是以太坊扩展的终极目标。然而,尽管它对以太坊的扩展路线图来说是很重要,但在几个关键点上仍然存在不确定性:
-
ZK-Rollup到底是什么?
-
特定于应用程序的Rollup和通用Rollup之间有什么不同?
-
什么是zkEVM Rollup?像EVM等效和EVM兼容这样的术语实际上是什么意思,它们如何应用于Rollup?
-
ZK-Rollup生态系统的当前状态是怎样的,这对项目意味着什么?
如果你是一名希望了解以太坊扩展下一阶段的开发人员,本文将(希望)对你有所帮助。
ZK-Rollup
ZK -Rollup是这样实现的:像STARK或SNARK这样的证明系统允许用亚线性处理来验证线性数量的语句(例如,1000个语句→10个验证者检查,10,000个语句→11个验证者检查)。我们可以使用这个属性来创建可大规模扩展的区块链交易处理上,如下所示:
-
用户将他们的资产锁定在L1上的ZK-Rollup智能合约中;
-
用户将涉及这些资产的交易提交给L2的sequencer,L2的sequencer将它们收集成有序的批次,并为每个批次生成有效性证明(例如 STARK/SNARK)和聚合状态更新;
-
这个状态更新和证明会提交给我们的L1的ZK-Rollup智能合约并进行验证,它会用于更新我们的L1状态;
-
用户可以使用这种L1状态(根据不同的数据可用性机制)来检索他们的资产,从而实现完全的自我托管和“以太坊安全”。
验证证明的gas成本与被验证交易的数量呈次线性关系,与直接使用L1相比,它可以呈现更大的规模。
特定于应用程序的Rollup
到目前为止,所有生产级ZK-Rollup都是我们所说的“特定于应用程序的Rollup”。在特定于应用程序的Rollup中,Rollup支持由Rollup运算符定义的固定数量的“状态转换”(例如交易)。例如:
-
Loopring—支付和交易
-
Immutable —NFT铸造,交易,游戏
-
dydx—永续合约交易
如果你需要解决的是一个项目的需求,那么就可以通过特定于应用程序的Rollup来满足,你的用例可能会获得更好的性能、更好的用户体验和更好的价格,因为它们缺乏通用性是一个巨大的优势。例如,在Immutable,我们可以通过补贴免费的NFT铸造,在NFT交易中收取一定的费用来取消gas费用——这种权衡之所以可能是因为Rollup状态转换的可预测性。
然而,许多项目希望能够创建自己的自定义逻辑和智能合约,独立于Rollup的运营商,这在特定于应用程序的Rollup中是不可能的。此外,许多DeFi项目需要“可组合性”,或需要有与其他项目交互的能力(例如,许多DeFi项目使用Uniswap作为价格预言机)。只有当你的Rollup不仅支持自定义代码,而且支持任何用户都可以部署的原生智能合约时,可组合性才有可能实现。为了实现这一点,我们需要修改ZK-Rollup的体系结构,以囊括每个组件。
为了提高灵活性,需要做一些考虑和权衡:性能大幅下降、Rollup参数的可自定义性降低和费用增加。然而,其最大的缺点是没有实现通用ZK-Rollup。但这种情况已经开始改变:
-
StarkNet目前在主网上(尽管处于Alpha 阶段)。
-
3个独立的项目(zkSync, Polygon Hermez/zkEVM和Scroll)都在ETH CC 2022上宣布,它们将成为第一个到达主网的“zkEVM”。
这些公告是值得深入研究的,因为这些团队不仅宣布了通用Rollup,他们还宣布了“zkEVM”。随之而来的是Twitter上关于“EVM兼容性”、“EVM等效性”、“真正的zkEVM”以及哪种方法更好的争论。对于应用程序开发人员来说,这些争论常常是噪音——所以本文的目的是分析这些术语、设计决策和理念,并解释它们对开发人员的实际影响。
什么是EVM?
以太坊虚拟机是执行以太坊交易的运行环境,最初在以太坊黄皮书中定义,后来被一系列以太坊改进提案(eip)修改。它由以下部分组成:
-
用于执行程序的标准“机器”,每个交易都有易失的“内存”,交易可以写入的持久“存储”和一个可操作的“堆栈”。
-
在这个机器中执行状态转换的140个定价“操作码”。
虚拟机的一些操作码示例:
-
堆栈操作:PUSH1(向堆栈中添加内容)
-
算术操作:ADD(加数字),SUBTRACT