以太坊 L2 智能合约:Optimistic Rollup | 作者:Karl Floersch | Plasma Group 博客 | Medium

本文详细介绍了乐观汇总(Optimistic Rollup)技术,它是一种在以太坊L2上运行完全通用智能合约(如Solidity)的构建方法,借鉴了Plasma和zkRollup设计,并通过数据可用性预言机实现扩展。文章从原理、实现、应用等方面进行了深入探讨,并提供了详细的流程图和代码示例。

以太坊 L2 智能合约: 乐观汇总

本文概述了乐观汇总:一种利用 OVM 在二层 (L2) 上启用自主智能合约的构建。该构造大量借鉴了 plasma 和 zkRollup 设计,并建立在 Vitalik 描述的 阴影链 上。该构造类似于 plasma,但为了在Layer2 中运行完全通用的智能合约(例如 Solidity),牺牲了一些可扩展性,以Layer1 提供安全保护。 可扩展性与数据可用性预言机的带宽成正比,包括 Eth1、Eth2,甚至 Bitcoin Cash 或 ETC——提供了一种短期可扩展的类似 EVM 的链在 L2 上。

快速概述

让我们首先了解乐观汇总在以太坊主网的端到端工作原理,然后深入研究。

以下是乐观汇总智能合约 Fred 的生命周期记述:

  1. 开发者编写一个名为 Fred 的 Solidity 合约。你好,Fred!
  2. 开发者将交易发送到一个有担保的 聚合器(一个 L2 区块生成者)以部署合约。

    — 任何有担保的人都可以成为聚合器。

    — 同一条链上有多个聚合器。

    — 收费方式由聚合器自行决定(账户抽象 / 元交易)。

    — 开发者获得即时保证,交易将被纳入,否则聚合器会失去其担保。

  3. 聚合器在本地应用交易并计算新的状态根。
  4. 聚合器提交以太坊交易(支付 gas),其中包含交易和状态根(一个乐观汇总区块)。
  5. 如果 任何人 下载区块并发现其无效,可以通过 verify_state_transition(prev_state, block, witness) 证明其无效,该方法会:

    — 斩首恶意聚合器和在无效区块上构建的聚合器。

    — 将聚合器的担保的一部分奖励给证明者。

  6. Fred 智能合约安全、快乐且放心,因为她的部署交易现在是每个有效未来乐观汇总状态的一部分。此外,Fred 还可以被发送到 L2 的主网 ERC20!耶!

就这样!用户和智能合约的行为应该与我们在以太坊主网今天看到的非常相似,除了,它能够扩展!现在让我们探索这一切是如何实现的。

深入乐观汇总

首先,让我们定义创建像以太坊这样的无许可智能合约平台意味着什么。我们必须满足三个属性才能构建这种美丽的状态机:

  1. 可用头状态 — 任何相关方都可以下载当前头状态。
  2. 有效头状态— 头状态是有效的(例如,没有无效的状态转换)。
  3. 活跃头状态 — 任何感兴趣的方都可以提交交易,以转换头状态。

你会注意到以太坊 L1 满足这三个属性,因为我们认为 1) 矿工不会在不可用区块上挖掘,2) 矿工不会在无效区块上挖掘 *;以及 3) 不是所有矿工都会审查交易。然而,它目前并不具备可扩展性。

另一方面,在一些类似的安全假设下,乐观汇总可以在规模上提供这三个保证。要理解构造和安全假设,我们将单独讨论我们希望确保的每个属性。

#1: 可用头状态

乐观汇总使用经典汇总技术(在此概述)来确保当前状态的数据可用性。技术很简单——区块生产者(称为聚合器)通过以太坊主网上的 calldata(即以太坊函数的输入)传递所有包含交易和状态根的区块。然后将 calldata 块进行梅克尔化,并存储一个 32 字节的状态根。作为参考,calldata 每 32 字节为 2000 gas,而存储为 20000 gas。此外,calldata 的 gas 成本将在 伊斯坦布尔硬分叉 中减少近 5 倍。

值得注意的是,我们可以使用以太坊主网以外的数据可用性预言机,包括 Bitcoin Cash 和 Eth2。在 Eth2 阶段 1 中,所有分片都可以作为数据可用性预言机,TPS 与分片数量成线性关系。这种吞吐量足够使我们在耗尽可用数据(例如状态计算)之前遇到其他可扩展性瓶颈。

安全假设

这里我们假设在以太坊主网上有诚实的大多数。此外,如果我们使用 Eth2、ETC 或 Bitcoin Cash,我们同样继承它们的诚实大多数假设。

在这些假设下,使用可信数据可用性预言机发布所有交易,可以确保任何人都能计算当前的头状态,满足属性 #1。

#2: 有效头状态

我们需要确保的下一个属性是有效头状态。在 zkRollup 中,我们使用零知识证明确保有效性。虽然这是一个长期的好解决方案,但目前还无法为任意状态转换创建有效的 zkProof。然而,仍然有希望实现通用的 EVM 风格状态机!我们可以使用类似 plasma / truebit 的加密经济有效性游戏。

加密经济有效性游戏

总体来看,区块提交和有效性游戏如下:

  1. 聚合器提交安全押金来开始生产区块。
  2. 每个区块包含 [access_list, transactions, post_state_root]
  3. 所有区块由有担保的聚合器以先到先得的方式提交到 ROLLUP_CHAIN 合约(或按轮次如有需要)。
  4. 任何人 都可以证明一个区块无效,赢得聚合器的安全押金的一部分

要证明一个区块无效,你必须证明以下三个属性之一:

1. INVALID_BLOCK: 提交的区块是 *无效* 的。
   通过 `is_valid_transition(prev_state, block, witness) => boolean` 计算。
2. SKIPPED_VALID_BLOCK: 提交的区块“跳过”了一个有效的区块。
3. INVALID_PARENT: 提交的区块的父区块无效。

这三个状态转换有效性条件可以可视化为:

从这个状态有效性游戏中产生了一些有趣的属性:

  1. 可插拔有效性检查器:我们可以为 is_valid_transition(…) 定义不同的有效性检查器,使我们能够使用不同的虚拟机运行智能合约,包括 EVM 和 WASM。
  2. 只有一个有效链:区块提交到以太坊上,给予我们交易和区块的总排序。这使我们能够确定性地决定“头”区块,从而要求聚合器在提交新区块之前修剪无效区块。
  3. 分片验证:这个有效性游戏可以在单个 UTXO 的基础上进行。与其使整个区块无效,不如部分取消其有效性——类似于 Plasma Cash。请注意,这需要在单个区块上事先证明所有无效转换。部分区块无效意味着我们只能验证我们关心的合约的 UTXO,以确保我们的状态。要了解更多关于 UTXO 如何使并行性成为可能的内容,请查看这个 Cryptoeconomics.study 的视频!

关于监视塔的说明

L2 采用的一个挑战是增加了对 监视塔 的复杂性。用户合同监视塔在一个已经复杂的系统中增加了另一个实体。值得庆幸的是,监视塔自然受到乐观汇总加密经济有效性游戏的激励!所有数据都是可用的,因此任何运行全节点的人都能获得所有在无效链上构建的聚合器的安全押金。这种风险激励聚合器成为监视塔,验证他们所构建的链——缓解了验证者的困境。

关于 Plasma 的说明

许多 plasma 构造也依赖于加密经济有效性游戏。然而,在 plasma 自主智能合约状态强制执行的能力在没有 zkProof 或 渔民游戏 的情况下,在数据隐瞒攻击(数据可用性问题)中是无法实现的。值得庆幸的是,通过在链上发布计算状态转换所需的最小信息,汇总绕过了数据可用性问题。然而,如果我们想要在每秒数十万(甚至更多)的交易中扩展,plasma 是至关重要的——这在长期是必要的,但在中期许多智能合约中并非必需。

安全假设

  1. 这个加密经济有效性游戏适用于单个诚实或甚至理性的验证者假设。我们可以称之为“理性的”验证者,而非“诚实的”,因为它们可能因挑战游戏而在经济上获得奖励。
  2. 此外,我们假设主网是活跃的,这意味着它不会审查所有试图证明无效的传入交易。请注意,聚合器的解除担保期在某种意义上是关于主网的生存假设(例如,如果我们要求一个月的解除担保期,则必须在一个月内证明无效才能放弃该担保)。

在这些假设下,所有无效块/状态转换将被丢弃,只留下一个单一的有效头状态,满足属性 #2。

#3: 活跃头状态

我们必须满足的最后一个属性是活跃性,通常被称为审查抵抗。确保这一点的关键见解有:

  1. 任何担保金额高于 MINIMUM_BOND_SIZE 的人都可以成为同一汇总链的聚合器。
  2. 由于诚实聚合器可能修剪无效区块,链 不会在无效区块的情况下停止

凭借这两个属性,我们已经获得了活跃性!诚实聚合器总是可以提交绕过无效区块的新块,因此即使只有一个不审查的聚合器,你的交易最终也会通过——与主网类似。

关于活跃性与即时确认的说明

我们非常希望的一个属性是即时确认。通过这种方式,我们可以给予用户他们的交易将在子秒内得到处理的反馈。我们可以通过指定短暂的聚合者垄断区块来实现这一点。缺点是,这牺牲了审查抵抗,因为现在单个方可以在某段时间内进行审查。希望能听到关于这个权衡的任何研究!

安全假设

通过两个安全假设我们获得了活跃性:

  1. 存在一个不审查的聚合器。
  2. 主网以太坊没有审查。

在这些假设下,乐观汇总链能够基于任何有效用户交易前进并改动头状态,满足属性 #3。

现在这三个属性都得到满足,我们在以太坊 L2 中拥有了一个无许可智能合约平台!

可扩展性指标

以下估算是纯粹基于数据可用性。在实践中可能会遇到其他瓶颈,其中之一是状态计算。然而,这确实提供了一个有用的上限。

使用 ETH1 数据可用性的 ERC20 转账

计算基于 这个小的调用数据计算 Python 脚本

请注意,这些 ERC20 转账都是调用数据优化的。此外,乐观汇总的优点是我们不仅仅局限于 ERC20 转账!

ECDSA 签名

~100 TPS 无 EIP 2028

~450 TPS 有 EIP 2028(将在 2019 年 10 月发布)

BLS 签名 / SNARK 签名

~400 TPS 无 EIP 2028

~2000 TPS 有 EIP 2028(将在 2019 年 10 月发布)

使用外部可用性预言机(例如:ETH2,Bitcoin Cash)

~与可用性预言机可处理的吞吐量成线性关系。

这比 2000 TPS 多得多!

乐观汇总与 Plasma

乐观汇总与 Plasma 有许多共同之处。两者都使用聚合器在主网提交区块,通过加密经济有效性游戏确保安全性。唯一的区别在于我们是否有可用性收据来确保区块的可用性。

这两种解决方案之间的相似性允许两种构造之间共享大量基础设施和代码。在一个成熟的 L2 生态系统中,我们很可能会看到汇总、plasma 和状态通道在同一个客户端(一个智能钱包)中协同工作。哦,我提到过 OVM 吗?😁

耶,乐观汇总 🎉

乐观汇总在 L2 构造的空间中占据了一个良好的利基。它在可扩展性、通用智能合约、简便性和安全性之间进行了一些权衡。此外,能够运行安全的智能合约意味着它甚至可以被用于裁定其他 L2 解决方案,如 plasma 和状态通道!

把它称为“L2 的 L1”。

无论如何,够了研究——是时候实现一个健壮、全面且用户友好的以太坊 L2 了!😍

特别感谢 Vitalik Buterin 与我一起探讨这些想法,并提出了这篇文章中的大部分内容。

另外,感谢 Ben Jones 提供了许多建议,以及 Jinglan Wang、Kevin Ho 和 Jesse Walden 的编辑。

更新:向 John Adler 于合并共识的出色和相关工作致敬,该工作可以与乐观汇总进行比较——查看 这里! 加上 这个提案,以提高 Eth1 作为数据可用性预言机的能力——更多的 TPS!

  • 原文链接: medium.com/plasma-group/...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
karl_dot_tech
karl_dot_tech
江湖只有他的大名,没有他的介绍。