本文深入探讨了共享序列(Shared Sequencing)及其在乐观 Rollup(Optimistic Rollups)中的作用,包括排序器(Sequencer)和提案者(Proposer)之间的区别,以及如何管理和优化在多个Rollup上的交易顺序。
共享排序朝着叙事的视野疾驰,所以是时候彻底解释它是什么,以及它为什么存在。我将把这篇文章限制在乐观 Rollup,因此所有的 ZK 人可以提前准备你们对以下内容的纠正意见。推特上见。我在这里还会经常说“宿主链”时,并不是说宿主 DA 层,所以所有的 DA 人也可以准备推文线程
排序器是乐观 Rollup 中的一个半信任角色。虽然交易可以由宿主链本身排序,但这并不总是经济实惠的。用户必须单独提交对应于其 Rollup 交易的宿主链交易,并支付宿主链自排序交易的费用。例如,在以太坊的 gas 语义中,这会对每笔交易施加 21,000 gas 的费用。排序器通过允许仅限 Rollup 的交易共享一个宿主链交易来解决这些用户的问题。
排序器通过在线下聚合许多用户交易并将它们作为一组承诺到宿主链中,从而补充了宿主链的排序。对此承诺的成本随后在该集合中所有用户的交易中分摊。排序器还可以压缩这些集合,以进一步节省宿主链 DA 成本。总体而言,Self-Order 的用户在 Rollup 中事务纳入的费用往往明显高于依赖排序器的用户。
然而,排序器可以对集合中的交易 进行控制1。排序器可能选择不包括某个用户交易,从而迫使用户自行排序,支付任何宿主链费用。排序器还可以通过标准的重排序和插入提取方法从集合中提取 MEV。它们实际上拥有对 Rollup 的优先写入访问权限。同时值得注意的是,由于排序器能够与合约交互,仅能通过链上机制可靠地强制执行无错交易。可错交易在强制排序时可能会失败2。
这使得排序器成为 Rollup 用户的半信任方。虽然排序器不能防止用户访问 Rollup,但它们可以延迟用户的访问,使用户背负额外的费用,并从用户的交易中提取价值。通过去中心化进一步约束排序器行为是一个活跃的 研究主题。
首次被拍摄到,提议者正在更新一个 ORU 的桥接状态。照片由 Gift Habeshaw 提供 Unsplash
排序器补充了宿主链的排序。它并不计算 Rollup 的状态,实际上可以选择对无效交易进行排序。Rollup 节点必须解析和清理已排序的数据,利用该数据推导出 Rollup 的有效历史,并执行这些历史以生成最新状态。排序器对这个过程完全不涉。
不过,我的朋友 Fred 不断提醒我,一旦交易排序,结果就是确定的。这意味着所有 Rollup 节点将依据排序器所产生的顺序得到相同的结果。给定已知历史,Rollup 存在一个单一的正确状态3。一旦节点找到这个状态,提议者将它提交到宿主链的 Rollup 合约中。
理论上,任何节点都可以成为提议者,并且不需要许可。提议者向宿主链提交状态,同时提交保证金。如果该状态被一个证明欺诈的证据无效,则他们将 forfeits 保证金。这个 Rollup 合约在乐观计时器结束后接受提交的保证书,用户提交的交易可以在此之后被应用到宿主链上。其他执行节点通过欺诈游戏保持提议者诚实。我们通常把运行但不提议的节点叫做“Rollup 全节点”或“验证者”。
换句话说,一旦序列承诺到宿主链,状态就变得最终且不可变。提议者计算并报告最终状态5给 Rollup 合约,以便于 Rollup 到宿主的桥接。提议者不会创建该状态;他们只是计算并对它进行证明。 Rollup 合约并不创建或最终确定 Rollup;它仅仅通过提议者了解 Rollup 状态。
这是一个复杂的问题。从根本上讲,我们将它们分开是因为它们是分开的。我知道,这听起来有些同义反复,但大家花了很长时间才意识到这一点。Rollup 的知识历史经历了 plasma 和状态通道的曲折发展,我们所有人都有些迷失方向。在比特币基础的原型 Rollup 的早期,没有排序器。用户只是将他们的交易发布到宿主链。在那之后,这种设计消失了多年,最终与 Barry 的工作 一起重新浮出水面。在 Barry 和 Celestia 之间,Rollup 的研究集中在 Rollup 桥对宿主链的交互上。没有人意识到,我们正在制造更好的 Mastercoin,直到“主权” Rollup 被重新发现。
放在一边,排序器解决了一个特定的问题:用户交易成本最小化。然而,在此过程中,他们引入了一个新问题:排序器可以同时制作相同交易的多个排序。如果所有的排序都是由宿主链完成,那么会有单一的标准顺序,但用户交易将更加昂贵。我们选择使用排序器来改善 Rollup 中的用户体验。
假设有多个排序器,正如有多个提议者一样。排序器可以提交相互冲突的序列,我们现在需要在宿主链上“规范化”特定的排序批次的机制6。我们今天在主网 Rollup 中通过拥有一个单一的、已知的、半信任的排序器来实现这一目标。选择一个单一的排序器使我们可以暂时不去解决这个规范化问题,直到去中心化排序器研究顺利完成7。由于我们想要多个提议者,但需要一个单一的排序器,因此必须将这两个角色分开。
考虑数据依赖关系时,我们得到一个重要的区分:提议者需要顺序8,但排序器从不需要状态。提议者依赖排序器工作输出,但排序器从不依赖提议者。由于数据依赖仅朝一个方向流动,因此定义角色之间的边界和允许参与者专注于单一角色是合理的。
所以要回答最初的问题,我们将提议者和排序器分开是因为它们是分开的。提议者在排序器下游工作。Rollup 将信任和权力委托给排序器,而提议者只是一种职能角色。
目前有两个常用的 ORU:Arbitrum 和 Optimism。我想简要介绍一下它们中的主要角色,但没什么可多谈的。我不会链接到代码,只会链接到规范和文档,因为我懒得写,而且这很无聊。Optimism 的讨论将限于(尚未部署的)Bedrock 设计。
Arbitrum
除了批处理和压缩用户交易外,Arbitrum 排序器 还运行一个全节点。交易直接发送给排序器,排序器创建交易的可信 WebSocket 订阅9 随着它们被排序而发布。Arbitrum 将 此订阅 描述为 “软”最终性。排序器就排序承诺了用户通常可以依赖。节点、MEV 搜索者或其他人可以利用这个订阅通过应用交易来预计算 Rollup 状态。
排序器定期将排序后的压缩交易发布到宿主链。宿主链对序列的最终确定代表了 Rollup 的“硬性”最终性。一旦宿主链最终敲定该序列,它就成为 Arbitrum 链历史的不可变一部分。所有在其中排序的交易成为最终交易,相应状态也变得最终。
自然地,因为排序器设定了顺序,它具有优先写入访问权限10。排序器可以控制序列内容,从而控制 Rollup 历史中交易的排序。用户当然可以通过宿主链的 延迟收件箱 强制包括交易。搜索者已经竭尽所能地减少 WebSocket 交易订阅的延迟,因此看起来很可能他们会为排序 Arbitrum 交易形成一个强大的 MEV 市场。
有 13 个允许的 Arbitrum 提议者。每位提议者在特定提交中 押注宿主链 ETH,该承诺称为 “ RBlock” (即“Rollup 区块”)。用户可以选择依赖 某个百分比的股份 做出关于 Rollup 的最终决策,而无需运行 Rollup 全节点。虽然 Arbitrum 验证者可以识别欺诈,但 只有提议者组的成员 可以通过欺诈证明游戏来挑战该承诺的有效性,因此实际上只有 提议者 是完整的验证者。
正义,如同排序器,既盲目又需携剑
Optimism
除了批处理和压缩用户交易外,Optimism 排序器 也运行一个全节点。交易直接发送给排序器,排序器创建可信的 预最终确认 确认11 随着它们被排序。Optimism 用户可以将 这些确认 作为软最终性的来源。排序器就排序承诺了用户通常可以依赖。节点、MEV 搜索者或其他人可以利用这些确认通过应用交易来预计算 Rollup 状态。
排序器定期将排过序的压缩交易发布到宿主链。宿主链对序列的最终决定代表了 Rollup 的“硬”最终性。一旦宿主链确定了序列,它就成为 Optimism 链历史的不可变一部分。所有在其中排序的交易最终成为最终的,结果状态也最终。
自然地,因为排序器设定了顺序,它具有优先写入权限12。排序器可以控制排序内容,因此可以控制 Rollup 历史中的交易顺序。用户当然可以通过宿主链上的 存入交易 强制包括交易。作为 MEV 拍卖概念的创始人,似乎极有可能,排序 Optimism 交易的强大 MEV 市场将形成。
Optimism 只有 1 个允许的提议者。该提议者 签署 一项对宿主链的特定承诺,称为 “状态输出”或“L2 输出根”。 用户可以选择依赖 提议者 在做出关于 Rollup 的最终决策时,无需运行 Rollup 全节点。尽管 Optimism 验证者可以识别欺诈,但只有 单个允许的挑战者 可以通过签名来挑战该承诺的有效性。挑战者可以随时 删除 L2 输出根 13,而无需欺诈证明。 实际上,只有 允许的挑战者 可以作为完整的验证者。
总结
现在这两个主要的 Rollup 已经趋向于一种单一设计,这可能会变得相当混乱。它们经常对同一个概念使用不同的名称,但不要受骗,它们的设计几乎是相同的。我加粗了主要区别,以便你快速对比。
图片:构建区块。照片由 La-Rel Easter 提供 Unsplash
在我们对排序器有了完美的理解后,让我们继续讨论我实际上想谈的内容:共享排序器。当 Rollup 共享同一个排序器时会发生什么?
成为不同 Rollup 的意义是什么?
借用 Ben 的定义,我们应该将 Rollup 视为状态、状态转换函数以及(可选)证明系统。Rollup 拥有合约和账户,它有一个处理交易以更新那些合约和账户的 VM,非主权 Rollup 有一个用于操作到宿主链的铭刻桥的证明系统。这些组件有几种设计,并且可以在某种程度上互相混合与匹配。DA 极大主义的未来可能会有自助餐式 Rollup,提供各种自助式组件。
然而,有些组件可能更平等。总体而言,我们可能应将状态视为链的本质。链通常不会改变其状态。毕竟,以太坊的开发者多次更改 VM 多次更改共识机制,但状态只有一次变化。状态塑造 Rollup,VM 和证明系统的存在是为了支持它。因此,不同的 Rollup 具有不同的状态。它们可能共享一个证明系统或一个 STF,但两者的 Rollup 永远不会共享相同的状态。
提取、镜头和过滤
Rollup 从宿主链历史中提取其状态。为此,每个 Rollup 必须定义一个“ 提取” 函数。提取函数将宿主链历史排序为 Rollup 历史和非 Rollup 历史;随后,STF 处理 Rollup 历史以创建 Rollup 状态。实际上,提取函数成为 Rollup 检查宿主链的“镜头”。
Rollup 授权排序器选择下一次运行提取函数的输出。了解 Rollup 通过哪种镜头查看宿主,排序器选择 Rollup 节点将看到和处理的数据,从而对 STF 的操作和下一个状态有一定控制。排序器以廉价且简便的方式创建这些对宿主数据的视图。
在排序器创建这个视图后,Rollup 节点运行 过滤 函数。因为排序器不一定了解其服务的 Rollup 的状态,所以它被允许在序列中包括无效交易。在完成提取后,Rollup 节点会看到这些无效交易,并过滤出它们以去除这些交易。与宿主链不同,Rollup 节点不会在收到无效交易时发生错误,而是简单地忽略并继续执行。L1 必须禁止垃圾数据才能保持共识,而 Rollup 则不必。
图片:排序、提取和过滤。照片由 Nathan Dumlao 提供 Unsplash
共享排序
共享排序器为两个或更多的 Rollup 提供提取函数的输入。因此,它为这两个 Rollup 设置新的历史,控制 STF 的输入14。它可以为每个 Rollup 单独执行,也可以同时完成。当单独设置历史时,其运行方式与未共享的排序器完全相同。
然而,当为两个 Rollup 创建新的历史记录时,共享排序器可以通过原子地“链接”两个 Rollup 的历史记录使其享有额外的权力。排序器同时为每个 Rollup 生成序列,并确保两个都确认或都不确认。这使得排序器能够控制两个链的历史,因此在某种程度上也能够控制 Rollup 的下一个状态15。
原子纳入(Atomic Inclusion)(非原子执行)
在这一点上,我必须重申,排序器可以在其生产的排序上行使显著的自主权。这意味着,虽然用户可以利用共享排序器在多个 Rollup 上进行交易,而根本不与宿主链交互,但他们不能必然依赖排序器在这些交易之间产生任何特定的关系。共享排序器的支持者 envision 一种新结构,用户可以指定纳入的原子性,即排序器可以被迫通过共享强制排序机制在多个 Rollup 中同时排序一组交易。这将使用户能够确保所有原子交易都包含在 Rollup 历史中,或都不包含。
这并没有看上去那么好。因为只有无错交易可以进行强制排序16,唯有无错交易集合才能保证原子执行当原子纳入时。是的,我刚刚说了一件复杂而混乱的事情,所以让我们分解一下。正如我们之前所说,纳入和执行是分开的。Rollup 在纳入后通过过滤函数剔除无效交易,然后再执行。假设排序器将用户的原子集传入,并导致其中一笔交易失败或失效。该交易会在排序后被过滤掉,随后不会执行。这意味着原子纳入不足以保证原子执行,除非所有相关的交易都是无错的。
让我们非常具体一点,简单的发送和提取可以原子性地执行,但任何可错误的互动,比如交换或 DeFi 互动则无法原子执行。不幸的是,大多数高价值互动包含了一个或多个可错的交易,因此看起来很难利用原子纳入。如果是一种共享排序器,这实际上排除了通过它进行跨 Rollup DeFi 的可组合性。共享排序器并不是一个神奇的解决方案。用户在这个异步跨链模式下被锁定直到永远。
通过 Rollup 组合实现原子执行
记得之前提到排序器在提交序列到宿主链之前如何提供可信执行保证吗?你可以设想,一个共享排序器可以在多 Rollup 系统中做同样的事情。共享排序器可以运行每个 Rollup 的全节点,并利用这些信息来确定交易是否成功。然后它可以承诺17,不会生成一个不成功的原子交易序列。
这个系统当然是可信的。你将依赖排序器不会说谎。你可能此刻在想,“我们能不能通过约束排序器的行为将其转换为一个不可信的系统?”我很高兴/悲伤/困惑地说,答案是“是的,但”。是的,但我们将如何做到呢?为每个 Rollup 的 STF 组合成一个超级 STF,来执行所有组合的 Rollup 交易。也就是说,我们必须在所有 Rollup 之间使所有的 VM 保持原子性。这相当于将它们合并为同一个 Rollup。所以是的,我们可以实现不可信的原子执行,通过将多个 Rollup 合并为一个。这可能实际上是个好主意18,但我怀疑这是否可行。
通过应急关系实现原子执行
我在 其他地方 写过另一个可信的选项,那就是在交易和/或 Rollup 状态之间集成显式的附带关系。这将努力评估附带关系的负担转移到提议者身上,因为他们需要根据其对远程 Rollup 的信念计算并提议状态根。然而,我认为我们可以通过重复应用筛选函数来简化这一过程。假设在交易和区块中附带关系是显式的,我们可以过滤两次,第一次假设谓词状态是有效的,第二次假设谓词状态是无效的。这可以扩展为 n 个谓词状态,成本为 2^n 次过滤函数19评估。
在这种情况下,提议者可以以 2^n 根作为担保,并在每根下附加显式的附带关系。例如,提议者可以担保:“对于根 X 来说是 contingent,基于远程 Rollup 状态 A,否则是 Y”。通过这样,提议者无需去评估一个远程 Rollup 区块。相反,他们将多次评估自身的过滤函数和状态,基于来自另一状态的假设信息。这真的很酷,因为它保留了 Rollup 之间的分离,同时仍允许进行复杂的实时跨 Rollup 通信。
结论
排序器是上帝造钟表者。她设置了 Rollup 的历史,然后静静地观察着它ticktick走向注定的状态。Optimism 是 Arbitrum,但其安全性为 2 对 2,而不是 1 对 13。没有人知道排序器在做什么。共享排序器可以实现原子纳入,但无法实现原子执行。在没有 Rollup 组合或其他执行时机制的情况下,不可能通过原子纳入实现原子执行。对于共享排序器能够实现无缝互操作的各种夸大之词都是伪科学,尽管大多数重复它的人并不知道这一点。希望你喜欢信任假设,因为你正处于其中。
1 或非排序!
2 这在后面很重要!
3 哪个历史由宿主链和排序器生成,当然也包括。
4 不要与宿主链的区块提议者混淆。ORU 提议者向铭刻桥提交状态根。宿主链提议者则提出新的宿主链块。
5 由既定顺序确定。
6 或者完全无政府状态,这听起来还不错,或者基于宿主 MEV 供应链委托排序的 Rollup。
7 想法和祈祷 🙏
8 他们需要顺序才能计算新状态。
9 排序器可能会在 此订阅 中撒谎而不受惩罚。
10 类似于矿工或现代 PoS 以太坊中的区块提议者。
11 排序器可能会在 这些确认 中撒谎而不受惩罚。
12 类似于矿工或现代 PoS 以太坊中的区块提议者。
13 因此,结果是删除所有对根的后继块。
14 在某些约束内,例如强制纳入。
15 由于提取、过滤和状态-交易函数必须是确定性的,状态是确定性的,排序器在其他人之前知晓。
16 记住吗?我说过这一点在后面会很重要!
17 这就好像交接心愿。
18 Rollup 本质上互相竞争以争夺宿主资源,将这种竞争进行卡特尔化可能对所有人来说都是有利的。Rollup 合并可能会在未来出现,我认为这将会十分有趣。
19 所以你可能希望 n 要小出来。真的小一点。比如说 5,但也许 5 太大了?我不知道。
- 原文链接: prestwich.substack.com/p...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!