本文讨论了以太坊 L1 扩容和 blob 扩展的问题,探讨了网络吞吐量与本地构建者能力解耦的可能性,以及如何在保证网络审查抵抗性、目标吞吐量和区块生产活跃性的前提下实现这一目标。提出了通过 FOCIL 机制和改进链下基础设施来增强审查抵抗性,并探讨了 ePBS 在区块生产活跃性方面的作用。
非常感谢 Alex Stokes, Ansgar Dietrichs, Carl Beekhuizen, Caspar Schwarz-Schilling, Dankrad Feist, Data Always, Drew van der Werff, Eric Siu, Francesco d’Amato, Jihoon Song, Julian Ma, Justin Drake, Ladislaus von Daniels, Mike Neuder, Nixo, Oisín Kyne, Parithosh Jayanthi, Potuz, Sacha Saint-Leger, Terence Tsao, Thomas Thiery, Tim Beiko, Toni Wahrstätter 的评论和审查(这些不是背书)。我打扰了很多人,哈哈。
以太坊社区在接下来的几个月里应该进行重要的对话:如何看待本地构建(local building)?验证者集合(validator set)的未来是什么?如何扩展 L1(scale the L1)?如何扩展 blobs(scale the blobs)以便 L2 可以扩展?
为了做出这些决定,我们需要明确以太坊的目标是什么,以及我们实现审查抵抗、安全(例如,安全 + 活性)、规模或可验证性等目标的手段是什么。鉴于协议研发的最新进展,我们希望参与到探索这些特性如何进一步提升我们的用户和构建者的目标。
本笔记讨论了 本地构建(local building) 并提出了以下问题:
为了扩展 L1 并为 rollups 提供更多 blobs,我们是否应该将网络吞吐量与硬件配置最低的本地构建者所能实现的吞吐量解耦?如果是这样,我们还能保持本地构建者所保证的良好属性吗?
我们建议通过文章和新的“协议研究电话会议”中的公开讨论来组织更广泛的讨论。请查看 ethereum-magicians 上的公告!另请参阅“ 重新审视通往 SSF 的路径”,这是第二篇讨论家庭运营商在共识层中的作用的文章,也在第一次协议研究电话会议中讨论过。
在本笔记和后续笔记中,我们将关注协议角色(protocol roles),例如 证明者(attester) 或 构建者(builder),这些是协议期望履行的职能。负责履行角色的参与方是服务提供商(service provider),最终由以太坊网络上的一个 节点(node) 代表。将正确的节点分配给正确的角色,需要理解系统需要优化什么,以及在给定资源的情况下,各种节点对这些目标有多大的贡献。
一个 staking 节点预计会履行上述角色,或可能被期望履行(FOCIL 角色目前不存在,将在下面讨论)。
我们希望网络上的每个满足特定 硬件要求 的节点始终能够验证(verify) 以太坊的可用性和有效性。这是一个不可协商的约束。 一个拥有满足硬件要求的最基本(the most basic)资源的节点可以被称为最小节点(minimal node)。控制验证器(validator)的节点(一种捆绑了 证明者(attester),提议者(proposer),同步委员会(sync committee) 和其他功能的协议角色)被称为 Staking 节点(staking node)。
在本笔记中,我们讨论如何利用验证和构建之间的 不对称性。构建(building) 是将数据(无论是交易还是 blobs)追加到账本的行为。验证(verifying) 是接收这些数据并确信数据是可用的(“我知道构建者发布的所有数据都可以在网络上的某个地方恢复”)和有效的(“数据遵循协议规则,例如,包含在区块中的交易必须有效”)。构建(building) 为网络提供 吞吐量(throughput),即单位时间内提供的 gas 和 blobs。验证(verifying) 限制了这种吞吐量,使其达到节点在执行其他任务(例如证明)之前可以验证的数量。
构建者角色主要由 staking 节点外包给 外部构建节点(external building nodes)。
今天,硬件要求的设置使得最小节点始终能够完全验证链,并执行验证职责,包括为最终确定链生成 FFG 证明,以及为更新分叉选择规则生成 LMD-GHOST 证明。链的目标吞吐量的设置使得最小节点能够完全提供此吞吐量,即创建区块以提供高达目标吞吐量(及其相应的限制)。
精确地满足最低验证要求的最小节点能够运行验证器。
然而,在越来越多的地方,我们在 验证(verifying) 和 构建(building) 之间存在严格的不对称性。存在一个潜在的未来,其中拥有最基本资源并且仍然满足硬件要求的节点停止关注与构建相关的任何事情,而只是进行验证。在这种模型中,构建者将处理与扩展区块和 blobs 可能需要的大量吞吐量相关的要求。
例如,使用 PeerDAS,具有 8 倍资源的构建者可以创建一个 8 倍大的区块,而 1 倍的证明节点只需使用构建者的一小部分资源即可完全验证。虽然构建者必须自己上传 blobs,最坏情况下是 8 倍的数据(如果最小证明节点之前没有在自己的 mempool 中收到 blobs),但最小证明节点只需要下载 1 倍的量即可验证可用性并正确执行其职责。然后,我们可以允许具有严格更高上传带宽的构建节点来传播这些数据,而证明节点只需要一小部分带宽即可验证数据的可用性并将其传播给其对等点。
我们期望会出现巨大不对称性的另一个例子是,当 L1 EVM 被 snark 化时。然后,构建区块的主要成本将包括生成其有效性的证明,而网络上的每个其他节点只需要确保区块数据是可用的(你可以考虑将区块转储到 blob 中,随着我们 朝着完整的 DAS 发展,可用性检查变得更加轻量级)并进行恒定时间的计算以验证有效性证明。这个未来 可能比我们想象的要近得多,作为一个思考实验,我们是否应该充分利用构建 zkEVM 证明区块和验证它之间存在的巨大资源不对称性?这应该让我们意识到不对称性是扩展的机会,并引导我们询问是否应该在更直接的地方采取行动,例如扩展 blob 吞吐量。
虽然我们有许多 staking 节点执行证明服务,但网络中计算,带宽或订单流方面,资源更好(在计算、带宽或订单流方面)的构建节点较少。考虑到这些构建节点的存在,是否可以提高目标吞吐量?
到目前为止,我们将网络吞吐量保持在所有(all) staking 节点在执行构建角色时都可以达到的水平。我们阐明了我们希望满足的三个网络属性,以指导我们设计网络架构:
当 staking 节点不将其构建功能委托给单独的外部构建者时,我们称该节点为 本地构建者(local builder)。 本地构建者的存在在三个网络属性方面为我们带来了很多好处:
如果现在将网络吞吐量设置为高于最小本地构建者可以实现的水平,会发生什么? 第一个属性可能是受损最严重的,因为本地构建者可能无法以目标数量提供吞吐量。 然而,这种吞吐量可以通过外部构建者来恢复,因为 EIP-1559 目标并实现了某个固定数量。 值得注意的是,鉴于公共 mempool 的耗尽而倾向于私人池(请参阅 Data_Always 的分析),即使在今天,本地构建者平均也无法以当前目标提供吞吐量。 在这种假设情况下,其余两个属性受到的损害不会超过今天,因为在更高的网络吞吐量下,本地构建者仍然可以按今天的吞吐量提议区块,从而保证最小的活性,并以较低的吞吐量包含可能被审查的交易。
我们可能仍然会发现这种情况令人不安:如果我们希望本地构建者在经济上与外部构建节点保持竞争力,我们应该要求他们委托其构建功能。 但是,如果我们要求他们这样做,我们可能对上述任何三个属性的质量都不满意。 因此,如果我们想将网络吞吐量与本地构建者可以提供的吞吐量解耦,我们必须确保我们仍然实现这三个属性。 我们将在以下各节中讨论每一个属性。
通过 EIP-7805:分叉选择强制包含列表(Fork-choice enforced Inclusion Lists,FOCIL),我们相信审查抵抗属性在网络级别基本上是有保证的,从某种意义上说,以前的本地构建验证器可以通过 FOCIL 实现至少与本地构建一样多(但在实践中远多于)的审查抵抗。
FOCIL 机制从每个 slot 的验证器集合中选择 16 个新的包含者(includer),并且每个包含者都能够提出一个必须有条件地包含在为此 slot 提议的区块中的交易列表。 这些包含列表约束了当前 slot 的提议者或他们选择的构建者,从而阻止他们任意地将交易排除在网络之外。
FOCIL 每隔一个 slot 选择 16 个包含者,以对区块构建过程施加约束。
FOCIL 允许决定不再是本地构建者,将其构建功能委托给外部构建者市场的 staking 节点仍然参与提供审查抵抗。 本地构建者不需要在本地构建以提供审查抵抗或使用外部构建者来最大化其奖励之间进行选择,他们可以同时做到。
FOCIL 目前尚未部署,我们仍然需要选择一个将 FOCIL 扩展到 blobs 的设计。
网络必须仍然仔细选择目标网络吞吐量,以防止构建者交付的区块越来越难以被最小节点验证。 作为一个思考实验,我们是否可以简单地移除 gas 限制,让构建者(无论是本地的还是外部的)决定他们想要生产的区块大小? 我们将有两个问题:
依赖外部网络意味着它的失败成为系统的失败。 委托的本质决定了我们永远无法完全控制由我们的 staking 节点委托人(principals) 选择的构建“代理”的行为,或者阻止他们失败。 但最终,staking 节点本身也是协议的代理(agents to the protocol),并且可能会失败,或者未能提供协议寻求提供的服务。 因此,我们应该问的问题是我们能走多远,以及我们愿意走多远来减轻这些风险?
获得这些缓解措施有两种广泛的方法:改进链外基础设施 或 在协议中添加新功能。提议者-构建者分离(Proposer-Builder Separation,PBS) 今天通过链外 MEV-Boost 和 Commit-Boost 实例化,中继承担信任锚的角色以访问市场。 PBS 将通过链上 EIP-7732:链上提议者-构建者分离(Enshrined Proposer-Builder Separation,ePBS) 得到加强。 使用 ePBS,我们可以为市场参与者提供更好的保证,即,一方是 staking 节点,另一方是外部构建者,因为协议保证了两者之间的公平交换。
为了理解需要什么,我们必须理解委托构建角色的风险和失败。 我们永远无法完全排除“超时”活性失败的最坏情况,即即使在 staking 节点和构建者之间达成合约后,构建者仍未能交付区块。 我们可能面临更系统性的风险,即与外部市场的接口失败。 我们可能还会遇到一个构建者卡特尔,他们拒绝为任何人构建任何区块,除非 staking 节点向他们支付某种勒索租金。
我们现在给出一些论点来指导我们选择所需的防御武器库:
这里没有关于部署哪种解决方案组合的简单答案,特别是因为 ePBS 的论点不仅在于加强 staking 节点和构建者之间的交换,还在于通过提供更好的流水线来扩展(请注意,对于扩展论点,应该 在以下上下文中考虑 诸如 延迟执行(delayed execution) 之类的替代和/或补充方法,这是未来笔记/电话会议的主题)。
总的来说,有两个独立的讨论需要进行:
本地构建是获得区块生产服务活性以及审查抵抗的一种手段。 如果我们决定将吞吐量与网络中最差节点可以提供的最高水平相关联,那么本地构建也是对吞吐量的一种约束。 如果本地构建是我们 唯一 获得区块活性和审查抵抗的工具,那么这是一个合理的选择。 但如果它不是唯一的工具,也不是最好的工具,我们应该问自己:如果所有节点仍然能够以这种吞吐量可持续地验证链,我们是否可以将网络吞吐量移到本地构建者能够提供的吞吐量之上? 为了对此需求感到满意,我们需要进行哪些更改或改进?
_另请参阅 最近的关于此主题的演讲。_
- 原文链接: ethresear.ch/t/decouplin...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!