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