卓维安:DA足迹区块限制

该文档提出了一个DA足迹区块限制方案,旨在缓解DA垃圾邮件并防止出现优先费用拍卖。该方案通过跟踪交易的DA足迹以及gas使用量,调整区块gas限制以适应高估算的DA使用量,而无需改变单个交易的gas机制。初步分析表明,该方案对Base或OP Mainnet等生产网络上的大多数区块影响最小。

Jovian: DA 足迹区块限制

作者 Sebastian Stammler
创建于 2025-08-12
审核人 @niran @geoknee
状态 开发中<!--/ 审核中 / 实施行动 / 最终-->

目的

评估添加 DA 足迹区块限制的提案,以缓解 DA 垃圾信息并防止优先级费用拍卖的发生。 此提案是 自定义 Calldata 最小 Gas 的替代方案, 避免完全更改单个交易 gas 机制的必要。

摘要

引入 DA 足迹区块限制以缓解 DA 垃圾信息并防止优先级费用拍卖。通过跟踪交易的 DA 足迹以及 gas,此方法调整区块 gas 限制以考虑高估算的 DA 使用量,而无需改变单个交易 gas 机制。初步分析表明,对 Base 或 OP Mainnet 等生产网络上的大多数区块的影响最小。

问题陈述 + 背景

<!-- 描述文档试图解决的特定问题,以及理解问题和设计空间所需的信息。 如果需要更多关于问题成本的信息, 这是一个放置这些信息的好地方。-->

当前的 L1 成本模型没有考虑到有限的 L1 数据可用性 (DA) 吞吐量。 如果 L2 上的吞吐量超过 L1 blob 空间的吞吐量,或者如果 blob 空间因其他原因而拥堵,这可能会导致批量处理者的网络拥堵。

当前 L1 吞吐量在目标情况下为每个区块 6 个 blob,最大为每个区块 9 个 blob。这大约是 128 kB * 6 / 12 s = 64 kB/s96 kB/s。但是,大多数 OP Stack 链的 gas 目标(和限制)都足够高,可以接受远超过每 (2s) 区块 128kb 的 calldata。 因此,必须通过 gas 限制以外的其他方式来限制吞吐量,以防止累积不断增长的批量处理者数据的积压。 目前用于应对高 DA 吞吐量的措施是在生产网络上部署的批量处理者限制。但是,当网络在构建者策略级别受到限制时, 其基本费用可能会下降,并导致优先级费用拍卖和其他不良的用户体验问题。

另请参阅设计文档 自定义 Calldata 最小 Gas,以获取 对相同问题和背景以及类似解决方案的更详细分析。

提议的解决方案

引入一个 DA 足迹区块限制,以限制可以放入区块的估计压缩交易数据的总量。基本费用更新规则考虑了这个新的总 DA 足迹,因此基本费用市场不会像策略级别的限制解决方案那样崩溃。

主要思想是引入一个新的 DA 足迹 资源,该资源与 gas 并行跟踪,并受到与区块 gas 限制相同的限制。这受到了 多维 Gas 计量 设计的启发,但常规 gas 不会被触及,就像 L1 以太坊的这种设计一样。

与交易 calldata 的常规 gas 使用量类似,我们通过获取其 RLP 编码来计算交易的 DA 足迹,从 Fjord 计算压缩交易 DA 使用量估计值,并将其乘以一个因子,即 DA 足迹 gas 标量,以获得交易的 DA 足迹。

da_usage_estimate = max(minTransactionSize, (intercept + fastlzCoef*fastlzSize) / 1e6)
da_footprint = da_usage_estimate * da_footprint_gas_scalar

这里,fastlzSize 是交易的 FastLZ 压缩 RLP 编码的长度。

现在,当评估交易是否仍然适合放入区块时,我们取两个资源的最大值,所有交易的常规总 gas 使用量和新的总 DA 足迹, 并查看这个最大值是否仍然低于区块 gas 限制。多维 Gas 计量设计引入了一个新的区块字段 gas_metered, 以将其与作为所有交易使用的 gas 总和的 gas_used 区分开来。但是,建议仅重新利用区块的 gas_used 字段 来保存两个资源总量的最大值:

block.gas_used = max(sum(tx.gas_used), sum(tx.da_footprint if tx.type != DepositTxType))

区块的总 DA 足迹仅考虑非存款交易,因为存款交易不是批量处理的一部分,因此它们不会对区块的 DA 使用量做出贡献。

这个定义的优点是基本费用更新机制可以继续工作,现在考虑了高总区块 DA 足迹。

DA 足迹 gas 标量与 calldata 最小成本相当。如果将其设置为更高的值,例如 400,则与仅通过交易 gas 使用量限制相比, 你可以预期 大致 有 1/10 的不可压缩 calldata 适合放入区块。如果区块主要是低 calldata 交易,其使用的常规 gas 比 DA 足迹多得多,那么这种新机制将不会产生任何影响。对于绝大多数区块来说,都是这种情况。

DA 足迹 gas 标量

我建议通过 SystemConfig(与往常一样,由 SystemConfig 所有者)使 DA 足迹 gas 标量参数可配置。 下一个以太坊硬分叉 Fusaka 引入了 仅 Blob 参数硬分叉 (EIP-7892),并且很难估计 blob 参数以及 OP Stack 链的数量和吞吐量在未来几个月内将如何演变,因此现在很难设置一个充分告知的常量, 使其在可预见的未来保持良好。

但是,我建议将 DA 足迹 gas 标量值设置为 400 作为合理的默认值,该值应对现有和未来的链的影响最小, 同时通过将随机数据的吞吐量降低大约 10 倍与当前区块的 calldata 最小 gas 限制单独允许的吞吐量相比, 保护 OP Stack 生态系统免受 DA 垃圾信息攻击。另请参阅下一节,以分析不同 gas 标量对各种 OP Stack 链的影响。

为了将 gas 标量引入执行层,我们向 L1Block 合约添加一个新字段,并在推导过程中更新它, 就像生成 L1 属性交易时一样,与往常一样。推导还负责设置默认值。值为零的 SystemConfig 更新代码用于默认值。 因此,为了 禁用 该功能,可以使用标量 1

使用 uint16 类型作为 gas 标量应该足够了。最大值为 65,535,这对于我们目前为该功能预见的 所有用例来说似乎绰绰有余。对于具有 1 亿 gas 的链,此标量隐含的 DA 使用量限制为 1e8 / (2^16-1) ≈ 1,526 字节。 对于一个 1 亿 gas 的链来说,设置如此低的 DA 字节使用量限制似乎非常不现实。

对 OP Stack 链的影响

我们回溯测试了 DA 足迹区块限制对 Base、OP Mainnet、WorldChain、Unichain、Ink、Soneium、 Mode 在各种 gas 标量下的估计影响,发现绝大多数区块不会受到影响,即使 gas 标量值高达 800。 完整的分析可以在我们的 op-analytics 存储库中找到。

对于每个链,分析采用了以下方法。从最近的 120 天期间(4/29 - 8/26)随机抽取了 1% 的区块样本。 然后,对于每个区块,通过计算每个交易的基于 FastLZ 的 DA 使用量估计值,然后取总和来估计 DA 足迹。 然后将其与区块的 gas 限制和 gas 使用量进行比较,以查看该区块是否会受到 DA 足迹限制的影响。 如果 DA 足迹低于区块的 gas 使用量,那么就不会有任何影响,因为新的区块 gas 使用量将被定义为总交易 gas 使用量和 DA 足迹的最大值。 如果它超过了 gas 使用量,但没有超过 gas 限制,那么影响将仅仅是新的区块 gas 使用量将被设置得更高(因此基本费用可能会潜在地更快地增加), 但该区块仍然不会受到限制。只有当 DA 足迹也超过了 gas 限制时,才会将该区块的交易限制为更小的 DA 足迹。 对于这些区块,我们还查看了超额 DA 足迹的分布,以指示这些区块将受到多大的限制。

下表显示了对于每个分析的链的结果统计信息。

  • 标量:DA 足迹 gas 标量值。
  • 有效限制:给定 gas 标量将隐含的 DA 使用量限制 (block_gas_limit / da_footprint_gas_scalar),以估计的压缩字节为单位。
  • DA 使用量目标:给定 gas 标量将隐含的 DA 使用量目标 (block_gas_limit / elasticity / da_footprint_gas_scalar),以估计的压缩字节为单位。 它是有效限制除以弹性。
  • 超过限制:总 DA 足迹超过 gas 限制的区块数量和百分比。这些区块将被限制为包含更少的交易。
  • 超过目标:总 DA 足迹超过 gas 目标的区块数量和百分比。这些区块将看到基本费用的上涨(可能已经因为 gas 使用量超过目标而上涨)。
  • 超过 Gas 使用量:总 DA 足迹超过总 gas 使用量的区块数量和百分比。对于这些区块,block.gas_used 字段将等于总区块 DA 足迹,而不是总交易 gas 使用量。
  • 平均利用率:DA 足迹资源的平均利用率。
  • 最大利用率:DA 足迹资源的最大利用率。
OP Mainnet

随机抽样: 链: op样本大小: 51840 个区块 每个区块的平均 DA 使用量: 12,890每个区块的最大 DA 使用量: 121,830

标量 有效限制 DA 使用量目标 超过限制 超过目标 超过 Gas 使用量 平均利用率 最大利用率
160 250,000 125,000 0 0 0 (0.0%) 5.0% 48.7%
400 100,000 50,000 4 (0.01%) 289 (0.56%) 535 (1.0%) 12.4% 121.8%
600 66,666 33,333 50 (0.10%) 1865 (3.60%) 4623 (8.9%) 18.6% 182.7%
800 50,000 25,000 289 (0.56%) 5439 (10.49%) 12440 (24.0%) 24.8% 243.7%

OP Mainnet (随机) DA 大小估计分布

前 1 百分位 Calldata 使用量: 链: op样本大小: 51996 个区块 每个区块的平均 DA 使用量: 37,625每个区块的最大 DA 使用量: 130,178

标量 有效限制 DA 使用量目标 超过限制 超过目标 超过 Gas 使用量 平均利用率 最大利用率
160 250,000 125,000 0 10 (0.02%) 0 (0.0%) 14.5% 52.0%
400 100,000 50,000 299 (0.58%) 10091 (19.41%) 5324 (10.2%) 36.2% 130.0%
600 66,666 33,333 4001 (7.69%) 26107 (50.21%) 17993 (34.6%) 54.2% 195.1%
800 50,000 25,000 10091 (19.41%) 35954 (69.15%) 30271 (58.2%) 72.3% 260.1%
Base

随机抽样: 链: base样本大小: 51840 个区块 每个区块的平均 DA 使用量: 60,605每个区块的最大 DA 使用量: 398,860

标量 有效限制 DA 使用量目标 超过限制 超过目标 超过 Gas 使用量 平均利用率 最大利用率
160 937,500 312,500 0 21 (0.04%) 0 (0.0%) 6.7% 45.6%
400 375,000 125,000 7 (0.01%) 810 (1.56%) 52 (0.1%) 16.7% 114.0%
600 250,000 83,333 45 (0.09%) 7054 (13.61%) 2784 (5.4%) 25.1% 170.9%
800 187,500 62,500 129 (0.25%) 23702 (45.72%) 17400 (33.6%) 33.5% 227.9%

Base (随机) DA 大小估计分布

前 1 百分位 Calldata 使用量: 链: base样本大小: 52324 个区块 每个区块的平均 DA 使用量: 139,942每个区块的最大 DA 使用量: 406,286

标量 有效限制 DA 使用量目标 超过限制 超过目标 超过 Gas 使用量 平均利用率 最大利用率
160 937,500 312,500 0 1066 (2.04%) 11 (0.0%) 15.5% 46.0%
400 375,000 125,000 451 (0.86%) 29878 (57.10%) 2306 (4.4%) 38.7% 115.0%
600 250,000 83,333 3394 (6.49%) 49775 (95.13%) 13540 (25.9%) 58.0% 172.5%
800 187,500 62,500 8315 (15.89%) 52159 (99.68%) 29715 (56.8%) 77.4% 230.0%
Ink

随机抽样: 链: ink样本大小: 103680 个区块 每个区块的平均 DA 使用量: 1,232每个区块的最大 DA 使用量: 114,022

标量 有效限制 DA 使用量目标 超过限制 超过目标 超过 Gas 使用量 平均利用率 最大利用率
160 187,500 31,250 0 20 (0.02%) 9 (0.0%) 0.7% 60.8%
400 75,000 12,500 3 (0.00%) 29 (0.03%) 965 (0.9%) 1.6% 152.0%
600 50,000 8,333 3 (0.00%) 51 (0.05%) 8705 (8.4%) 2.5% 228.0%
800 37,500 6,250 20 (0.02%) 108 (0.10%) 12585 (12.1%) 3.3% 304.1%
Unichain

随机抽样: 链: unichain样本大小: 103680 个区块 每个区块的平均 DA 使用量: 3,951每个区块的最大 DA 使用量: 129,900

标量 有效限制 DA 使用量目标 超过限制 超过目标 超过 Gas 使用量 平均利用率 最大利用率
160 187,500 31,250 0 13 (0.01%) 1 (0.0%) 2.1% 69.3%
400 75,000 12,500 4 (0.00%) 601 (0.58%) 4897 (4.7%) 5.3% 173.2%
600 50,000 8,333 5 (0.00%) 4884 (4.71%) 34185 (33.0%) 7.9% 259.8%
800 37,500 6,250 9 (0.01%) 14606 (14.09%) 51142 (49.3%) 10.5% 346.4%
Soneium

随机抽样: 链: soneium样本大小: 51840 个区块 每个区块的平均 DA 使用量: 4,110每个区块的最大 DA 使用量: 37,609

标量 有效限制 DA 使用量目标 超过限制 超过目标 超过 Gas 使用量 平均利用率 最大利用率
160 250,000 31,250 0 2 (0.00%) 0 (0.0%) 1.6% 15.0%
400 100,000 12,500 0 1006 (1.94%) 288 (0.6%) 4.1% 37.6%
600 66,666 8,333 0 4708 (9.08%) 3361 (6.5%) 6.2% 56.4%
800 50,000 6,250 0 8805 (16.98%) 9645 (18.6%) 8.2% 75.2%
Mode

随机抽样: 链: mode样本大小: 51840 个区块 每个区块的平均 DA 使用量: 834每个区块的最大 DA 使用量: 12,973

标量 有效限制 DA 使用量目标 超过限制 超过目标 超过 Gas 使用量 平均利用率 最大利用率
160 187,500 31,250 0 0 0 (0.0%) 0.4% 6.9%
400 75,000 12,500 0 1 (0.00%) 12 (0.0%) 1.1% 17.3%
600 50,000 8,333 0 3 (0.01%) 54 (0.1%) 1.7% 25.9%
800 37,500 6,250 0 8 (0.02%) 190 (0.4%) 2.2% 34.6%
WorldChain

随机抽样: 链: worldchain样本大小: 51840 个区块 每个区块的平均 DA 使用量: 23,774每个区块的最大 DA 使用量: 74,313

标量 有效限制 DA 使用量目标 超过限制 超过目标 超过 Gas 使用量 平均利用率 最大利用率
160 287,500 143,750 0 0 0 (0.0%) 10.3% 26.6%
400 115,000 57,500 0 130 (0.25%) 14 (0.0%) 25.7% 66.5%
600 76,666 38,333 0 6771 (13.06%) 12756 (24.6%) 38.6% 99.7%
800 57,500 28,750 130 (0.25%) 27803 (53.63%) 40067 (77.3%) 51.4% 133.0%
结论

可以看出,对于所有链和标量 400,对于绝大多数区块来说,影响可以忽略不计,因为 DA 足迹甚至小于 gas 目标或使用量。 这很好,因为这意味着 DA 足迹只会影响少数区块,因此对于大多数用户来说几乎无法察觉。 但是由于限制对每个区块都有效,它仍然可以防止最坏情况下的高吞吐量不可压缩 DA 垃圾信息,这是此功能的目标。

此外,可以看出,甚至更小比例的区块将受到 DA 足迹限制的限制,表明在正常使用情况下(没有不可压缩的 DA 垃圾信息), DA 足迹限制对链的影响可以忽略不计。

资源使用

<!-- 提议的解决方案的资源使用情况如何? 它是否消耗大量的计算资源或时间? -->

区块构建者或验证者的额外资源使用量被认为是可忽略不计的,因为自 Fjord 以来已经计算了交易的估计 DA 使用量, 并且其他计算是微不足道的,仅涉及基本算术。

单点故障和多客户端考虑因素

<!-- 有关此更改将如何影响多个客户端的详细信息。我们是否需要计划更改 op-geth 和 op-reth? -->

故障模式分析

<!-- 链接到从 fma-template.md 文件创建的故障模式分析文档。 -->

对开发者体验的影响

<!-- 提议的设计是否改变了应用程序开发者与协议交互的方式? 任何超级链开发者工具(如 Supersim、模板等)是否会因此次更改而中断? -->

  • 预计对模拟单个交易的用户或工具没有影响。特别是,预计对钱包没有影响。
  • 所有交易的 gas used 总和是区块的 gas used 的不变量被打破了。 如果区块的总 DA 足迹大于总交易 gas 使用量,则区块的 gas used 字段将被设置为更大的总 DA 足迹。 这可能会影响一些基于分析的服务,例如区块浏览器,并且需要让这些服务了解必要的步骤, 以便使其服务适应这种新的区块 gas 使用量计算方法。

考虑的替代方案

重新利用 block.gasUsed 的替代方案

建议重新利用 block.gasUsed 字段来保存区块的总交易 gas 使用量和 DA 足迹的最大值的新计量值。 或者:

  • 我们可以引入一个新的头部字段,例如 block.gasMetered(如 ethresearch 帖子中提议的那样)来存储这个新值, 然后在从 Jovian 开始更新基本费用时使用这个新字段。可以通过将其包含在 RLP 编码中来使该字段成为总区块哈希的一部分,也可以不包含。 可能没有必要,因为该值可以从区块执行中重新计算。
  • 我们可以使用现有的但未使用的 block.blobGasUsed 字段来存储最大值,或仅存储总 DA 足迹值。 这样做的好处是不引入新字段,并且它会自动成为区块哈希的一部分。 但是,它会更改该字段的语义含义,因为 OP Stack 链不支持 blob,如果我们想支持 blob(无论这意味着什么), 我们都需要再次更改。另一方面,作为 gas 维度中的一个值和一个衡量区块对 DA 存储(通常是 L1 上的 blob)的影响的指标, DA 足迹在语义上已经接近于 blob gas,因此它将直观地利用这个未使用的字段。 剩余 blob gas 字段仍将保持未使用状态。实现需要确保 blob gas used 字段的新用途不会导致意外的副作用, 例如 blob 基本费用的更新(对于 OP Stack 链来说,仍然应该是常数 1)。

这两种替代方案的优点是 gasUsed 字段的含义没有改变,保留了区块的 gas used 字段存储其交易 gas 使用量总和的不变量。 但它们需要对基本费用更新逻辑进行额外的更改。

不同的设计

  • 自定义 Calldata 最小 Gas - 引入 calldata 最小成本的自定义。 效果相当,但会改变单个交易的 gas 机制。
  • L1 拥塞费用 - 仅有的部分可以缓解 L1 包含延迟的提案,但实施起来更复杂, 并且更难以建模和预测对生产网络的影响。它也没有对 DA 足迹吞吐量设置硬性上限,而是依赖于市场激励来减少(建模的)拥塞期间的 calldata 使用。

风险与不确定性

<!-- 概述可能出错的地方。 还有任何需要更多工作才能解决的未解决问题。 -->

  • 原文链接: github.com/ethereum-opti...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ethereum-optimism
ethereum-optimism
江湖只有他的大名,没有他的介绍。