这篇文章总结了最近一次 Robust Incentives Group 会议上的讨论,其中包含了所有 RIG 成员和 Francesco 的意见。
记忆体池垂直分片可以释放验证者用于执行层记忆体池的频宽,因为验证者只需下载记忆体池中的 blob 样本,而无需下载整个 blob。降低 blob 记忆体池的频宽占用尤其重要,因为随著PeerDAS的推出,blob 的数量将增加约 8 倍。 PeerDAS 是以太坊计划于 2025 年底左右推出的下一个重大升级。
光是下载资料样本就会引发 DoS 攻击,需要加以解决。 Dankrad建议使用某种形式的预付款来保证付款,并限制可能淹没记忆体池的 Sybil 攻击数量。 Francesco 后来提出了一种名为「记忆体池票证」的特定 Sybil 保护形式。
目前记忆体池票证提案主要存在两个问题:
Gas :分配记忆体池票的机制要求使用者发送交易(不同于 Blob 交易)来购买记忆体池票。这些交易会消耗 Gas。此机制不应消耗过多的 Gas,因为这样会将剩余的 Gas 留给一般使用者。
使用者体验:分配记忆体池票证的机制要求使用者提前购买票证。这会改变使用者体验,因为使用者需要提前规划他们预期的需求量。在某些设计中(例如下面的简单记忆体池票证提案),这种使用者体验的改变可能很小,但在其他设计中(例如后进先出记忆体池租赁)则更为明显。在特殊情况下,如果 rollup 必须立即发布 blob 而用户没有预料到这种情况,那么 rollup 始终可以透过 calldata 进行发布。
由于目前的 blob 吞吐量几乎比我们预期透过 PeerDAS 和网路改进在短期内实现的吞吐量要小一个数量级,因此很难预测良好的用户体验是什么样的。吞吐量的提升和记忆体池票据都会改变使用者体验,而且很难预测它们相互作用的效果。
然而,记忆体池的改进非常必要。因此,在本文中,我们:
提出 3 项关于如何实施记忆体池票证的建议并探讨其权衡。
需要强调的是,实现内存池票据无需硬分叉,因为垂直分片内存池本身就是网路升级,无需硬分叉,并且内存池票据本身可以通过智能合约实现。未来,智慧合约可以相对轻松地进行修改,以适应 Blob 提交者行为的变化。
批发门票
批次发票务机制允许 Blob 提交者一次购买相当数量的票务。每个时段的票务出售数量是 Blob 供应量的k倍,例如,即使每个时段最多只能包含 9 个 Blob( k = 10),我们也可能售出 90 张 Blob 票务。票务供应过剩允许 Blob 提交者一次购买多个时段的票务,这在操作上可能更简便。在每个时段都售票可以确保需要下一个时段票务的 rollup 成员仍然可以购买,并避免仅在一个时段售票时可能出现的审查。
机制的工作原理如下:
购买:每个时段内,以
(sender_ID, number_of_tickets)形式提交的订单都会提交给智能合约。分配:智能合约将订单作为输入,并输出一个包含
sender_ID、其对应的allocated_tickets和ticket_expiry_slot(代表票证到期时间)的清单。对于与智能合约互动的每个订单,它会分配\\max(\\text{number\\\_of\\\_tickets}, \\text{tickets\\\_left})个票证。最大限度(文字号码 _的_门票,简讯票 _ left ) ,其中tickets_lefttickets_left一个变量,等于票总数与已分配票数之间的差值。分配发生在每个至少有一个订单的时段。Blob 传播:持票人可以在任意 slot 中传播其持有的每个票证的一个 Blob。每个参与垂直分片记忆体池的节点都会维护一个本地列表,其中包含每个
sender_ID剩余的票证数量。在看到唯一 Blob 的样本后,该节点会将number_of_tickets减 1,从而更新其本地列表。
票务会过期,否则可能会有大量票务储备,导致过多的区块同时在记忆体池中传播,从而可能造成 DoS 攻击。此处设定的参数需要经过测试,然而,过剩供应因子k和影响ticket_expiry_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提交者」表格)。当每个slot的blob吞吐量远高于现在时,记忆体池租约机制可能会更好地发挥作用,例如,在PeerDAS将blob吞吐量提高8倍之后,到2025年底左右可能会实现这一目标。
此机制可能会显著影响 Blob 提交者的行为。目前,Blob 提交者倾向于同时提交大量 Blob(例如,在吞吐量限制为 9 个 Blob 的情况下,每个 slot 提交 3 个或 6 个 Blob)。内存池租约机制可能会要求 Blob 提交者提交他们仍持有租约的 Blob。如果他们持有 2 个租约,他们可能会在 3 个 slot 内提交 2 个 Blob,而不是在一个 slot 内提交 6 个 Blob。
此外,租赁机制可能对大型链比小型链更有利。小型链可能缺乏足够的流动性来存入大量权益以获得基于权益的系统中的内存池租赁,这将阻止它们使用垂直分片的内存池。后进先出 (LIFO) 系统可能对大型链更有利,因为它们将保留租赁而不发送新的订单交易。大型链从中获得的优势应该很小,因为它只是节省了一些 gas 费用,不太可能从更大角度影响二级节点之间的竞争。
简单记忆体池票证
此提案是最简单的记忆体池票提案,它使用公布价格出售与区块可容纳的最大区块数相等数量的记忆体池票。此机制在每个 slot 中出售票。
机制的工作原理如下:
购买:形式为
(sender_ID, number_of_tickets)的订单在任何时段提交给智能合约。分配(与批发机制相同) :智慧合约将订单作为输入,并输出
sender_ID及其各自分配的allocated_tickets的清单。对于与智慧合约互动的每个订单,它会分配\\max(\\text{票证数量}, \\text{剩余票证})最大限度(文字号码 _的_门票,简讯票 _ left ) ,其中tickets_lefttickets_left一个变量,等于票总数与已分配票数之间的差值。Blob 传播:票证持有者每持有一张票证就可以传播一个 Blob。
该提案的优势在于,由于每个 slot 都会购买选票,因此可能不需要过度供应( k = 1)。因此,每个 slot 中节点所需的 Blob 记忆体池频宽量可以设定硬性上限,从而增加节点可用于其他任务的频宽。
这项提案与 Mike 和 Julian先前提出的采用最高价格拍卖的提案极为相似。我们在此采用了公布价格机制,因为它消耗的 Gas 更少。
忠诚票
该提案将票证分配给近期提交过 Blob 的用户。目标是将记忆体池票证提供给最有可能在下一个 slot 提交 Blob 的使用者。图 1(取自Hildobby 的 Blob 仪表板)显示了 Base 消耗了 43% 的 Blob,World Chain 消耗了 24%,Arbitrum One 消耗了 9%,而其他 rollup 消耗了剩余的 24%。
图 1:blob 使用状况饼图,显示幂律分布。
此机制可以如下运作:
监控:在每个 slot 中,智慧合约将哪些 Blob 提交者(储存为
sender_ID)在上一个 slot 中提交了 Blob 作为输入。智能合约维护一组sender_ID的权重。它为每个sender_ID分配如下权重:更新\_{i} = \\alpha \\frac{Blobs\_{i}}{总\\text{ }Blobs} + (1 - \\alpha) 旧\\text{ } 权重\_{i} U p d a t e _ i =阿尔法分式B l o b s _ i 总计文字 B l o b s + ( 1 −字母表)旧文字 重量t _ i
新的 \\text{ } Weight\_{i} = \\frac{Update\_{i}}{\\sum\_{i \\in N} Update\_{i}} N e w文字 重量t _ i = f r a c更新_ i s um _ i 更新
我们可以考虑一个最小权重,使得分配的 blob 提交者至少收到例如 3 张票,因为 blob 提交者似乎每个区块至少提交 3 个 blob 来摊提成本。
分配:在每个插槽中,将
n张票分配给sender_IDs N N集合,其权重成比例,四舍五入为最接近的整数,上限为max_blobsn可能是每个插槽中可以提交的最大 blob 数量的倍数。Blob 传播:票证持有者每持有一张票就可以传播一个 Blob。
此机制与上文描述的后进先出租赁机制类似。两者都尝试将票分配给最有可能在下一个时段需要票的用户。我认为有必要使用当前的 Blob 提交者行为进行模拟,以充分理解两者之间的差异。
此外,Francesco 建议将此机制与 Simple Mempool Tickets 机制混合使用,以允许免费进入,同时最大限度地提高需要票证的 rollup 已经拥有票证的机率。
最后,需要对参数进行微调,以最大程度地减轻 Rollup 的使用者体验负担。我们需要进行模拟才能实现这一点。由于随著 Blob 吞吐量的增加,Blob 提交者的行为可能会发生显著变化,因此可能需要更改参数,这可能意味著对智慧合约进行更改。
非常规拍卖和免费门票
为了降低系统的 Gas 成本,我们从以拍卖为基础的系统转变为以公告价格为基础的系统。在拥挤的情况下,我们假设 Blob 提交者可以为其购票订单附加优先费用,并且建构者会优先处理优先费用较高的交易,而不是优先费用较低的交易。
由于我们假设支付较高优先费用的交易会被纳入,因此我们无需对选票收取费用。攻击者若想阻止 rollup 发布 blob,只需出价高于那些希望透过垂直分片内存池传播 blob 的 rollup,无论选票价格如何。壅塞极为罕见,而且很可能是由攻击者造成的,因为选票的供应量已超过 blob 的最大供应量k倍,而目标 blob 数量仅为最大供应量的三分之二。换句话说,自然需求量必须达到预期的 15 倍( k = 10)才会造成壅塞。
请注意,最坏情况下的攻击会导致 Rollup 在一段时间内无法使用垂直分片记忆体池。 Rollup 仍然可以使用私有建构器记忆体池或呼叫资料来发布其资料。最坏情况下的攻击代价高昂,因为攻击者要么需要承担成本来超越 Rollup,要么必须放弃 Rollup 愿意支付的优先费用。
免费票降低了系统的复杂性,从而降低了汽油成本,因为不需要设定最低价格,也不需要退款。
智能合约实施
上述所有内存池票据/租赁方案均可透过智慧合约实现,无需硬分叉。智能合约会选择一种分配规则(例如,后进先出内存池租赁或简单内存池票据)。它接收订单作为输入,并输出一个sender_ID列表,这些列表可能会在垂直分片记忆体池中传播 blob。节点随后会取得此列表,并将其应用于其执行层垂直分片记忆体池。
最后,记忆体池的垂直分片也不需要硬分叉,因为它只是网路层面的改变。垂直分片的记忆体池确实需要社交协调,因为 blob 提交者必须将其 blob 分片才能在垂直分片的记忆体池中传播。
重要的是,由于记忆体池票证分配将透过智慧合约进行,因此修改起来相对容易。假设 Blob 提交者的行为发生变化,可以将包含记忆体池票证分配规则的智慧合约替换为更适合新行为的合约。
与稀疏 Blobpool 和水平分片的比较
在本节中,我们将垂直分片记忆体池与稀疏 blobpool 和水平分片提案进行比较。本节假设您熟悉垂直分片记忆体池、稀疏 blobpool 和水平分片提案。
稀疏 Blobpool
在稀疏 blobpool 中,节点以一定的机率(建议:p=0.15)下载完整的 blob,否则进行取样(p=0.85)。这表示每个 blob 必须下载的预期资料量为0.15 + \\frac{0.85}{8} \\approx 25% 0.15 +分母0.85 8大约25 % 。在垂直分片记忆体池提案中,该比例仅为 1/8 = 12.5% f r a c 1 8 = 12.5 。因此,垂直分片的记忆体池减少了节点在记忆体池中需要使用的频宽量。如果分片因子(上文为 8)进一步增加,这一点尤其重要,这在未来将会实现。
稀疏 blobpool 提案的优点在于,与现状相比,它不会改变 blob 提交者的使用者体验。内存池票证确实会改变使用者体验。记忆体池票证概念的潜在迭代可能会将使用者体验改为 rollups想要的效果,例如提前固定 blob 价格。
水平分片
在水平分片记忆体池中,验证者使用规则来决定是否完整下载 blob。其优点是水平分片记忆体池易于实现,因为无需票务系统来防止 DoS 攻击。缺点是每个节点每个 slot 使用的频宽差异很大,因为在某些 slot 中,验证者可能需要下载许多 blob,而在某些 slot 中则不需要。
重要的是,垂直分片的记忆体池可以防止验证者重复工作,因为他们可以下载执行层记忆体池中看到的 blob 的样本,而不必在区块到达时(假设是单元级讯息传递)在共识层再次下载它们。在水平分片的记忆体池中,验证者将执行额外的工作,因为他们会在执行层记忆体池中下载不需要的部分 blob,然后在区块到达时需要在共识层下载样本。虽然在FullDAS中,验证者可能需要保管完整的 blob,而不是像 PeerDAS 中那样只保管样本,但 PeerDAS 是目前正在发行的版本,FullDAS 何时发行尚不清楚。
结论
改进 Blob 内存池是当务之急,因为目前的内存池无法承受以太坊可能很快会迎来的 Blob 数量的大幅增长。对记忆体池进行垂直分片是一个颇具吸引力的解决方案,因为它可以大幅降低记忆体池所需的频宽,并避免在共识层重复进行共识关键资料可用性取样。
实现垂直分片记忆体池的主要问题是需要某种 DoS 预防机制。在本文中,我们提出了三种记忆体池票据机制,它们可以在启用垂直分片记忆体池的同时预防 DoS 攻击。主要的权衡点在于对使用者体验的影响和运行该机制所需的 Gas 成本。表 1 总结了本文所提出的各项提案的属性。
| 批发门票 | 内存池租赁(权益) | 内存池租赁(后进先出法) | 简单记忆体池票证 | |
|---|---|---|---|---|
| 气体 | 低。交易次数少,但购买的票数多。 | 高。理想情况下,租赁持有人流动率较低。此机制需要更复杂的智能合约。 | 高。理想情况下,租赁持有人流动率较低。此机制需要更复杂的智能合约。 | 中等。简单的智能合约,但每个时段都购买门票。 |
| 使用者体验专家 | 有很多票可用。 | 大型聚会可能不需要每个时段都买票。 | 大型聚会可能不需要每个时段都买票。 | 几乎不需要估价。 |
| 使用者体验 | ||||
| 反对者 | Rollups 有被审查的风险。 | 小额总和需要足够的流动性。 | 小型汇总可能会在租赁费用上花费更多。 | 每个时段都需要买票。 |
| 其他 | 不适用 | 不适用 | 不适用 | 频宽使用量有严格上限。 |
表 1:批发证、内存池租赁(权益和后进先出)和简单内存池票证提案的 gas 和用户体验属性摘要。
重要的是,由于票证机制是透过智慧合约实现的,无需修改协议,因此如果需要,可以相对轻松地进行切换。这一点尤其重要,因为记忆体池票证不仅会改变 Blob 提交者的使用者体验,而且我们即将看到的吞吐量大幅提升也会带来改变。吞吐量提升与记忆体池票证之间的相互作用对使用者体验的影响难以预测,因此记忆体池票证机制的灵活性至关重要。





