Mempool票证变体:经济学分析
本文探讨了以太坊 blob mempool 的垂直分片与 DoS 防护机制,提出了三种 mempool 票证方案:批发票、Mempool 租赁和简单票证,并分析了它们在 gas 消耗和用户体验上的权衡。文章指出垂直分片可大幅降低节点带宽需求,但需要票证机制防止 DoS 攻击。所有方案均可通过智能合约实现,无需硬分叉,便于未来调整。
这篇帖子是最近一次 Robust Incentives Group 会议讨论的总结,内容包含了所有 RIG 成员和 Francesco 的贡献。
垂直分片内存池可以释放验证者用于执行层内存池的带宽,因为验证者只需下载内存池中 blob 的样本,而非整个 blob。随着 PeerDAS(计划于 2025 年底左右在以太坊上实施的下一个重要升级)将 blob 数量增加约 8 倍,更低的 blob 内存池带宽使用量变得尤为重要。
仅下载数据样本会引入一种需要解决的 DoS 攻击。Dankrad 提议使用某种预付形式来保证支付,并限制可能淹没内存池的 Sybil 数量。Francesco 后来提议了一种名为“内存池票证”的特定 Sybil 保护形式。
当前内存池票证提案的两个主要问题是:
-
Gas:分配内存池票证的机制要求用户发送与 blob 交易不同的交易来购买票证。这些交易会消耗 gas。该机制不应消耗过多 gas,否则会减少常规用户可用的 gas。
-
用户体验:分配内存池票证的机制要求用户提前购买票证。这改变了用户体验,因为用户需要提前规划他们预期的需求。用户体验变化的程度在某些设计中可能很小(例如下面简单的内存池票证提案),但在其他设计中则更为明显(例如 LIFO 内存池租赁)。在 Rollup 必须立即发布 blob 但未预料到这一情况的特殊情况下,Rollup 始终可以通过 Calldata 发布。
由于当前的 blob 吞吐量几乎比我们预期通过 PeerDAS 和网络改进在短期内实现的吞吐量低一个数量级,因此很难预测良好的用户体验会是什么样子。吞吐量的增加和内存池票证都会改变用户体验,而且很难预测它们交互的影响。
然而,内存池的改进非常必要。因此,在这篇帖子中,我们:
-
提出了 3 种关于如何实现内存池票证的方案,并探讨了它们的权衡。
-
强调实现内存池票证不需要硬分叉,因为垂直分片内存池是一种无需硬分叉的网络升级,并且内存池票证本身可以通过智能合约实现。未来可以相对容易地更改智能合约,以适应 blob 提交者行为的变化。
批发票证
批发票证机制允许 blob 提交者一次购买相当大量的票证。在每个 Slot 中,销售的票证数量是 blob 供应量的 k 倍,例如,即使一个 Slot 最多只能包含 9 个 blob,我们也可以出售 90 个 blob 票证(k = 10)。超额供应票证允许 blob 提交者一次为多个 Slot 购买票证,这在操作上可能更简单。在每个 Slot 中销售票证可确保需要下一个 Slot 票证的 Rollup 仍然可以购买到,并防止仅在单个 Slot 销售可能导致的审查。
该机制的工作原理如下:
-
购买:在每个 Slot 中,格式为
(sender_ID, number_of_tickets)的订单被提交给智能合约。 -
分配:智能合约以订单为输入,输出
sender_ID列表、它们各自的allocated_tickets以及ticket_expiry_slot(指示票证何时过期)。对于与智能合约交互的每个订单,它分配 $\max(\text{number_of_tickets}, \text{tickets_left})$,其中tickets_left是一个变量,等于总票证数量与已分配票证数量之差。分配在每个至少有一个订单的 Slot 中进行。 -
Blob 传播:票证持有者可以在任何 Slot 中为他们持有的每张票证传播一个 blob。每个参与垂直分片内存池的节点都会维护一个本地列表,记录每个
sender_ID还剩多少张票证。在看到一个唯一 blob 的样本后,节点会从其本地列表中减去 1(从number_of_tickets中扣除)。
票证会过期,否则可能会存在大量票证储备,这可能导致同时在内存池中传播过多 blob,从而产生 DoS 向量。这里需要测试要设置的参数。然而,在超额供应因子 k 和影响 ticket_expiry_slot 的有效期之间存在明显的权衡:如果票证有效期更长,那么每个 Slot 应该出售更少的票证,以便在外流通的有效票证最大数量相同。
我们不在此处提议票证退款,正如之前提议的那样,因为退款票证成本需要更昂贵的系统(就 gas 而言)。
内存池租赁
这种内存池租赁机制允许一些票证持有者在更长时间内保留他们的票证,同时允许任何人可以在每个 Slot 购买票证。它通过维护一个所谓的租赁持有者列表来实现。新的租赁持有者可以通过设置比当前集合中最低押金更高的押金,或者通过设置最低押金并驱逐在集合中时间最短的租赁持有者来进入集合。
该机制的工作原理如下:
-
购买:在任何 Slot 中,格式为
(sender_ID, number_of_leases, deposit_per_lease)的订单被提交给智能合约。 -
分配:我们提出两种分配选项。第一种是权益质押系统,类似于某些区块链中使用的上限验证者集。第二种是后进先出系统,旨在将最有可能很快再次提交 blob 的租赁持有者保留在集合中,以最小化更替。
-
权益质押选项:智能合约维护一个长度为
N的列表,其中包含每个租赁持有者的(sender_ID, deposit)。对于与智能合约交互的每个订单,以及对于每个请求的租赁(在number_of_leases范围内),合约检查订单中的deposit_per_lease是否大于当前租赁持有者存入的最低deposit。 -
后进先出(LIFO)选项:智能合约维护一个长度为
N的列表,其中包含每个租赁持有者的(sender_ID, slot_entered)。对于与智能合约交互的每个订单,以及对于每个请求的租赁,如果deposit_per_lease大于min_deposit,则将具有最高slot_entered的租赁持有者从集合中移除,并将新租赁持有者的sender_ID连同当前 Slot 编号作为slot_entered添加到集合中。
-
-
Blob 传播:每个租赁持有者可以根据他们在垂直分片内存池中持有的每份租赁传播一个 blob。
如果今天实施内存池租赁,我们可能会看到 Base 连续多个 Slot 保留其租赁。其他链提交 blob 的频率没有那么高(参见 hildobby 的仪表板中“过去 24 小时 ~🕰️ 两次 Blob 之间的时间”的 Blob 提交者表格)。当每个 Slot 的 blob 吞吐量远高于今天时,内存池租赁机制可能会更好地工作,例如,在 PeerDAS 可能于 2025 年底左右带来的 blob 吞吐量增长 8 倍之后。
这种机制可能会显著影响 blob 提交者的行为。今天,blob 提交者倾向于同时提交大量 blob(例如,在 9 个 blob 限制吞吐量下,每个 Slot 3 或 6 个 blob)。内存池租赁机制可能会使 blob 提交者提交他们仍持有租赁的 blob。如果他们持有 2 份租赁,他们可能会在 3 个 Slot 内提交 2 个 blob,而不是在一个 Slot 内提交 6 个 blob。
此外,租赁机制可能更有利于大型链而非小型链。小型链可能没有足够的流动性来存入大量权益以在权益质押系统中获得内存池租赁,这将阻止他们使用垂直分片内存池。LIFO 系统可能更有利于大型链,因为它们无需发送新的订单交易就可以保留其租赁。大型链从中获得的好处应该微乎其微,因为它只是为他们节省了一些 gas 费,并且在更大的图景中不太可能影响 L2 之间的竞争。
简单的内存池票证
该提案是最简单的内存池票证提案,它使用发布价格出售与区块中可包含的最大 blob 数量相等的内存池票证。此机制在每个 Slot 中销售票证。
该机制的工作原理如下:
-
购买:在任何 Slot 中,格式为
(sender_ID, number_of_tickets)的订单被提交给智能合约。 -
分配 (与批发机制相同):智能合约以订单为输入,输出
sender_ID列表及其各自的allocated_tickets。对于与智能合约交互的每个订单,它分配 $\max(\text{number_of_tickets}, \text{tickets_left})$,其中tickets_left是一个变量,等于总票证数量与已分配票证数量之差。 -
Blob 传播:票证持有者可以根据他们持有的每张票证传播一个 blob。
该提案的优点是可能不需要超额供应(k = 1),因为票证在每个 Slot 中被购买。因此,对于每个 Slot 中 blob 内存池所需的节点带宽量可以有一个硬上限,这增加了节点可用于其他任务的带宽。
该提案与 Mike 和 Julian 之前的提案(使用了第一价格拍卖)非常相似。我们在此处改用发布价格机制,因为它消耗更少的 gas。
忠诚度票证
该提案将票证分配给在最近过去提交过 blob 的地址。目标是向最有可能在下一个 Slot 提交 blob 的 blob 提交者提供内存池票证。图 1(取自 Hildobby 的 Blob 仪表板)显示了 Base 如何消耗 43% 的 blob,World Chain 消耗 24%,Arbitrum One 消耗 9%,而其他 Rollup 消耗剩余的 24%。
图 1:blob 使用量的饼图,显示出幂律分布。
该机制可以如下工作:
-
监控:在每个 Slot 中,智能合约输入在前一个 Slot 提交了 blob 的 blob 提交者(存储为
sender_ID)。智能合约维护一组sender_IDN 的权重。它按如下方式为每个sender_ID分配权重:- $Update_i = \alpha \frac{Blobs_i}{Total\ Blobs} + (1 - \alpha) Old\ Weight_i$
- $New\ Weight_i = \frac{Update_i}{\sum_{i \in N} Update_i}$
- 我们可能会考虑一个最小权重,使得被分配的 blob 提交者至少获得例如 3 张票证,因为 blob 提交者似乎每个区块至少提交 3 个 blob 以分摊成本。
-
分配:在每个 Slot 中,
n张票证按比例分配给sender_IDN 集合,根据其权重四舍五入到最接近的整数,并以max_blobs为上限。n可以是每个 Slot 可能提交的最大 blob 数量的倍数。 -
Blob 传播:票证持有者可以根据他们持有的每张票证传播一个 blob。
该机制看起来类似于上面描述的 LIFO 租赁机制。两者都试图将票证分配给最有可能在下一个 Slot 需要票证的地址。我认为需要利用当前的 blob 提交者行为进行模拟,才能完全理解两者之间的差异。
此外,Francesco 提议将此机制与简单的内存池票证机制混合,以允许自由进入,同时最大化需要票证的 Rollup 已经拥有票证的概率。
最后,需要微调参数以最小化对 Rollup 的 UX 负担。我们需要进行模拟。由于 blob 提交者行为可能会随着 blob 吞吐量的增加而发生显著变化,因此可能需要更改参数,这可以通过对智能合约进行更改来实现。
协议外拍卖与免费票证
为了降低系统的 gas 成本,我们从基于拍卖的系统转变为发布价格系统。在拥塞的情况下,我们假设 blob 提交者可以为其购买票证的订单附加优先费,并且构建者会优先处理优先费更高的交易,而不是优先费较低的交易。
由于我们假设支付更高优先费的交易会优先于支付较低优先费的交易,因此我们不需要对票证收取费用。无论票证价格如何,想要通过垂直分片内存池传播其 blob 的 Rollup,攻击者若想阻止它们,都需要出价高于 Rollup。拥塞将极为罕见,并且很可能由攻击者造成,因为票证是 k 倍超额供应于最大 blob 数量,而目标 blob 数量仅为最大数量的 2/3。换句话说,自然需求必须达到预期的 15 倍才会导致拥塞(在 k = 10 的情况下)。
请注意,最坏情况的攻击会阻止 Rollup 在一段时间内使用垂直分片内存池。Rollup 仍然可以使用私有构建者内存池或 Calldata 来发布其数据。最坏情况的攻击成本很高,因为攻击者要么需要承担高于 Rollup 的出价成本,要么必须放弃 Rollup 愿意支付的优先费。
免费票证降低了系统的复杂性,从而降低了 gas 成本,因为无需设置最低价格,也无需实施退款。
智能合约实现
上述所有内存池票证/租赁提案都可以通过智能合约实现,并且不需要硬分叉。智能合约选择一个分配规则(例如 LIFO 内存池租赁或简单的内存池票证)。它接受订单作为输入,并输出一个 sender_ID 列表,这些地址可以在垂直分片内存池中传播 blob。然后,节点获取此列表,并在其执行层垂直分片内存池中使用它。
最后,垂直分片内存池也不需要硬分叉,因为它是一个网络层面的更改。垂直分片内存池确实需要社会协调,因为 blob 提交者必须分片其 blob 才能在该内存池中传播。
重要的是,由于内存池票证分配将通过智能合约进行,因此更改相对容易。假设 blob 提交者的行为发生了变化,可以交换包含内存池票证分配规则的智能合约,以使用更适合新行为的另一个合约。
与稀疏 Blob 池和水平分片的比较
在本节中,我们将垂直分片内存池与稀疏 blob 池和水平分片提案进行比较。本节假设读者熟悉垂直分片内存池、稀疏 blob 池和水平分片提案。
稀疏 Blob 池
在稀疏 blob 池中,节点以某种概率完整下载 blob(提议为 $p=0.15$),否则对其进行采样($p=0.85$)。这意味着每个 blob 必须下载的预期数据量为 $0.15 + \frac{0.85}{8} \approx 25%$。在垂直分片内存池提案中,仅为 $\frac{1}{8} = 12.5%$。因此,垂直分片内存池减少了节点在内存池中需要使用的带宽量。如果分片因子(上面的 8)进一步增加,这一点尤其重要,而这被讨论为未来会发生。
稀疏 blob 池提案的一个优点是,与现状相比,它不会改变 blob 提交者的用户体验。内存池票证确实会改变用户体验。内存池票证概念的潜在迭代可能会将用户体验改变为 Rollup 想要的东西,例如提前固定 blob 价格。
水平分片
在水平分片内存池中,验证者使用规则来决定是完全下载 blob 还是不下载。优点是水平分片内存池可能易于实现,因为不需要票证系统来防止 DoS 攻击。缺点是每个节点每个 Slot 使用的带宽具有高方差,因为在某些 Slot,验证者可能需要下载许多 blob,而在其他 Slot 则不需要。
重要的是,垂直分片内存池可以防止验证者做重复工作,因为他们可以下载在执行层内存池中看到的 blob 的样本,并且在区块到达时无需在共识层再次下载(假设采用单元级消息传递)。在水平分片内存池中,验证者会做额外的工作,因为他们会在执行层内存池中下载他们不需要的部分 blob,然后在区块到达时需要在共识层下载样本。尽管在 FullDAS 中,验证者可能需要托管完整的 blob(而不仅仅是 PeerDAS 中的样本),但 PeerDAS 是当前正在交付的,而 FullDAS 何时到来尚不可知。
结论
改进 blob 内存池是当务之急,因为当前的内存池无法承受以太坊可能很快看到的 blob 数量的大幅增长。垂直分片内存池是一个有吸引力的解决方案,因为它大大减少了内存池所需的带宽,并防止在共识层上执行共识关键的数据可用性采样时进行重复工作。
实施垂直分片内存池的主要问题在于需要某种 DoS 预防机制。在这项工作中,我们提出了三种内存池票证机制,它们可以在启用垂直分片内存池的同时防止 DoS。主要权衡在于影响用户体验和运行该机制所需的 gas。表 1 总结了本文提案的属性。
| 批发票证 | 内存池租赁(权益质押) | 内存池租赁(LIFO) | 简单的内存池票证 | |
|---|---|---|---|---|
| Gas | 低。少量交易即可购买许多票证。 | 高。理想情况下租赁持有者更替率低。机制需要更复杂的智能合约。 | 高。理想情况下租赁持有者更替率低。机制需要更复杂的智能合约。 | 中。智能合约简单,但每个 Slot 都需要购买票证。 |
| UX 优点 | 可用票证多。 | 大型 Rollup 可能不需要每个 Slot 都购买票证。 | 大型 Rollup 可能不需要每个 Slot 都购买票证。 | 几乎不需要预估。 |
| UX 缺点 | Rollup 有被审查的风险。 | 小型 Rollup 需要足够的流动性。 | 小型 Rollup 可能在租赁费用上花费比例更高的费用。 | 需要每个 Slot 都购买票证。 |
| 其他 | 不适用 | 不适用 | 不适用 | 带宽使用量的硬上限。 |
表 1:批发票证、内存池租赁(权益质押和 LIFO)以及简单的内存池票证提案的 gas 和用户体验属性摘要。
重要的是,票证机制可以根据需要相对容易地替换为另一种,因为它们是通过智能合约实现的,并且不需要协议更改。这一点尤其重要,因为不仅内存池票证会改变 blob 提交者的用户体验,我们很快将看到的吞吐量大幅增加也会改变用户体验。吞吐量增加和内存池票证对用户体验的交互影响难以预测,因此内存池票证机制的灵活性是可取的。
- 原文链接: ethresear.ch/t/variants-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
