感谢 Switchboard 团队的 Conor、Lin 和 Swapnil、Taiko 团队的 Cecilia 和 Brecht、Alex Obadia、Justin Drake、Artem Kotelskiy 和 Chainbound 团队的审核。
抽象的
在分散的环境中就时间达成一致可能具有挑战性:挂钟可能会在机器之间漂移,代理可能会谎报其当地时间,并且通常很难区分恶意和不同步的时钟或网络延迟。
以太坊可以看作是一个全球时钟,其滴答速率约为每 12 秒 1 次。此滴答速率由共识协议强制执行:过早或过晚生成的区块和证明将被视为无效。但是,为了实现低于 12 秒的粒度,我们应该怎么做呢?我们是否始终需要共识协议来跟踪时间?
我们希望在不受信任的 L2 序列器的背景下探讨这些问题,他们没有任何动力去遵循当前由受信任的 L2 序列器维护的 L2 区块时间表,并且可能会玩各种形式的计时游戏以最大化他们的收入。
在本文中,我们引入了一种机制,用于在具有轮换领导者机制的去中心化 rollup 中强制执行序列器的及时性、安全性和非提取性排序,而无需依赖额外的共识、诚实多数假设或利他主义。为此,我们使用三个关键原语:
- 客户端订购偏好,
- 以太坊作为全球 12 秒时钟,
- 可验证的延迟函数。
最后,我们展示了 MR-MEV-Boost 的案例研究,这是 MEV-Boost 的一种修改,它能够实现基于预确认的变化,其中可以应用探索的相同构造来减少提议者的计时游戏。
基本原理
Rollup 排序器是负责排序(大多数情况下是执行)L2 交易并偶尔在 L1 上更新 L2 状态根的实体。目前,中心化排序器受益于构建它们的团队的声誉抵押,以保持以下五个属性:
- 响应性:及时通过软承诺/预先确认来响应用户交易。我们要强调的是,此定义包括在 rollup 对等网络上及时广播不安全的头像。
- 明确性(安全性) :在 L1 上提交有序批次时遵守预先确认的承诺,这最终将决定交易的总体排序。
- 非提取性排序:不通过抢先交易或夹持从用户那里提取 MEV,或通过接受贿赂来获得抢先交易特权。
- 活跃度:将批次发布到 L1 并定期更新规范汇总状态。
- 抗审查:确保无论发送者、内容或任何外部因素如何,排序器都不会故意排除任何有效交易。
在本文中,我们关注的是如何在无权限、不受信任的环境中维护前四个属性。请注意,抗审查性由结构保证:通过在不同地域和管辖区引入多个组织不同的排序器,我们可以有力地保证任何交易最终都会被接受。
考虑一个去中心化的排序器集合S := \{S_1,\dots,S_n\} S : = { S 1 , … , S n },它具有可预测的领导者轮换机制和与已知数量的 L1 时隙相对应的排序窗口。为简单起见,我们假设S_{i} S i是当前领导者, S_{i+1} S i + 1是下一个领导者。在任何时间点,只有一个排序器处于活动状态并锁定汇总状态。
以下是序列器S_i S i可以探索的两种策略,以最大化其预期值:
1. 延迟纳入交易
假设用户在某个 L2 时隙向S_i S i发送交易。然后,排序器可以等待一段时间再将交易插入块中,以便与搜索者合作进行夹层攻击或直接抢先交易来提取更多 MEV。特别是,由于 MEV 随时间呈超线性增长,因此过早提交交易不符合排序器的最佳利益。最坏的情况是排序器延迟包含交易,直到排序器旋转$^1$。
2. 不要在 Rollup 点对点网络中发布不安全的头像
在这种情况下,排序器在汇总网络中发布不安全区块的动机很低:由于 L2 区块是由排序器签名的(例如在Optimism中),它们充当具有约束力的承诺,用户可以在出现模棱两可的情况时将其削减。
这对 rollup 的用户体验产生了重大的下游影响:下一个排序器和用户都需要等到一批交易被纳入后才能看到最新的交易。对于用户来说,这意味着他们无法及时了解其交易的状态,而下一个排序器则有可能在无效状态下构建区块。
我们现在将探索缓解这些行为的机制并为序列器引入削减条件。
基本原则 1:交易截止日
我们引入了一种新的 EIP-2718 交易类型,其中包含一个附加字段:
-
deadline
-uint256
表示交易被视为有效的最后一个 L2 区块编号。
这个想法并不完全是新的。例如, LimeChain团队在他们的Vanilla Based Sequencing文章中探讨了这一点。然而,在我们的变体中, deadline
字段是作为交易有效负载的一部分进行签名的,并且不会在 L1 时隙中表示。
其背后的原因是,sequencer 无法篡改deadline
字段或block.number
(因为它是一个单调递增的计数器),因此,如果 sequencer 将用户交易插入到block.number > deadline
的块中,则很容易修改 L2 派生管道以归因于故障。
这种方法可以缓解问题1。然而,它并没有以任何方式解决响应性问题,因为排序器仍然可以延迟提议区块以提取更多 MEV。
原语 2:以太坊作为全球时钟
一个简单的旋转排序器设计是, S_i S i在其排序窗口W_i W i结束后失去结算批次的能力,这由 L1 智能合约决定。但是,排序器仍然需要一些时间来发布包含最新 L2 块的批次。因此,我们引入了一个包含窗口,该窗口比W_i W i提前n \geq 1 n ≥ 1 个时隙,其中S_i S i仍然有时间使用最后的 L2 块将汇总批次放到 L1 上,即使排序的责任已转移到S_{i+1} S i + 1 。
如果出现任何安全故障,序列器应被削减。如果序列器未能在其包含窗口结束前发布所有分配的 L2 块,它将放弃所有相关奖励。或者,也可以对活跃度故障进行惩罚。这也有助于解决与下一个序列器的协作问题,确保它在n\cdot12 n ⋅ 12秒内知道最新的块。理想情况下,我们希望将n n保持在尽可能小的值1 1 。
这里仍存在一些潜在问题:将交易纳入以太坊是概率性的,这意味着您无法确定您发送的交易是否会及时纳入。在这种情况下,这意味着诚实领导者发送的最后一批交易可能不会在其纳入窗口结束时纳入 L1。可以通过两种方法来解决此问题:
- 一种“基于”的设置,其中排序器也是 L1 区块提议者,并且可以包含他们必须提议的任何交易,或者
- 使用像Bolt这样的协议的提议者承诺。我们将在下面的“进一步的工作”部分中对此进行更详细的阐述。
请注意,我们假设有一个注册表智能合约可供当前活动的排序器参考,即它实现某种领导者选举机制并负责排序器债券以及奖励和惩罚。rollup 治理将决定注册表是否可以完全免许可或是否应使用允许列表。如果出现任何不当行为,治理将用于暂时或永久将排序器从允许列表中删除。
原语 3:可验证延迟函数
可验证延迟函数(下称 VDF)是一种加密原语,它允许证明者向验证者显示运行某个函数所花费的一定时间,并以验证者可以快速检查结果的方式进行。
例如,考虑加密哈希函数h h并定义应用程序
其中s s是一个字节数组, n n是一个自然数。
组合(或链接)哈希函数(如 SHA-256)无法通过并行计算轻松加速,但该解决方案缺乏有效的验证$^2$,因为验证结果的唯一方法是重新计算函数组合。该解决方案在Boneh 的论文中以朴素 VDF 的形式出现,因此被称为弱的。
VDF 的另一个例子是对隐藏顺序的群进行迭代平方,利用它可以构造时间锁谜题。我们将在下一节中探讨后者的用法。
为什么是 VDF?
VDF 在排序环境中非常有用,因为它们可以作为区块持续时间的经过时间的证明(特别是block_time
/ max_adversary_speedup
,请参阅“安全注意事项” )。考虑以下区块生产管道算法:
- 在 L2 块N N开始时,序列器开始计算一个 VDF,对于诚实玩家来说,该 VDF 需要花费 L2 块的时间(或略少一些)来计算,并使用前一个块哈希作为其输入。
- 在 L2 时隙结束后,序列器构建一个块B_N B N ,其中标头包含 VDF 的结果,表示为V_N V N 。我们称之为密封块。这意味着块哈希摘要包含V_N V N 。
该算法具有创建 VDF 计算链的良好特性,在某种意义上类似于Solana 的历史证明,我们从中继承了安全保证。这在排序器上下文中给我们带来了什么?如果我们记得排序器有一个特定的截止日期,它必须在该截止日期之前发布由 L1 时隙计划设置的批次,那么我们可以让 L1 强制至少需要结算一定数量的 L2 块。这有两个下游结果:
- 排序器必须在排序窗口开始时立即开始生成和封装区块。将此与交易截止期限属性配对会产生交易确认的时间上限。如果他们不遵循 VDF 和 L1 设置的区块时间表,他们就有可能无法发布任何批次。
- 我们通过消除隐瞒数据的动机(不考虑纯粹的恶意攻击)来缓解问题#2 :这是因为序列器无法篡改现有的 VDF 链,这将需要重新计算所有后续 VDF 并导致无效批次。
总的来说,为了便于理解,我们将考虑一个通用的 VDF,将其作为“黑匣子”提供,同时牢记哈希链示例,该示例目前对 ASIC 等临时硬件具有更强的保证。请参阅下面的“安全注意事项”以了解更多见解。
证明 VDF 正确
如果排序器在 L2 区块头中提供了无效的 VDF,则应将其削减,理想情况下,我们希望在结算时确保这一点。但是,由于 gas 成本,在 EVM 上重新计算长哈希链是不可行的。
那么如何证明 VDF 的迭代次数无效?一种方法是乐观地强制执行(或者在 ZK-rollup 的情况下在结算时),要求在 rollup 的派生管道中提供有效的 VDF 链输出。如果乐观 rollup 中存在模棱两可的情况,则可以使用欺诈证明来挑战排序器。
硬件要求
由于根据定义,VDF 不能通过并行来加速,因此只能使用 CPU 的单个核心来计算 VDF,在我们的块生产算法中也是如此。
这使得它与大多数工作量证明共识算法(如比特币)不同且更加轻量级,比特币需要扫描一个值,使得当使用 SHA-256 进行散列时,散列以一定数量的零位开头。
还值得注意的是,现代 CPU 已针对计算 SHA-256 哈希函数进行了优化。自 2016 年以来,英特尔从Goldmount系列芯片开始,在Core和Xeon 系列的部分型号中提供SHA 扩展,引入了三条新指令,专门用于更高效地计算哈希函数算法的不同步骤。
最后,单核性能多年来一直停滞不前,这表明投资最新一代 CPU 的收益很小,从而降低了系统的要求。
案例研究:MR-MEV-Boost
Multi-Round-MEV-Boost是 MEV-Boost 的修改版,通过在单个 L1 时隙内运行多轮 MEV-Boost 拍卖来实现基于预确认。此原语的用途是在每轮之后输出由 L2 区块构建器构建的基于汇总区块。如文章所示,这种方法继承了 L1 PBS 管道,并因此减轻了基于预确认的一些负面外部性。
与 MEV-Boost 一样,此分叉依赖于选择加入的提议者作为拍卖人,通过调用中继的getHeader
( Builder-API ) 端点来结束密封拍卖。签署密封出价后,提议者调用getPayload
( Builder-API ) 来接收中标出价的实际内容,并在基于 rollup 的网络中发布区块。
在原始协议中,拍卖结束通常与 L1 时隙结束一致(更准确地说,大约晚于其一秒);延迟拍卖会导致无法及时广播区块以收集所有必要的证明并放弃所有相关奖励的风险很高。因此,每十二秒都会提出一个区块时间,并由以太坊共识强制执行。
相比之下,鉴于它包含在时隙期间发生的多轮,在 MR-MEV-Boost 中,不受信任的提议者会被激励在几秒后或更早结束拍卖^{3} 3根据收到的出价,以提取更多 MEV。在最坏的情况下,MR-MEV-Boost 将反映 L1 区块时间。这造成的另一个后果是基础汇总的时隙时间不一致。这可以看作是一种更为严重的计时游戏形式。
文章中讨论了解决该问题的可能方法如下:
- 引入用户激励:如果用户确定提议者行为不当,他们就会停止向该提议者发送交易。
- 引入一个委员会(共识)来证明及时性并维持时段长度。
我们现在认为,确实存在一种无需用户采取行动就能强烈限制提议者的无需信任的解决方案,而且它利用了我们在去中心化排序背景下用于 VDF 驱动的区块生产算法的相同构造。
构造过程相当简单,包括计算持续时间为x := 12/r x : = 12 / r秒的 VDF,其中r r是 L1 时隙中的轮数(L2 块时间)。提议者必须使用之前基于汇总块的哈希作为公共输入来计算此 VDF,并在轮次结束时将其与修改后的getPayload
调用的主体一起发送。VDF 的输出随后存储在汇总块头中,如果无效,则在成功进行欺诈证明后可能导致提议者被削减。
通过这种方法,提议者可以延迟一轮结束的时间是有限的:例如,如果第一次拍卖晚了一秒结束,那么在最后一轮中,它将无法为 VDF 提供三秒的计算时间,而是两秒,从而导致无效块并随之而来削减$^4$。这是因为为了开始计算有效的 VDF,它需要前一个块哈希作为其输入,这意味着一个密封的块。
安全注意事项
VDF 对于此用途来说真的安全吗?
假设对手拥有的硬件能够以比诚实玩家基线更快的速度计算 VDF ,而不会被注意到(否则 VDF 的迭代次数将由协议调整)。那么,攻击者的速度越快( max_adversary_speedup
),我们的构造对其可能行动空间的限制就越少。特别是,序列器将能够稍后提交块,并能够重新组织其中一些块以提取更多价值。
然而,鉴于我们不需要“快速证明”属性,哈希链已被证明与 Solana 的历史证明相得益彰,并且至少在短期内仍将如此。此外,我们的安全要求不会像需要永远铭刻在以太坊中的东西那样严格。
在下面的“进一步工作”部分可以找到一些获得更强的安全保障的解决方案和方向。
当前的限制
测序仪的可信度
与许多利用(重新)质押的新服务一样,排序器的可信度有一个上限,即其质押的金额:如果 MEV 机会超过了这个上限,那么理性的、不受信任的参与者宁愿被削减并获得 MEV 奖励。
领导人轮换可能是关键时刻
如批处理程序和注册表智能合约部分所述,与排序窗口相比,包含窗口至少向前移动了一个时隙。这是必要的,因为在轮换领导者之前需要时间来结算最后一个批次,但留下了至少 12 秒的额外时隙时间,在此期间,排序器有空间重新组织最后的 L2 块,然后将它们发布到 rollup 对等网络上。因此,如果立即开始排序,S_{i+1} S i + 1可能会在无效状态下构建块,因此活性会暂时受到损害。
最后,根据最近关于 blob 的插槽包含率的数据,一个额外的插槽可能不足以解决一批问题。这可以通过利用新的包含预确认协议来缓解,如下所述。
测序仪最后查看
我们的构造使得排序器在提交区块后很难对其进行重组,但它并不能完全解决抢先交易问题。具体来说,排序器可能会在构建具有相关deadline
字段的区块时从用户交易中提取价值。以下部分将探讨一种可能的解决方案及其局限性。
结论
在本文中,我们探索了在去中心化汇总环境中强制执行不受信任的 L2 序列器的及时性、安全性和非提取排序的机制。
所讨论的原语确保排序器能够更可预测、更公平地运行,从而缓解交易延迟和数据扣留等问题。此外,这些技术可以减少对现有单排序器汇总的信任假设,符合汇总作为“带有区块链脚手架的服务器”的概念。这些发现为未来开发去中心化、安全的汇总架构提供了一个强大的框架。
进一步的工作
可信执行环境 (TEE),确保排序器未运行 ASIC
可信执行环境是 CPU 的安全区域,通常称为“飞地” ,可帮助保护其中加载的代码和数据的机密性和完整性。
它在区块链协议中的使用是一个活跃的研究领域,主要关注点是信任硬件制造商以及过去某些实现中发现的各种漏洞(这里是最新的)。
根据用例,这些信任假设和漏洞可能会成为交易破坏者。然而,在我们的设置中,我们只需要保证序列器不使用专门的硬件来计算 VDF,而不必担心安全区机密数据可能泄露或挂钟/单调时钟被操纵。
适应现有的反 ASIC 工作量证明算法
Monero区块链于 2014 年推出,是比特币的隐私和不可追踪替代品,它使用一种名为RandomX的抗 ASIC 工作量证明算法。引用他们的README
:
RandomX 是一种针对通用 CPU 进行优化的工作量证明 (PoW) 算法。RandomX 使用随机代码执行(因此得名)以及多种内存硬性技术来最大限度地降低专用硬件的效率优势。
然而,该算法利用了一定程度的并行性;它是否可以适应单核版本,从而产生新的弱 VDF,是一个有趣的研究方向。
这种方法虽然与使用 TEE 无关,但可以实现相同的结果,即保证测序仪不使用复杂的硬件。
时间锁定难题,防止抢先交易
正如“当前限制”部分所述,我们的构造不会限制序列器抢先交易用户的问题。幸运的是,这可以通过要求用户使用时间锁定谜题加密敏感交易来解决,我们将在另一篇文章中更详细地展示。然而,这种解决方案并不是免费的:加密交易或加密内存池可能会激励垃圾邮件和统计套利,尤其是在协议费用不是很高的情况下。
纳入预先确认和数据可用性层
通过使用一些新的预确认协议(如 Chainbound 的Bolt或 Primev 的MEV-Commit )来保证在同一时隙内包含,可以提高 L1 合约的批量提交效率。特别是,排序窗口应该恰好在提议者运行上述协议的时隙之前的时隙结束,以便利用包含承诺。
此外,该批次可以发布到由提议者运行的高效、轻量级数据可用性层中,以在时隙开始时强制执行可配置秒数的截止日期,否则序列器将被削减。
脚注
- 更准确地说,如果操作员控制多个后续测序仪,它可能会延迟包含直到最后一个测序仪旋转。
- 在 Solana 中,SHA-256 链的验证实际上是并行的,但需要将与约 400 毫秒计算相关的块分成 32 个碎片,这些碎片在计算完成后立即转发给其余验证者。因此,通过并行计算哈希链的中间步骤可以加快验证速度。
- 一般而言,提议者会提前结束某些轮次,从而延迟其他轮次。例如,它可以强制延长最后一轮,以利用可能的 L1 <> L2 套利机会。
- 有一种极端情况是,提议者即使诚实也可能无法计算所有 VDF,这是由于轮换机制造成的:由于 VDF 的公共输入必须是前一个 rollup 区块哈希,因此在轮换期间,下一个领导者需要一些时间才能从 rollup 网络听到区块,可能超过 1 秒。这可能会导致下一个提议者在计算 VDF 时出现延迟。
为了降低这种风险,下一个提议者可以依靠各方来接收这些信息,例如流媒体服务和/或可信中继。