原文:《Rollups Aren't Real》by Jon Charbonneau

翻译:Franci, ECN

引介

Kelvin 认为 ZK-rollup 是假的,但我认为任何 "rollup" 都不是真的,至少现在不是。那么,我们如何使它们成为真正的 rollup?

2万字深度技术文:为什么现在没有真正意义上的Rollup?

目前的 rollup 基本上都是需信任且需许可的:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

来源: L2 Beat

在本文中,我会对以下几个方面进行概述:

  • 强制交易打包机制 —— 即便出现 rollup 运营者审查用户的情况,用户也应该能够强制打包其交易,以实现抗审查。
  • L2 定序器去中心化和 (可选) 本地共识 —— 单一型定序器、PoA、PoS 领导者选举、PoS 共识、MEV 拍卖、基于基础层的 rollup、PoE,等等。
  • 共享定序器和跨链原子性 —— 这是真正有趣和完全新的东西。
  • MEV 可捕获设计 —— 我将简要地介绍 FCFS (先到先服务) 的一些变化。对于加密的交易池,你可以参考我最近的帖子。

许多其他提高 rollup 安全性的要求将不在本文的讨论范围内 (比如减少升级密钥的权力、实现强健的和无需许可的证明,等等)。

Rollup 的工作原理

智能合约 Rollup (SCR)

首先,简单复习一下 SCR 的工作原理,这是我们当前在以太坊上常见的 rollup。从高层次来说,一个 SCR 基本上包括:

1. 一批有序的输入数组(在L1上,所以交易数据必须在 DA 层发布)。

2. (rollup 节点软件)在它们上面运行的代码。

3. 对这些输入运行函数产生的确定性输出(rollup 区块链)。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

cr:How Rollups *actually* work - Kelvin Fichter

更具体地说,传统的定序器通过向其在 L1 的智能合约发布 rollup 区块的状态根和 calldata(最终以 data blob的形式)来对 rollup 区块生成承诺。新的区块不断扩展 rollup 对区块头。链上合约运行一个 rollup 的轻客户端,将其区块头的哈希值保存起来。在收到有效性证明后,或在欺诈证明窗口期过后,该智能合约就会敲定结算。如果一个未被敲定的 ORU 区块无效,它(以及所有后续的区块)会因为欺诈证明对提交而被回滚,最后成为孤块。证明帮助保护桥接:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

交易 batch 的提交应该需要应用某种类型的保证金/押金规则,以抑制恶意行为的发生。例如,当一个欺诈性的 batch 被提交了 (即无效的状态根),押金将被销毁,并按某种比例分给欺诈挑战者。

SCR 具有“合并的共识”- 即可在链上验证的共识协议。Rollup 协议可以完全在 L1 智能合约中运行。它不影响主链的任意共识规则,也不需要这些规则的支持。

去中心化共识协议通常包括四个主要特征(注意,以下是一个非常简化的版本,并没有完全列出共识协议的各种类型。比如无领导协议):

1. 区块有效性函数- 状态转换函数。区块有效性在链下执行,然后通过有效性证明或者欺诈证明机制来证明其有效性。

2. 分叉选择规则- 如何在两条原本有效的链之间选择。Rollup 旨在从构造上实现无分叉,所以不严格要求有一个复杂的分叉选择规则。

3. 领导者选举算法- 选出一位领导者,ta 可以通过添加新区块以扩展链头,从而使区块链不断延伸。

4. 抗女巫机制- PoW、PoS 等

可以认为 1 和 2 已经实现了,那么对于去中心化一个定序器的最低要求便是某种形式的抗女巫攻击 + 领导者选举。Fuel Labs 一直都是这个阵营的支持者,他们认为 PoS:

  • 不应该用于 rollup 中的完全共识协议 (即 rollup 验证者/定序者将对区块进行投票)
  • 应该只用于 rollup 中的领导者选举

当然,也有其他论据很好地反驳了 Fuel Labs 的观点,认为需要有 L2 本地共识。稍后会有更多关于这方面的内容。

主权 Rollup (SR)

SR 仍然将交易数据发布到 L1 上用于 DA 和共识,但 SR 会在 rollup 中处理 “结算” 客户端 (James Prestwich 说叫“结算层”显得很蠢,我本来就已经很蠢了,所以无所谓) 。DA 层告诉你数据是存在的,但是它不会定义 rollup 的规范链 (canonical chain) 是哪一条:

  • SCR- rollup 规范链由 L1 智能合约决定
  • SR- 没有 L1 智能合约来决定 rollup 规范链。Rollup 主链可以由 rollup 节点自己决定 (检查 L1 DA,然后在本地验证分叉选择规则)。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

来源:Celestia

相关说明:有人提出一个有趣的观点,即不存在全球规范链 (只有决定哪条链为规范链的桥接),对此有人提出有力的反驳。以及其他相关长推,阐述了 rollup 在主权性和 (自动) 可组合性之间的权衡。我鼓励大家浏览一下这些观点,还有最近这条关于 Bitcoin 主权 rollup 的长推。

在任何情况下,上述所讨论到的 “规范链” 框架都很容易理解,并且这不是本文的重点,所以我还是会继续使用 “规范链” 这个术语。有关 rollup 一般架构的更多背景,请参考此处。

去中心化定序器

用户发起的强制交易打包

智能合约 Rollup

如上所述,定序器通常负责批处理交易并将它们发布到 L1 智能合约。但是,用户也可以自己直接在合约中插入一些交易:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

当然,这是低效且昂贵的,所以定序器将负责批处理交易,并在常规的过程中一起提交这些 batch。这将在许多交易中摊销固定成本,从而实现更好的压缩:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

定序器承诺最终在 L1 上发布这些交易,同时我们可以计算输出,以获得更软的预确认 (softer pre-confirmation):

2万字深度技术文:为什么现在没有真正意义上的Rollup?

当定序器将这些交易发布到 L1 时,输出被敲定:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

通常情况下,用户只会在从 L1 桥接资产到 L2 时需要自己提交交易。这被添加为 L1 合约的输入,它告诉 L2 可以铸造由相应 L1 锁定资产支持的资金了。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

如果我想把我的钱提回 L1,我可以在 L2 上销毁它,并告诉 L1 把我的钱还给我。L1 不知道 L2发生了什么 (L1 并没有执行这些交易),所以需要在请求解锁我在 L1 上的资金的同时提交一份证明。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

因为我来自 L2,所以定序器可以发起这个提款请求并提交给 L1。然而,这样做的话就说明需要信任 L2 定序器的抗审查能力 (CR, censorship resistance),也就是说不再获得 L1 的同样安全保证。也许这些定序器不喜欢你,或者定序器宕机了,所以你只能永远卡在 L2 上了。

Rollup 可以通过多种措施在本地提高自己的 CR。这可能包括具有高价值质押的 L2 共识集、一些交易打包列表的各种变体,添加阈值加密等等,以最大限度地减少 L2 用户审查的可能性。这些都很棒,但理想情况下,我们还是希望 L2 用户拥有与 L1 相同的抗审查保证。

如果用户正在被审查,他们需要一些方法来强制退出 rollup 或者强制将他们的交易打包到 L2 中。这就是为什么 L2 用户应该保留做一些事情的能力,比如自己可以强制将他们的 L2 交易直接包含到 L1 合约中。例如,被审查的用户可能能够直接向 L1 提交单个操作的 batch。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

来源:Starknet 逃生舱口研究

但是,如果 L2 用户的唯一选择是将交易直接强制包含到 L1 中,这并不理想。这对于许多低价值用户来说可能是不可行的,特别是当 L1 的交互成本越来越高时。更高级的设计可能能够绕过这个限制,在 rollup 之间强制进行原子交易。Kalman Lajkó正在研究一个迷人的设计,强烈推荐大家阅读。它希望在具有共享证明和共享 DA 层的系统中启用跨 rollup 强制交易打包。

主权 Rollup

强制打包在 SR 中的运作不同,因为如前所述,它们执行的分叉选择规则与 SCR 不同(Sovereign Labs 写了一篇关于这方面的帖子)。

在 SCR 中,L1 智能合约执行 rollup 的分叉选择规则。除了验证 ZK 证明之外,它还检查该证明是否建立在之前的证明 (而不是其他的证明分叉) 之上,以及它是否处理了所有在 L1 上发送的相关强制打包交易。

SR 可以将它的 ZK 证明发布到 L1 DA 层,以 calldata/blobs 的形式向所有人公开 (即使 L1 没有验证它们)。然后,只需添加一个规则,即新证明只有建立在前一个有效证明的基础上才有效。该规则可以在客户端强制执行,但它随后会要求用户扫描链的历史,直至创世区块或者某个检查点。

而另一种方式是,可以将 calldata 与 L1 区块头联系起来,并且可以添加一个声明 “我已经扫描了 DA 层的证明 (从区块 X 开始,到区块 Y 结束),并且这个证明基于最新的有效证明构建”。这在证明中直接证明了分叉选择规则,而不需要在客户端强制执行。

由于已经扫描了证明,同时还可以证明已经扫描了任何强制打包交易。任何人都可以在愿意的时候直接将强制打包交易发布到 L1 DA 层。

交易敲定的层级 & ZK 用于快速敲定

以太坊上的链上证明验证通常非常昂贵,因此目前的 ZKR (如 StarkEx) 倾向于每隔几个小时才向以太坊发布一次 STARK。相对于交易的数量,证明的增长往往非常缓慢,因此这样对交易生成 batch 可以有效地节省成本。然而,这么长的敲定时间并不理想。

如果一个 rollup 只是在链上发布状态差异 (而不是完整的交易数据),那么即使是全节点也不能在没有证明的情况下确保这种最终确定性。如果 rollup 的完整交易数据被发布到链上,那么至少任意全节点都可以与 L1 一起敲定交易。

通常情况下,轻节点只依赖于中心化的定序器进行软确认。然而,ZKR 可以在 p2p 层快速生成并分发 ZK 证明,以便所有轻客户端实时查看,并以 L1 速度为它们提供最终确定性。稍后,这些证明可以递归地批处理并发布到 L1。

这就是Sovereign Labs 计划要做的,还有其他类似方案,比如Scroll 计划在链上发布中间的 ZK 证明 (但不验证它们),因此轻客户端可以相当快地同步。使用这两种结构,rollup 可以以L1的速度开始敲定区块,而不是等待将 batch 发送上链以节省开销。但是请注意,在这两种情况下只是将“硬敲定时间”降低到绝对最小值 (L1 速度)。

不同的定序器设计永远不会比 L1 区块时间更快地敲定。不同的定序器设计所能做的最好的事情就是提供比 L1 区块时间更快的预确认,不同设计提供的确定性水平不同 (例如,你可能会相信具有高价值质押的去中心化共识集的 L2 的预确认,而不是相信单一型需信任的定序器的预确认)。

Patrick McCorry最近也对rollup 交易最终确定性的层级进行了很好的概述。现在你可能已经明白了基本的概念:

交易“最终确定性”具有不同的层级,这取决于谁提供了承诺 (以及 rollup 结构是怎么样的)

不同的参与者在给定的时间会对 “真相” 有不同的认知水平 (例如,L2 轻客户端、全节点和L1 智能合约将在不同的时间了解相同的“真相”)

  • 单一型定序器

目前,大多数 rollup 都有一个需许可的定序器来提交交易 batch。这是非常高效的,但实时活性和抗审查能力都较弱。如果有适当的保障措施,这对许多用例来说可能是可以接受的:

  • CR— 如上所述,用户强制打包交易的机制。
  • 活性— 如果一些主要的定序器宕机了,所具备的一些热备份选项 (类似 ZKR 证明器和 ORU 欺诈证明的备份应该是无许可的)。如果备用定序器也宕机了,任何人都可以顶上。

例如,备用定序器可以由 rollup 的治理选出。通过这种设置,用户获得了安全性、抗审查和活性。即使从长远来看,单个活跃型的定序器也可能是一个可行的选择。

Base 很可能是一种趋势的开始。公司现在可以管理和优化他们的产品,就像他们对企业区块链的炒作一样,但现在它实际上可以成为一个无需许可的、安全的和可互操作的链。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

Base 打算最终去中心化他们的定序器集,但关键是他们并不严格地 “需要” 去中心化,而其他方案并不是 (或者只需要非常有限范围内的去中心化,如一个小规模的定序器集)。需要明确的是,这需要 rollup 来实现必要的步骤,来确保 rollup 是安全的且维护抗审查性 (移除任意的即时升级功能、实现健壮的证明、强制交易打包、MEV 拍卖等)。而当前的 rollup 并不安全。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

这将是对中心化/托管产品的巨大改进,而不是最大限度地取代去中心化产品。Rollup 只是扩展了设计空间。这在很大程度上也是为什么定序器去中心化并不是大多数 rollup 团队的首要任务 —— 对于确保用户安全、抗审查性和减少对 rollup 运营者的信任,其他项要重要得多。

然而,如果用户/其他方需要介入以维持活性和 “实时抗审查性” (不同于通过 L1 进行强制打包交易获取的 “最终抗审查性”),这仍然不是理想的。基于强制打包交易机制,低价值用户介入可能成本高昂或不切实际。高度偏好实时抗审查和活性最大保证的 rolllup 将寻求去中心化。在运营单一许可型定序器时,也可能存在监管方面的考虑。

  • 权威证明 (PoA)

对单一型定序器的一个直接改进是允许实现分布在不同地理位置的少数定序器 (可能是其他声誉良好的公司)。定序器可以简单地以轮流的方式平均轮换。让他们交纳保证金将有助于激励诚实的行为。

这个一般概念大家应该不陌生 — 多签桥接通常有一些受信任的公司,或者类似于服务于Arbitrum 的 AnyTrust DA的委员会。但重要的是,定序器在这里的权力要小得多 (用户不依赖于 rollup 定序器来确保安全,不像多签桥接运营者可以提取锁定的资金)。总的来说,比起单一型定序器,这种方案具有更好的抗审查性和活性,但仍然不完善。

  • 定序器拍卖 a.k.a. MEV 拍卖 (MEVA)

与其根据质押份额来分配定序器的权利,rollup 也可以通过智能合约直接运行MEV拍卖(MEVA)。任何人都可以竞标排序交易权,拍卖合约将排序权授予出价最高者。这可以针对每个区块进行,也可以针对一段时间 (例如,竞标第二天的排序权)。获胜的定序者仍应交纳一定的保证金,以便在他们出现问题/恶意行为时可以对他们进行处罚。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

来源:ZK Rollups 的去中心化

在实践中,如果拍卖没有直接嵌入到协议中,则自然会导致协议外的 MEVA。如果排序权是基于质押权重来确定的,某种形式的 MEV-Boost/PBS 类型的拍卖系统将会出现,类似于我们今天在 L1 以太坊上看到的。在这种情况下,费用/MEV 可能会流向质押者。如果拍卖被纳入协议,那么费用/MEV 可能会进入某种形式的 rollup DAO 财库 (尽管在两种情况下它也可以被分配、销毁等等)。

  • 领导者选举的无需许可 PoS

任何人都可以作为定序者无需许可地加入,但前提是必须质押 (可能是 L2 的原生代币)。质押机制可以通过智能合约在基础层建立,也可以直接在 rollup 中建立。Rollup 可以使用这个 PoS + 某种形式的链上随机性,以此实现领导者选择机制 (像一些 L1 做的那样)。

任何人获得区块排序权的概率 = ta 的质押占总质押的比例。可以通过丢失奖励、怠工惩罚和罚没对错误/恶意定序器施加惩罚。

请注意,由于上述原因,这不要求定序器达成共识。Rollup 使用 L1 作为共识,因此不需要本地共识 (local consensus)。质押权重在轮换机制中起主导作用,决定了哪些定序器可以提议区块,但他们不需要对其他定序器提议的区块进行投票。

这可以给任意长度的 epoch 授予排序权。某个参与者可能有权为 100 个连续的 rollup 区块排序,或者 1000 个,等等。更长的周期可能效率更高,并且在给定的时间里只需要一个定序器。然而,给扩展的垄断者授权也会带来其他外部效应。或者,领导者可以像普通 L1 那样交替使用每个区块。

Dymension

Dymension就是这样一个项目。Dymension Hub 将是 Cosmos 中典型的使用诚实大多数 PoS 机制的 L1。它的 L2 (“RollApp”) 将使用它来结算和达成共识,同时依赖 Celestia 作为数据可用性存储 (因此这些 L2 实际上是 “optimistic chain” 而不是 “rollup”)。

根据他们的Litepaper,去中心化的 RollApp 排序将需要质押 DYM (Dymension 的原生资产) 在 Dymension Hub 中。领导者选举由相应的 DYM 质押数量决定。这些定序器将从各自的 rollup 中获得收入 (费用和其他 MEV),然后向 Dymension Hub 和 Celestia 支付相关的基础成本。

由于这种机制,几乎所有在这个堆栈中捕获的价值都会直接累积到 DYM 代币中。而如果把自己的原生代币用于排序的 rollup (如 StarkNet 打算使用 STRK 所做的那样,下文会介绍) 会将价值累积到他们自己的代币中。Dymension Hub 的设置类似于以太坊 rollup 只能使用 ETH 进行定序者选举。

在我看来,这极大地降低了在这样的结算层上部署 L2 的动机。大多数 L2 团队自然希望他们自己的代币能够积累有意义的价值 (而不仅仅是用作费用代币,就像这里可能的那样)。毕竟他们是在经营一个企业。

  • 领导者选举 & L2 共识的无需许可 PoS

如果需要,也可以在 L1 敲定之前将 L2 质押用在定序器选举和 L2 本地共识上。

  • PoS 定序器领导者选举— 如上所述,某种形式的领导者选举是必要的。
  • PoS 共识— 激励 L2 验证者在交易被 L1 敲定之前达成临时的 L2 共识,提供更强的预确认。如上所述,这点不严格要求,但它是一个有吸引力的选择。

此外,STRK 可以以某种形式用于:

DA 的 PoS 共识 —用来激励提供替代性的 DA 链 (alt-DA, 比如 volition),这需要单独的共识。

证明 —激励证明者生成 STARK。

交易流程如下:

1. 定序— 定序器排序交易并提议一个区块

2. L2 共识— StarkNet 共识协议对已提议的区块签名

3. 证明生成— 证明者为已达成共识的区块生成证明

4. L1 状态更新— 向 L1 提交证明以更新状态

2万字深度技术文:为什么现在没有真正意义上的Rollup?

有关 StarkNet 计划的更多细节,可以参考这个系列文章。

  • 需要 L2 共识吗, 还是只需要 L1 共识?

正如我们所看到的,L2 可能实现也可能不实现它自己的本地共识 (即,L2 验证者在将其区块发送给 L1 以获得最终共识之前对它们进行签名)。比方说,L1 智能合约可以基于自己设的规则做不同的反应:

  • 使用领导者选举和本地共识的 PoS— “我只接受 L2 共识签名过的区块。”
  • 使用领导者选举的 PoS — “目前只有选定的定序器能够提交区块。”

如果 rollup 没有本地共识,需要做的就是:

  1. 使 rollup 区块提议过程无需许可。
  2. 创建一些标准,为给定的区块高度选择最佳的区块
  3. 让节点或结算合约强制执行分叉选择规则
  4. 继承 L1 的共识和最终确定性

注意,不管是哪种情况,L2 的价值都可以累积到 rollup 代币中。即使 L2 代币只是用于某种形式的领导者选举 (而不是共识投票),排序权产生的价值仍然会累积到 L2 代币中。

L2 共识的缺点 (只有领导者选举)

现在让我们来讨论在 L1 敲定之前具有/不具有本地共识之间的权衡。

Fuel Labs 团队提出的一个论点是,L2 本地共识会降低抗审查能力。“这使得大多数验证者可以审查新区块,这意味着用户资金可能会被冻结。Rollup 不需要 PoS 来守护,因为 rollup 是由以太坊保护的。”这里是一个有点灰色的区域。如前所述,即使定序器出现审查交易的情况,rollup 仍然可以提供抗审查方案 (例如,直接强制交易打包进入 L1,或更复杂的设计,如Kalman Lajkó正在研究的那个)。

另一种说法是,完全的共识只是"效率低下"。例如:

  • 一次只有单个定序领导者在单个盒子中运行所有东西,
  • 一次只有单个定序领导者在单个盒子中运行所有东西,然后所有其他节点需要对该提议投票以及达成共识,

前者比后者简单得多。

当然,这因所选择的特定的定序器设计和共识机制而有很大不同。

此外,请注意,有些人对在定序器去中心化中使用 PoS 提出了担忧,如这里和这里。L1 与 L2 的错综复杂的关系可能使处理某些类型的攻击更具挑战性。

添加 L2 共识的优点 (加上领导者选举)

对于定序器来说,最大的目标可能是在 L1 提供的完全安全保障之前给用户提供更快的软确认。看一下StarkNet 的机制要求:

“强健和快速的 L2 最终确定性是 StarkNet 的目标。由于只有在交易 batch 被 L1 证明之后,StarkNet 的状态才会被敲定 (可能需要几个小时)。因此,在下一个 batch 被证明之前,L2 去中心化协议应该就规划好的交易执行顺序做出有意义的承诺。”

添加某种形式的共识 (由许多定序者提供的经济安全支持) 有助于在这期间提供更强的保证(rollup 区块的预先确认是没问题的):

“Starknet 共识必须具有很强的责任感,即违反安全和活性的行为可以通过罚没任何一部分参与者 (包括恶意的大多数质押) 来执行惩罚。”

Rollup 也可以灵活地尝试不同共识机制光谱之间的权衡点,因为它们最终总是可以回到以太坊 L1 的安全性和动态可用性。

  • L1 负责排序的 Rollup

以上所有方法都赋予了定序器以某种形式创建 rollup 区块的特权。例如,PoS 是无需许可加入的,但给定 slot 被选择的 L2 定序者是当时唯一能够提交区块的一方。另外,也有一些相关的提议,建议不给任何 L2 定序器以特权。这些设计依赖于 L1 本身来进行交易排序。

完全“无政府状态”

Vitalik 早在 2021 年就提出了这个“完全无政府状态”的想法。允许任何人在任何时间提交交易 batch。第一笔扩展 rollup 的交易会被接受。它满足了上面讨论如何去中心化定序器的两个最低要求:

  • 抗女巫— 由 L1 提供的抗女巫能力 (即交易费用和区块大小/gas 上限)。
  • 领导者选举— 领导者选举是隐性且延后的。

这就足够了,因为 L1 已经提供了安全性。如果 L2 区块已经发布到 L1 上,那么只有当它们是无效的或构建在无效块之上时 (将被回滚),它们才会变成孤块。如果它们是有效的,并且发布到 L1,那么它们具有与 L1 本身相同的安全保证。

Vitalik 指出这种方案有一个很大的问题是,它的效率会非常低。多个参与者可能并行提交 batch,并且只有一个会被成功打包。这在生成证明时浪费了大量的精力,或者说发布交易 batch 花费了许多不必要的 gas。想要知道你的交易是否会很快被打包,这是非常麻烦的,而且效益很低。

基于基础链的 Rollup (Based Rollups)

然而,现在可以通过 PBS 使这种无政府状态的设计可行。它允许更严格的排序,每个 L1 区块最多一个 rollup 区块,因而不会浪费 gas。(尽管可能有浪费的计算)。L1 构建者可以只打包最高价值的 rollup 区块,并根据搜索者的输入出价构建该区块,这与任何 L1 区块类似。为了避免计算的浪费,默认情况下也可以合理地使 ZK 证明过程需许可(具有相应的机制允许无需许可地回滚)。

这就是Justin Drake最近提出的“基于基础链的 Rollup”的核心理念。他使用这个术语来指代由 L1 (“基础”层) 主导排序的 rollup。L1 提议者只需确保在他们自己的 L1 区块中纳入 rollup 区块(大概是通过构建者)。这是一个简单的设置,可以立即提供 L1 活性和去中心化。他们可以避免一些棘手的问题,比如在 L2 定序器正在审查的情况下解决强制打包交易的问题。此外,由于不需要定序器签名验证,因此可以减少一些 gas 开销。

一个有趣的问题是关于这些 L2 交易在哪里被处理。L2 客户端需要将这些交易发送到某个地方,以便 L1 搜索者/构建者接收它们并针对它们创建区块和数据 blob。它们可能会被发送到:

  • L1 交易池— 它们可以与一些特殊的元数据一起发送给 “知情的” 搜索者/构建者来解释它们。但是,这可能会显著地增加 L1 交易池上的负载
  • 为每个 L2 提供的新的 p2p 交易池— 沿着这个思路的一些解决方案似乎更有说服力。除了他们平常的渠道之外,搜索者/构建者将开始检查和解释这些新交易池的交易。

一个明显的缺点是基于基础链的 Rollup 限制了定序器的灵活性。例如:

  • MEV 缓解— Rollup 可以创造性地使用 FCFS、加密交易池等各种变体。
  • 预确认— L2 用户喜欢快速交易“确认”。基于基础链的 Rollup 最多会回到 L1 区块时间(12 秒),或者等待更长的时间来发布完整的交易 batch。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

有趣的是,这正是早期 rollup 团队正在构建的:

https://twitter.com/DZack23/status/1635503593070657536?s=20

Justin 指出,再质押 (restaking) 可能会有所帮助。

https://twitter.com/jon_charb/status/1635898303106756609?s=20

这些都是EigenLayer的研究领域,至少在他们的白皮书中提到过。目前还不清楚这是否是一个切实可行的解决方案。为了通过再质押有效地改善这些缺点,可能会寄望于所有的质押者都选择运行它。因此,这个想法这样来实现似乎更合乎逻辑:让想要这样做的质押者子集选择进入一个单独的共享排序层(稍后会详细介绍)。

效率证明 (Proof of Efficiency,PoE)

去年,Polygon Hermez 提出了一个名为PoE的提案。这是另一种专门针对 ZKR 的 L1 定序变体。这里的定序器是一个完全开放的角色,任何人都可以提交交易 batch (即完全无政府状态/基于基础链的 Rollup,因此它具有相同的限制)。PoE 机制由两个参与方组成两个步骤:

  • 定序器

定序器收集 L2 用户交易并通过发送一个 L1 交易 (其中包括所有选定的 L2 交易的数据) 来创建一个交易 batch。定序器将根据收到的经济价值来提交区块,或者为用户提供服务级体验 (例如,在每个 L1 区块中发布一个交易 batch,即便这会使 L2 交易更昂贵,因为用户想要交易更快完成)。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

定序器将支付 L1 gas 费来发布交易 batch,并且协议在 MATIC 中定义了必须存入的额外费用。一旦发布,获胜的 batch 立即定义新的链头,允许任何节点确定性地计算出当前状态。然后需要一个有效性证明来敲定轻客户端的见证 (包括 L1 智能合约)。

  • 聚合器

聚合器在这里指的是 ZK-证明器。同样,这是一个无需许可的角色,任何人都可以竞争。非常简单:

  • 携带交易数据的已排序的 batch 按照它们在 L1 上出现的位置在 L1 上排序。
  • PoE 智能合约接受更新到了最新有效状态的第一个有效性证明,这个有效状态包括一个或多个尚未被验证的已提议的 batch。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

聚合器可以自由地运行自己的成本效益分析,以找到发布证明的适当频率。如果他们赢得了比赛,他们会得到一部分费用,但如果等待更长的时间以发布新的证明,他们的固定验证成本将摊销到更多的交易中。如果聚合器晚发布了一个证明 (它并没有证明一个新的状态),那么合约将只执行一个复原函数。证明器浪费了计算,但他们会省下大部分 gas。

费用的分配方式如下:

  • L2 交易的费用将由创建有效性证明的聚合器处理和分配。
  • 所有交易费用将发送给每个 batch 相应的定序器。
  • 定序器为获取创建单个 batch 的权限而存入的费用将被发送到聚合器,聚合器将该 batch 包含到有效性证明中。

纯分叉选择规则

RollkitSR 有一个非常类似的“纯分叉选择规则”概念,如这里所述,指的是没有特权定序器的任意 rollup。节点听从 DA 层的规则进行排序,并应用 “先到先得” 的分叉选择规则。

L1 排序经济学

这些 L1 排序设计对经济学有很重要的影响,因为L2 交易产生的 MEV 现在将在 L1 区块生产者级别被捕获。在 “传统的” L2 排序模型中,L2 交易产生的 MEV 由 L2 定序器/共识参与者/拍卖机制捕获。目前还不清楚在这种情况下,有多少 MEV 会泄漏到基础层。

对于这是好事还是坏事,很难说:

  • 好处— 这有些像 “L1 经济联盟” (例如,ETH 可以捕获更多价值)。
  • 坏处— 有人会担心这种基础层激励(例如,比特币矿工的中心化风险,但也许为时已晚)。

利用 L1 排序可能也行得通,特别是能够更容易地启动一个 rollup,但让它们放弃如此多的 MEV 给 L1 (而它们本身自己就可以捕获这些 MEV) 是不太可能的。Rollup 的最大好处之一确实是经济上的—— 一旦 DA 层开始扩展,这些成本就会下降,他们只需要向 L1 支付很少的费用。更慢的区块时间和原始的 MEV 方法对用户来说也不太理想。

激励 ZK 生成

作为一个简短的题外话,请注意,上面在 PoE 中描述的竞争市场可能围绕最快的聚合器形成中心化局面。ZK 证明者市场大体上有两个经济问题需要解决:

  • 如何激励证明者创建这个证明
  • 如何使提交证明无需许可,从而使其成为一个有竞争力和具有鲁棒性的市场 (例如,主要的证明者宕机了也不会影响网络)

让我们看看ZK 证明者市场的两个简单模型:

  • 竞争市场

在一个极端,你可以有一个开放的竞争模式。在一个无许可的证明者市场中,所有的证明者都争先恐后的为 rollup 定序器/共识产生的区块创建一个证明。第一个创建证明的人可以获得指定给证明者的任何奖励。在寻找最佳证明者方面,这种模式是非常高效的。

这看起来非常类似于工作量证明挖矿。然而,这里有一个独特的区别 —— 证明是确定性的计算。因此,一个具有较小但始终如一的优势的证明者几乎 “总是” 会赢。这个市场很容易形成中心化的局面。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

在 PoW 挖矿中,随机性方面有更好的属性 —— 如果我有 1% 的挖矿算力,我应该得到 1% 的奖励。

这种竞争性的证明模型在计算冗余方面也是次优的 —— 许多证明者会相互竞争并花费资源来创建证明,但只有一个会胜出 (类似于 PoW 挖矿)。

  • 基于轮换的机制 (如质押权重)

或者,可以在证明者之间轮换,让他们每个人都有机会 (例如,基于一些质押,亦或是基于声誉)。这样可能更加去中心化,但可能会带来证明延迟这样的低效率情况 (“慢” 的证明者将有机会创建证明,而另一个证明者可能已经有能力更快更有效地创建证明)。然而,它可以防止许多证明者竞相创建一个证明而浪费了计算,毕竟最终只会有一个证明有效。

此外,如果轮到的人不能产生证明 (无论是恶意的还是偶然的),就出现问题了。如果轮次的时间很长 (例如,当时轮到的证明者可以垄断好几个小时的证明生成),并且证明者宕机了,协议将很难恢复。如果轮次时间很短,其他证明者可以介入并赶上主要证明者未能生成证明的地方。

你也可以允许任何人发布证明,但只有指定的证明者才能在给定的时间内获得奖励。所以如果这些指定的证明者宕机了,另外的证明者可以发布证明,但他们无法获得奖励。这将是无私的,因为花费资源进行计算却没有回报。

Scroll 正在探索更多基于轮换的方法,将执行跟踪分配给随机选择的 “roller” (证明者):

2万字深度技术文:为什么现在没有真正意义上的Rollup?

还有许多有趣的问题,即在排序时应如何在用户层面上收取证明费用。关于这些主题的进一步讨论可以在这里找到:

- Scroll的Ye Zhang在他的文章 《去中心化的 zk-Rollup》 中讨论了在不需要 L2 共识的情况下,这种基于质押 + MEV 拍卖来获取排序权的轮换 roller 网络的可能性

- 《Scroll 架构的概览》提供了一个关于可能的 roller 模型的更多细节

- Starknet 去中心化协议 IV - 协议中的证明

- Starknet 去中心化协议 VI - The Buffer Problem

共享排序

大多数早期的解决方案都假设,每个 rollup 都需要完全靠自己弄清楚如何去中心化它们的定序器。但情况并非如此,比如上文就提到的 L1 排序选项。许多 rollup 可以选择使用一个共享定序器 (SS, Shared Sequencer)。这有一些很大的好处:

  • 躺平— 不要再担心如何去中心化你的定序器了,这很难!嵌入这个选项就好了。不需要招募和管理一个额外的验证者子集。虽然总会遇到很多打着“模块化”名号的融资宣讲稿,这确实是一种非常“模块化”的方法 —— 将交易排序剥离到单独的一层。Shared Sequencing (共享排序) 实际上是一个 SaaS (排序即服务) 公司。
  • 汇集安全性和去中心化— 让单个排序层建立强大的经济安全性 (更强的预确认) 和实时抗审查,而不是为每个单独的 rollup 执行许多小委员会。
  • 快速交易确认— 其他单一型 rollup 定序器也可以做到这一点,但请注意,共享排序情况下用户还可以获得超快的亚 L1 区块时间预确认。
  • 跨链原子性— 在链 A 和链 b 上同时执行事务 (这个很复杂,所以我将在下文更深入地展开)。

简单地使用本地 L1 作为许多 L2 的定序器,基本上有几个缺点:

  • 仍然仅限于 L1 的数据和交易排序吞吐量
  • 失去了为 L2 用户提供快于 L1 区块时间的快速交易确认的能力 (尽管在最终达成 L1 共识之前有较弱的保证)

L1 排序所能做的最好的事情是消除 L1 的计算瓶颈 (比如,如果交易执行是吞吐量的瓶颈),并在通信复杂性上实现小的因素改进。

那么,我们能否设计出专门的、更高效的共享排序层,而不是让 L1 来做这件事……

  • Metro - Astria 的共享定序器

Metro 是针对共享排序层的一个提案。你可以参考Evan Forbes的研究文章、关于模块化的演讲和“共享安全峰会演讲”了解更多细节。由Josh Bowen领导的团队Astria正致力于实施 Metro 的设计。

  • 将执行与排序分离

当前的 Rollup 节点实际上处理了三件事:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

这里的关键属性是 “执行和排序分离”。这样情况下共享定序器:

  • 为那些选择将其作为排序层的各种链的交易排序
  • 不执行 (或证明)这些交易但对其生成结果状态

排序是无状态的—— 共享定序器节点不再需要为所有不同的 rollup 存储完整的状态。它们移除了执行计算。传统定序器目前面临的巨大瓶颈已经不复存在。

当把执行从共识中抽离出来时,共识的效率就会变得特别高。这个过程只是被限制在信息广播层 (因此变得很快)。如果节点所要做的只是生成已排序的交易区块,并在不执行所有操作的情况下就该区块达成共识,那么节点可以非常高效。执行和证明可以在排序共识达成后由另一方负责。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

汇集定序器安全性和去中心化

共享定序器节点可以保持相对轻量级,甚至可以在水平上进行扩展 (通过选择一个随机的共识节点子集来排序不同的交易子集)。结果 —— 可能会使这个排序层更加去中心化。而传统的定序器则需要存储着链的大状态并对其实现完整的执行。

此外,我们将许多链上的资源汇集起来 —— 不需要在许多 rollup 之间分割 PoS 共识。把它们都集中在一个地方。与许多自己实现定序者子集的 rollup 相比,这种方式可能会产生一个更加去中心化的定序者子集 (抗审查),在这个子集上质押了更多可被罚没的价值 (抗重组)。这很重要,因为:

  • 排序—— 是为 rollup 用户提供实时抗审查性和活性的第一道防线。
  • 执行和证明—— 可以在排序完成,没有强烈的去中心化要求。我们只需要一个诚实方就够了。

一旦交易排序的共识达成,执行 (和证明) 可以延迟到一个完全不同的链去进行:

  • 软共识和排序— 共享定序器为用户提供快速的预确认
  • 确认的共识和 DA— 交易数据已在 DA 层上被敲定,供所有人查看
  • 轻松执行和证明— 任何人都可以对确认后的交易状态执行和生成证明

在执行层进行的工作不需要去中心化,因为这不是抗审查的来源。单一型定序器对于抗审查来说并不理想,但这其中不利于抗审查的点与定序器的执行流程无关。它们的审查权来自于它们能够排序并打包交易的权限。而在执行层,共享定序器已经提供了排序好的交易输入,因此也提供了抗审查性。那么之后对状态承诺的计算和比较就不需要那么去中心化了。

软执行

快速软执行的第一步是用户喜欢的:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

这需要某种形式的共识 (或者一个中心化的定序器) 来提供这样的出色用户体验:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

如果你只是依赖于像 Celestia 这样的基础层的共识,你就不能很好地保证这些关于排序和打包的软承诺。如果共享排序层具有一个质押了大量价值的去中心化委员会,那么它可以在快速出块 (亚 L1 区块时间) 上提供相当强的承诺。

因此,一旦共享定序器创建一个区块,用户就可以得到软确认。任何人都可以下载已达成共识的交易,并提前地将它们应用到状态中。这种确认的强度取决于共享定序器的构造 (去中心化、经济安全、分叉选择规则等)。一旦数据实际发布到基础层,就可以将这些交易视为最终被敲定。然后可以生成状态根和相关证明的最终计算并提交。

懒人 Rollup (Lazy Rollups)

“懒人 Rollup” 非常简单。这些 rollup 等到它们的交易全部被排序并发布到 DA 层,然后它们就可以下载这些交易,可选地应用一个分叉选择规则来选择一个交易子集,执行交易处理,并将这些交易应用到状态中。然后就可以生成区块链链头并进行广播。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

注意,因为共享定序器不能以一种访问完整状态的方式产生区块,所以它们没有检查无效的状态转换的功能。因此,使用共享定序器的 “lazy rollup” 的状态机必须能够处理无效交易。节点在执行已排序的交易以计算结果状态时,可以简单地删除无效的/回滚的交易。实施即时执行的传统 rollup 就没有这种限制。

如果 rollup 要求访问状态来压缩交易,再将它们打包上链,在这里是行不通的。例如,在这里 rollup 有一个区块有效性规则,其中区块中包含的所有交易都是有效的。如果 rollup 需要压缩交易,但不需要状态访问,那么可以专门为这种类型的 rollup 创建一个特殊的共享定序器 (例如,类似 Fuel v2 或具有私人交易池的 rollup)。

支付 gas

要让这个共享定序器运行,必须有某种机制让用户为他们的交易打包到 L1 中而付费。可以简单地使用大多数 rollup 交易类型中已经包含的现有签名和地址来支付共享排序层的 gas费用。这将要求共享定序器了解不同实现所需的最小状态,例如:解析签名、nonce,从帐户中减去气体,等等实现。或者,支付可以涉及共享定序器上的一些封装交易,任何人都可以为打包的任意数据付费。这是一个开放的设计空间。

分叉选择规则

Rollup 能够继承它们所使用的共享定序器的分叉选择规则。然后,rollup 的完整节点实际上是共享定序器的轻客户端,它们检查某些承诺,以表明对于给定的区块高度,哪个 rollup 区块是正确的。

然而,继承共享定序器的分叉选择规则是可选的 —— 你可以简单地要求 rollup 处理 (不一定执行) 提交到基础层的所有交易数据。它将有效地继承基础层的抗审查性和活性,但这将牺牲许多用户喜爱的共享定序器所拥有的功能。

MEV

假设一个 rollup 想要继承其共享定序器的分叉选择规则并获得快速的软执行,从 MEV 方面来说,这个共享定序器自然会处于一个非常中心化的位置。它决定 rollup 将遵守怎样的交易打包和排序。

然而,并不是说 rollup 必须执行共享定序器提供的交易,或者按提供的顺序执行。从技术上讲,你可以允许自己的 rollup 运营节点执行第二轮处理,以便在执行之后对共享定序器发布的交易重新排序。然而,如上所述,你将会失去大部分首先使用共享定序器的良好特性,因此这种情况似乎不太可能发生。

即使在这种情况下,共享排序层仍然可能存在 MEV,因为它有权打包交易。如果你真的想,你甚至可以允许你的 rollup 在第二轮处理中排除某些交易 (例如,利用一些有效性条件来排除某些交易类型),但这当然会变得混乱,减少了抗审查性,并再次失去共享定序器的好处。

交换共享定序器

区块链中难以分叉的是任何形式的有价值的共享状态。看看像 ETH vs. ETC 或类似的 ETH vs. ETH POW,社会共识决定了什么是 “真正的以太坊”。我们都同意的 “真实” 状态是有价值的。

然而,共享定序器实际上只是一个服务提供者 —— 它们没有与之相关的有价值的状态。使用给定共享定序器的 rollup 可以保留分叉的能力,只需要一个较小型的硬分叉就可以转而支持其他排序机制 (例如,当出现共享定序器提取了太多价值的情况)。这将有望保持共享定序器的竞争力。

网络效应可能会让这变得更具挑战性。如果许多 rollup 都开始使用共享定序器,并且它们获得了巨大的网络效应 (例如,如果他们从许多链的潜在跨链原子性中获得了有意义的价值),那么除非其他 rollup 也愿意转移,否则脱离这个网络效应可能是很痛苦的。

  • Espresso Sequencer,ESQ — 由 EigenLayer 提供安全保证

你可能已经看到EigenLayer白皮书提到去中心化的共享定序器是再质押的潜在消费者之一。这个共享定序器可以由 ETH 再质押者保护,并且它可以处理许多不同 L2 的交易排序。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

好吧,Espresso 刚刚公开宣布他们的共享定序器计划。它可以利用 EigenLayer 再质押者来为其共识提供安全保障。为了更好地可视化,下图为当前 rollup 的样子:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

下图为 rollup 有了像 Espresso 这样的共享定序器之后的样子:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

Espresso Sequencer (ESQ) 与 Metro 的总体思路非常相似。它的工作原理是一样的 —— 将交易执行从排序中剥离出来。除此之外,ESQ 还将为交易提供数据可用性。

HotShot 共识 & Espresso 数据可用性 (DA)

简单说一下背景,以太坊目前使用 Gasper 作为其共识机制 (Casper FFG 作为敲定工具 + LMD GHOST 作为分叉选择规则)。与此相关的 “太长不读” 是:即使在大多数节点可能退出网络 (动态可用性) 的悲观条件下,Gasper 也能维持网络活性。它有效地运行两个协议(Casper FFG 和 LMD Ghost),这两个协议共同维护一个具有敲定前缀的动态可用链。但是维持网络实时活性的同时,Gasper 牺牲了交易的快速最终确定性 (在网络允许的情况下尽可能快地确认交易的能力)。

总的来说,ESQ 包括:

  • HotShot— ESQ 是建立在 HotShot 共识协议之上的,它优先考虑快速的最终确定性 (乐观的响应能力) 而不是动态的可用性,不像 Gasper。它还能像以太坊一样,可以将支持的验证者数量扩展到令人难以置信的水平。
  • Espresso DA— ESQ 还为链提供可选的 DA 选项。该机制也用于扩大他们的共识。
  • 定序器智能合约— 这个智能合约作为轻客户端验证 HotShot 共识并记录检查点 (对已排序交易日志中的点的承诺)。此外,它还负责管理 ESQ 的 HotShot PoS 共识的质押者。
  • 网络层— 使参与 HotShot 和 Espresso DA 的节点之间能够进行交易和共识消息的通信。
  • Rollup REST API— L2 rollup 用于与 Espresso 定序器集成的 API。

让我们仔细看看 DA 的情况。在乐观的情况下,高带宽节点将向所有其他节点提供数据,并且每个单独区块的可用性也由随机选出的小型委员会提供支持。考虑到针对小型委员会的 DDoS 和贿赂攻击的风险,可验证的信息分散(VID)将用于提供可靠 (但速度较慢) 的备份路径以保证 DA,只要所有节点中足够高的比例 (按质押计算) 没有受到攻击。

这个系统是为扩容而构建的,因此 ESQ 希望为选择其作为共享定序器的 L2 提供更便宜的 DA。他们仍然会将他们的证明和状态更新结算给 L1 以太坊,但请注意,这将使使用 ESQ 的链默认成为 “validium” 或 “optimistic 链”,而不是完整的 “rollup” (即他们的 DA 不受以太坊 L1 的保证)。它比数据可用性委员会 (data availability committees, dac)的简单实现更强大,但它比真正的 rollup 提供的安全保证要弱。

交易流程

  • 定序器合约— HotShot 直接与其 L1 定序器合约进行交互。这个合约验证了 HotShot 共识,并为其他参与者提供了一个接口来查看它已排序的区块。该合约存储的是一个只能追加的区块承诺日志,而不是完整的区块。然而,任何人都可以根据承诺验证任何区块。
  • L2 合约— 每个使用 ESQ 的 L2 仍然有自己的以太坊 L1 rollup 合约。为了验证发送给每个 rollup 的状态更新 (通过有效性/欺诈证明),每个 rollup 合约必须能够访问已认证的区块序列,这些排序过的区块带来确定的状态更新。Rollup 合约与定序器合约连接以查询这些。

转发到共享定序器的交易将被排序,然后在 L1 上敲定之前发送回 rollup 的执行器和证明器中。共享定序器还向其 L1 定序器合约发送对区块的承诺,以及用于验证区块的一个证书。这允许 L1 rollup 合约将 rollup 状态更新证明与被认证为共识输出的区块承诺进行比较。

交易流程的完整视图:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

2万字深度技术文:为什么现在没有真正意义上的Rollup?

  • 跨链原子性

正如 Espresso 文章中提到的,一个共享定序器可以提供一些和跨链原子性相关的令人兴奋的用例:

“跨多个 rollup 的共享排序层有望使跨链消息传递和桥接更便宜、更快、更安全。无需为另一条链的定序器构建轻客户端是一个免费的好处,没有成本,这为前期创造了潜在的节省空间。通过移除给定 rollup 独立地同步其他 rollup 共识的需要,跨 rollup 桥接也可以实现持续的节省。共享定序器还为桥接提供了安全优势:它可以保证当且仅当 (甚至同时) 一笔交易在另一个 rollup 中被敲定时,该交易才会在它所在的 rollup 中被敲定。

另外,共享定序器增强了用户在不同 rollup 交易之间表达原子依赖关系的能力。通常来说,Alice 会在 Bob 的 rollup-B 交易 t’ 之外签署和发布她的 rollup-A 交易 t。在这种情况下,Alice 的交易可能会在 Bob 的交易之前很长时间被排序,让 Bob 有一个长时间的中止选项 (例如,中止交易)。这种可选性失衡可以通过共享定序器来缓解,其中 Alice 和 Bob 可以将两个交易作为一个已签名的捆绑包一起提交 (即,定序器必须将这两个交易视为一个)。”

随着链上活动最终开始增长(我希望),这对跨域 MEV有影响。典型的例子是 “原子套利”。同样的资产在两条不同的链上以两种不同的价格进行交易。搜索者希望通过在没有执行风险的情况下同时执行两笔交易来从中套利。例如:

  • 交易1 (T1) — 在 Rollup 1 (R1) 上低价购买 ETH
  • 交易2 (T2) — 在 Rollup 2 (R2) 上高价出售 ETH

要实现原子套利 = 要么两个交易都被填充,要么两个都没有被填充。如果两个 rollup 都选择到相同的共享定序器中,那么它可以为搜索者实现这种原子套利。在这里共享定序器可以保证:

  • T1 被包含在到 R1 的指令流中,当且仅当:
  • T2 也包含在到 R2 的指令流中

假设 rollup 虚拟机依次执行各自流中的所有交易 (即没有无效指令,只是一些指令可能会抛出错误,但不影响状态),那么我们也可以保证:

  • T1 在 R1 上执行,当且仅当:
  • T2 也在 R2 上执行

然而,这和在共享状态机 (例如,完全在以太坊 L1 上) 上进行交易仍然是不一样的保证。如前所述,共享定序器不持有这些 rollup 的状态,并且它们不执行交易。因此不能完全保证某个交易 (在 R1 或 R2 上) 在执行时不会回滚。

直接在此基础上构建更高级的原语是有问题的。例如,如果试图在此共享定序器之上构建一个即时“销毁-铸造” 的跨链桥接功能,该功能同时在完全相同的区块高度上执行以下操作:

  • 烧毁 R1 的某个输入
  • 在 R2 上铸造一个输出

你可能会遇到这样的情况:

  • R1 上的销毁行为可能会抛出一个意想不到的错误,例如被别的交易执行导致无效,但是
  • R2 上的铸造行为不会因为任何原因而无效,所以它会完全执行。

你可以看到这将是一个多么大的问题。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

可能在某些情况下,只要这两个交易都包含在输入流中并因而被执行,就可以确定这两个交易的预期结果,但情况往往不是这样的。这是一个悬而未决的问题,这个过程可以:

保证— T1 和 T2 将包含在各自的流中,并且 (可能) 两者都会执行。

不保证— 成功执行两个交易和由此产生的预期状态。

这种 “保证” 对于原子套利 (搜索者已经拥有在每条链上执行这些交易所需的资产) 来说可能是足够的,但它显然不是共享状态机的同步可组合性。对于像跨链闪电贷这样的东西来说,这种保证本身是不足够的。

但是,当与其他跨链消息传递协议结合使用时,这在其他设置中可能仍然有用。让我们看看在与跨 rollup 消息传递协议一起使用时,如何促进跨链原子 NFT 交换:

- T1 将 ETH 从 U1 (用户1) 移动到 R1 上的 SC1 (智能合约 1)

- T2 将 NFT 从 U2 (用户2) 移动到 R2 上的 SC2 (智能合约 2)

- 当且仅当 SC1 首先收到来自 SC2 确认已存入 NFT 的消息时,它才会允许 U2 赎回 ETH

- 当且仅当 SC2 首先收到来自 SC1 确认已存入 ETH 的消息时,它才会允许 U1 赎回 NFT

- 两个智能合约都实施了一个时间锁,这样如果任何一方失败,各方都可以收回他们的资产

这里的共享定序器允许两个用户在步骤 1 中进行原子提交。然后,使用某种形式的跨 rollup 消息传递机制来验证彼此的结果状态,并解锁资产以执行交换。

如果没有共享定序器使其以原子的方式进行,双方可以商定一个价格。但是 U1 可以提交他们的交易,U2 可以等待并决定他们是否想要中止交易。而有了共享定序器,他们的交易是被锁定的。

共享定序器实现的跨链原子性的内容大概就这么多。总结:

  • 这里所提供的保证的确切强度和有用性仍未得到证实
  • 这可能对跨链原子套利非常有用,同样也可能对其他应用有用,如跨链 swap 和 NFT 交易 (可能与其他消息传递协议结合使用)
  • 提供额外的加密经济保证(例如,存入抵押品) 来担保某些类型的跨链交易可能会有所帮助
  • 然而,你永远不会对你的交易结果具有无条件的保证 (你可以通过在共享状态机上原子地执行交易来获得)

关于跨链原子性的其他有趣的主题,我推荐查看:

  • Optimism 的超级链—— 他们也正探索如何跨 OP 链使用共性定序器。共享定序器可以达成共识,然后尝试实现原子跨链交易。
  • Anoma ——Heterogeneous Paxos和Typhon是非常不同的方法。
  • 如前所述,Kalman 的跨 rollup 强制打包交易。

共享定序器总结

总结一下,共享定序器的基本理念是:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

显然,这个坐标图不是定律,一切都是高度主观的,它非常依赖于确切的结构。但是总的来说可以这样进行比较:

中心化定序器—— 如果你完全控制系统,通常最容易实现你想要的任何功能。但是,在预确认强度方面具有次优的保证、强制退出可能是不可取的、活性也可能是次优的,等等。

去中心化的 L2 定序器—— 与单一型定序器相比,质押了有意义的价值的分布式集合应该增加 rollup 的鲁棒性。但是,可能会根据它的实现方式,需要以延迟等方式为代价 (例如,许多 L2 节点可能需要在确认 rollup 区块之前进行投票)。

L1 负责排序—— 最大化去中心化、抗审查性、活性等等。然而,它缺少一些特性 (例如,快速预确认、数据吞吐量限制)。

共享定序器—— 可以从中获得去中心化定序器的功能;与其他人共享定序器可以从中获益 (得到某种程度的原子性);不需要启动自己的定序器子集,等等。然而,在 L1 最终敲定之前的过渡时期,与 L1 排序相比,确实具有更弱的保证。此外,共享排序层可以将多个 rollup 中的委员会、经济安全等聚合到一个地方 (可能比每个 rollup 都有自己的委员会这种情况要强得多)。

最终,一旦区块在 L1 敲定,所有 rollup 都会返回到 100% 的 L1 安全性。大多数定序器设计只是试图在获得 L1 结算的完全安全之前的过渡时期给用户提供非常好的功能,但对状态的保证力度较弱。他们都有不同的权衡。

SUAVE (Single Unifying Auction for Value Expression)

  • 去中心化构建者 vs. 共享定序器

当我们讨论这些试图为许多其他链处理交易的共享层时,这里的差异可能会变得非常令人困惑。特别是SUAVE作为 “排序层 (sequencing layer)” 这一组件经常和其他术语一块出现,比如还有另一个组件是 “针对 rollup 的去中心化区块构建者”。需要明确的是 —— SUAVE 与上面描述的共享定序器设计非常不同。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

2万字深度技术文:为什么现在没有真正意义上的Rollup?

让我们看看 SUAVE 如何与以太坊对接。SUAVE 不会以任何方式被写入以太坊协议。用户只需将他们的交易发送到加密的交易池中。然后,SUAVE 执行器网络可以为以太坊 (或类似的任何其他链) 生成一个区块 (或部分区块)。这些区块将与传统的以太坊中心化构建者的区块竞争。以太坊区块提议者可以同时监听这两种区块,并选择他们想要提议的区块。

同样,SUAVE 也不会取代 rollup 选择其区块的机制。例如,rollup 可以实现 PoS 共识子集,其运作方式可能与以太坊 L1 的运作方式大致相同。然后,这些定序器/验证者可以选择由 SUAVE 为他们生成的块。

这与上文描述的共享定序器非常不同。**在共享定序器的设计中,rollup 可以完全移除去中心化定序器的需要。他们只是简单地通过添加 Metro 或 ESQ 之类的可选项来外包这个排序功能,并且可以选择继承这些共享排序层的分叉选择规则。**以太坊、Arbitrum、Optimism 等不会改变其分叉选择规则,以选择 SUAVE 进行所有的交易排序。

SUAVE 并不关心你的链的分叉选择规则是什么,也不关心你的区块是如何被选择的。它旨在为任何域提供最有利可图的排序。请注意,与前面描述的共享定序器节点不同,SUAVE 执行器通常是“完全有状态的” (尽管它们也可能满足某些不需要状态的首选项)。他们需要模拟不同交易的结果,以创建最优排序。

为了解两者的差异,在这里举一个用户想要进行跨链原子套利的示例。他们将交易提交给 SUAVE vs. 提交给共享定序器,获得以下保证:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

  • SUAVE + 共享定序器

那么现在我们讨论 SUAVE 如何与去中心化的 rollup 定序器、甚至共享定序器互动?Espresso 似乎相信 SUAVE 与 ESQ 兼容,正如他们在文章中所描述的。ESQ 旨在与私有交易池服务 (如SUAVE)兼容,这些服务可以作为区块构建者。它看起来类似于我们在以太坊上使用的 PBS:

共享提议者= 共享定序器

共享构建者= SUAVE

与 PBS 一样,构建者可以从提议者 (即这里的定序器) 那里获得一个盲承诺,来提议一个给定的区块。提议者只知道从提议区块中获得的总效用 (构建者的出价),而不知道区块的交易内容。

现在把它们放在一起,让我们再回头看刚刚想要做跨链套利的搜索者那个例子。SUAVE 本身可以构建并发送到两个不同的 rollup:

  • 包含交易 1 (T1) 的区块 1 (B1) —— 在 Rollup 1 (R1) 低价购买 ETH
  • 包含交易 2 (T2) 的区块 2 (B2) —— 在 Rollup 2 (R2) 高价出售 ETH

但很有可能 B1 赢得拍卖,而 B2 输掉 (或反之)。然后,让我们想一下,如果这两个 rollup 被选择到相同的共享定序器中会发生什么。

共享定序器节点基本上是愚蠢的。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

他们不了解交易到底在做什么,所以他们需要有人 (比如SUAVE,或者其他 MEV 构建者) 为他们构建一个完整的区块,如果他们要提高效率的话。那么,SUAVE 执行器可以将 B1 和 B2 提交给共享定序器,条件是这两个区块都可以被填充或被毙掉 (即原子地执行或放弃这两个区块)。

现在你可以在整个过程中得到很好的经济保证:

SUAVE = 共享构建者=可以保证 B1 和 B2 都被包含并以原子的方式执行时的状态结果。

共享定序器 = 共享提议者=可以保证 B1 和 B2 都被包含并以原子的方式执行了。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

  • 再质押 Rollup (Restaked Rollups)

我最近在 Flashbots 论坛上发表了一篇关于 SUAVE 潜在经济安全模型的文章。我论证了为什么从长期来看,对 SUAVE 而言,rollup 可能是比再质押更好的选择。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

Hasu 也针对再质押和 rollup 之间的权衡做了一些非常深思熟虑的回应,我鼓励大家去阅读一下。以下是他的回应的摘要:

  • Rollup 由 L1 提供安全性/抗审查性/活性保障,但 SUAVE 不像大多数链那样从中受益,因为SUAVE 链不是为普通用户设计的。事实上,Flashbots 正在研究如何积极地限制作为用户桥接资产到 SUAVE 的需求。理想情况下,一条链主要是要求搜索者/构建者在那里保留足够的运营资金。这可能远低于针对用户的传统 rollup 所锁定的资产额。此外,与针对普通用户的链相比,强制通过 L1 进行状态转换对该链中的搜索者/构建者来说可能没有那么有价值。
  • 数据可用性 (DA) 是昂贵的,至少在今天。我们将看到 EIP-4844 在这其中如何发挥作用,以及随后 对的 DA 需求可能会增长。相反,我想提醒的是,对于代币持有者来说,再质押可能更“昂贵” (即,如果费用收入低,并且需要增发代币给 ETH 再质押者以激励形成足够的经济安全模型)。一种对用户来说更昂贵,而另一种对代币持有者来说更昂贵。选择哪一个,在很大程度上取决于任何潜在链的时机,以及当时以太坊 DA 层的成熟度。
  • SUAVE 需要将从其他域的状态转换报告回主链 (因此可以解锁对执行器的条件式支付)。关于从以太坊 L1 和其他 rollup 读取状态的能力,rollup 具有很好的信任最小化属性。

但我有一个新想法 —— 两者都做怎么样?再质押 rollup。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

这并没有解决 Hasu 提到的所有问题,但它仍然是一个非常有趣的新选项,特别是从长远来看。

相比于仅仅由 EigenLayer 的再质押者 (更像是它自己在 L1 借来的安全) 来提供安全保证,rollup 可以利用这些 EigenLayer 的再质押者来维持它的本地共识,但是这个链随后会回到以太坊 (即,它向以太坊发布它的数据和证明)。

如前所述,rollup 可以决定实现自己的本地共识,以便在真正的 L1 敲定之前,对短期预确认和抗重组实现更强的保证。那么,为什么我们不把这个 rollup 共识子集变成一组以太坊再质押者?现在两样都有了:

L1 之前的最终确定性 —— 高价值、去中心化的再质押共识,提供强大的短期内抗重组。

L1 之后的最终确定性 —— 仍然是一个 rollup!它将其数据发布到以太坊,并且可以发布 ZK/欺诈证明。

一旦 L1 敲定了,这与任何 rollup 的安全性是一样的。这只是实现其自身共识的 rollup 的一种变体。只是,它没有像前面描述的那样,在其 rollup 上拥有自己的验证者子集,并由自己的原生代币保护,而是选择让以太坊的再质押者运行共识。

同样,如果 Celestia 能够在其协议实现某种形式的再质押,那将是一件很有趣的事情 (目前的计划是 Celestia 的 L1 是非常小的,并且没有智能合约的功能)。我之前曾写过,对于 Celestia 来说,写进协议的 rollup 将是一个有趣的方向,而原生再质押将是另一个令人着迷的工具,允许自由市场决定他们想要加入什么功能。再质押对 Celestia 的经济安全性方面也有帮助,因为可替代 DA 层的价值累积模型仍未得到证实。

其他的 MEV 考虑

这里最简单的方式 (现在 rollup 通常做的事情) 是用简洁的 FCFS (先到先服务) 规则运行单一型定序器。定序器只是按照它们接收到交易的顺序提交交易。你可以合理地信任单个定序器遵守 FCFS 排序规则,但它仍然会激励延时竞争 (latency races) 和其他问题中的相关负外部性 (不要实施 PoW 来尝试解决它)。因此,即使是中心化定序器也需要更有效地应对 MEV。

2万字深度技术文:为什么现在没有真正意义上的Rollup?

上面提到的一些解决方案已经含蓄地处理了这个问题 (例如,举办一个完全免费的公开拍卖),但显然没有一个 rollup 想让它们的用户被发起三明治攻击。所以,我们可能需要一些创意。将拍卖的好处与可编程隐私结合起来会让它变得更有趣。

这就是为什么中心化定序器现在也喜欢使用私有交易池 —— 试图确保用户不会抢跑交易等等。但是实现去中心化并不容易。如果向许多定序器开放,你会相信它们运行自己的私有交易池?即使你相信,如果每个定序器都有自己的私有交易池,并且你需要开始轮换活跃的定序领导者,那也可能会有问题。

加密交易池是解决这些问题的一个很吸引人的研究领域。下面我简单向大家推荐我刚发的这个帖子的相关信息:

https://twitter.com/jon_charb/status/1635837710605639683?s=20

In this post, I’ll just give a brief overview of some variations of FCFS proposals.

在这篇文章中,我将简要概述 FCFS 提案的一些变体。

  • Time Boost

意识到简单 FCFS 的局限性和负外部性,Arbitrum 开始探索它的新变体。最近,他们提议了 Time Boost 机制。基本原理:

  • 需信任的中心化定序器继续为用户的交易运营一个私有交易池
  • 定序器在收到每一个交易时都会为其标记时间戳
  • 默认情况下,将在接收到交易后 500 毫秒内执行交易
  • 用户可以选择为他们的交易支付额外的优先打包费用,给这个交易一个“时间加速 (time boost)”,可以最多减少 500 毫秒

Time boost 的计算公式如下:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

其中:

F = 交易的优先打包费用

g = 可用的最大时间加速 (500 毫秒)

c = 待确定的常数

2万字深度技术文:为什么现在没有真正意义上的Rollup?

目前,搜索者只能通过尽量减少对 Arbitrum 定序器的延时来表达他们对快速打包到定序器的偏好 (打开许多连接、在物理上接近它、在基础设施方面投入资本等)。Time Boost 反而会减少对上述延时优势进行投资的动机,因为搜索者现在可以通过优先打包费用竞价来表达他们对快速打包的偏好。

这是对简单 FCFS 的明显改进,但在我看来仍有一些缺点:

  • 这减少了对延时竞争的激励,但它并没有消除它。最小化延时总是允许搜索者出价低于竞争对手,并且上面图表的弧线显示,延时优势对于高价值的 MEV 机会来说特别有意义。
  • 不清楚交易池隐私和时间戳如何有效地去中心化。
  • 搜索者的出价缺乏更多其他表现。搜索者只能为更快的打包而竞价,但他们无法表达更复杂的偏好,这将是更灵活的显式拍卖 (例如当前以太坊 L1) 的情况。
  • 与此相关的是,如果在这个级别实现,将没有能力恢复失败的竞标。

FBA-FCFS

去年,来自 Flashbots 的 Xin 为 Arbitrum 提出了一个替代方案 (FBA-FCFS)。这实现了对于 Themis 的一个频繁 batch 拍卖风格的变体。在这个方案中:

  • 节点向领导者报告部分排序,然后领导者将这些聚合到一个未排序的 batch 中。在设定的批次时间 "公平粒度 "内 (例如,也可以是 500 毫秒),所有交易都假定是在同一时间发生的。
  • 然后领导者通过某种形式的拍卖来解决批次内的弱排序问题。

与 Time Boost 提案类似,有一些尝试保证相对较快的打包时间 (建议小于 500 毫秒,但可以更改),并防止通过可信节点抢跑。同样,它通过允许搜索者来表达他们的偏好 (优先打包费用机制),减少了对延时竞争的激励 (尽管并没有完全消除所有优势)。

对于 “快速搜索者” 来说,在给定 batch 结束时,其他 “慢速搜索者” 无法与之竞争的延时优势仍然存在:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

来源: Latency Arms Race Concerns in Blockspace Markets

这是这类拍卖的一个广为人知的方面。较长的 batch 处理时间会进一步使该延时优势相关的时间百分比越来越低,尽管这个 batch 潜在价值较高。较长的区块时间可能会对 MEV 产生其他影响 (例如,波动的价格)。

总结一下这个延时优势:

  • Time Boost —— 较低的延时是总是有利的 (较低的延迟 = 总是可以有较低的平均出价)。
  • FBA-FCFS —— 较低的延时有时是有利的 (当“慢”和“快”搜索者之间的小差距显示出相关信息时)。

关于时间延时:

  • Time Boost —— 所有用户的交易在收到时默认延迟了 500 毫秒的速度。
  • FBA-FCFS —— Batch 处理时间为 500 毫秒,因此在窗口期间收到的用户交易可以包含在其中,距离中间点平均 <500 毫秒

FBA-FCFS 带来更多的可变性 (例如,交易可能会根据接收时间滑到下一个 batch),但不支付优先打包费的常规用户交易的平均打包时间应该更低。在 Time Boost 模型中,时间是连续的 (没有区块的概念),而在 FBA-FCFS 模型中,时间是离散的。总的来说:

2万字深度技术文:为什么现在没有真正意义上的Rollup?

  • 延时和去中心化

这篇文章已经很长了,我也很累了,所以这部分请阅读 Phil 写的文章吧。感谢:(

结论

希望读者现在对定序器去中心化的路径和相关的障碍有了个较为清晰的框架。这是 rollup 在未来几年走向成熟时需要应对的众多挑战之一。

其他一些有趣的探索领域包括:

  • 不同层的交互 —— 随着定序器去中心化,它们如何与交易供应链的不同部分交互?什么类型的拍卖 (例如,SUAVE) 应该插入一个去中心化的定序器子集 (例如,共享定序器)?
  • 交易费用机制 —— 多维度资源定价 vs. 状态定
  • L2 费用市场 —— 收取 “L2 原生” 费用 (例如 L2 堵塞费用) 和 “L1 原生” 费用 (例如 L1 数据可用性费用)
  • ZK 证明者市场 —— 如何正确激励去中心化和无需许可的 ZK 证明者市场。这是 L2 费用的一个重要子集,在其他背景下也会有相关的地方。
  • Rollup 的商业模式 —— Rollup 代币和构建它们的团队如何积累价值并实现可持续性。
  • 可升级性和治理 —— 去中心化这些组件和减少信任假设,同时保持系统的灵活性。
  • 欺诈/ZK 证明 —— 构建更具有鲁棒性的机制,比如使用多个证明者机制。

感谢 Ben Fisch、 Josh Bowen、 Cem Özer、 Kelvin Fichter、 Zaki Manian、 Hasu、 Robert Miller、 Tarun Chitra、 Sreeram Kannan,以及其他许多人围绕这个话题的精彩讨论。