EIP-7918: 受执行成本限制的 Blob 基础费用
规定 GAS_PER_BLOB 的价格大于 BLOB_BASE_COST 的价格
Authors | Anders Elowsson (@anderselowsson), Ben Adams (@benaadams), Francesco D'Amato (@fradamt) |
---|---|
Created | 2025-03-25 |
Requires | EIP-4844, EIP-7840 |
Table of Contents
摘要
本 EIP 通过在 calc_excess_blob_gas()
中引入 if
子句,为 blob 分配一个保留价格 BLOB_BASE_COST * base_fee_per_gas
。具体来说,当保留价格高于 GAS_PER_BLOB * base_fee_per_blob_gas
时,该函数将不会从 excess_blob_gas
中减去 TARGET_BLOB_GAS_PER_BLOCK
,而是强制 excess_blob_gas
根据 blob_gas_used
增加,但会重新平衡以保持相同的最大增幅。该提案确保 blob 费用市场能够正常运作,并且 blob 消费者至少支付一部分他们从节点请求的计算的市场价格。
动机
以太坊部署了一种动态定价拍卖来设置 blob 基础费用,如果消耗的 gas 小于 TARGET_BLOB_GAS_PER_BLOCK
,则降低费用;如果消耗的 gas 更多,则提高费用。当 blob 基础费用代表价格信号时,这种拍卖可以很好地发挥作用,使得该机制能够控制消费者面临的实际价格。然而,当 rollup 的 L1 成本主要由执行 gas 决定时,例如,执行携带 blob 的交易(包括优先级费用)和 ZK 证明验证,价格信号就会丢失。blob 基础费用不再代表消费者面临的总成本的重要组成部分,协议也无法再依赖 blob 基础费用来控制消耗的 blob 的均衡数量。因此,当前的机制最终可能会反复降低 blob 基础费用,直到最终稳定在 1 wei。在这种情况下,blob 基础费用改变 10% 可能只会使利用 blobspace 的总成本改变 0.0000001%。每当需求增加时,需要一个多小时的接近满块状态才能恢复市场出清均衡费用,该机制间歇性地求助于一阶价格拍卖,blob 消费者认为这是一种较差的用户体验。由此产生的资源消耗峰值对于扩展 blobspace 来说不是最佳的。
图 1 显示了执行成本如何使实际需求曲线缺乏弹性,因此有机需求或执行基础费用的相对较小变化(箭头)可能导致均衡 blob 基础费用的剧烈变化。为了缓解这种情况,该提案通过 calc_excess_blob_gas()
中的一个简单 if
子句,强制执行一个反映执行成本的保留价格。然后,均衡(正方形)必须形成在左上象限的某处,该象限以蓝色供给曲线和代表实际需求下可能保留价格均衡的虚线为界(有关进一步阐述,请参见理由)。
保留价格还履行了第二个重要功能。节点必须以加密方式验证 KZG proofs
,以确保相关的 commitments
对应于提供的 blobs
。这个过程计算量很大。确保 blob 消费者至少支付一部分他们对节点施加的计算的市场价格似乎是可取的。在这种情况下,执行基础费用反映了在 blob 消费者请求节点计算服务时,节点计算服务的需求程度。通过将保留价格应用于 blob 基础费用,该提案共同确保:
- blob 基础费用更新机制可以正常运作,通过建立一个相对于 blob 消费者的 L1 执行成本而言非常重要的保留价格。
- blob 消费者至少支付一部分他们从节点请求的计算的市场价格,数据任何额外费用在 blob 费用市场中独立确定。
图 1. 在不同执行基础费用(黑色到红色线)下,对 blobspace 的实际需求。当执行成本占主导地位时,实际需求曲线变得缺乏弹性,并且与供给曲线平行,从而导致即使需求曲线发生微小变化(箭头),均衡费用也会发生剧烈变化。该提案规定,均衡(正方形)形成在左上象限的边缘,位于目标供给曲线和需求之间的交点处,或沿着代表考虑执行成本的可能保留价格均衡的虚线。
规范
参数
Constant | Value |
---|---|
BLOB_BASE_COST |
2**14 |
函数
从 EIP-4844 中的 calc_excess_blob_gas()
添加一个 if
子句。如果 blob
的价格低于 BLOB_BASE_COST
执行 gas 的价格,该函数不再在更新 excess_blob_gas
时减去 TARGET_BLOB_GAS_PER_BLOCK
。EIP-7840 中引入了用于引用目标 blob 和最大 blob 的 blobSchedule。
def calc_excess_blob_gas(parent: Header) -> int:
if parent.excess_blob_gas + parent.blob_gas_used < TARGET_BLOB_GAS_PER_BLOCK:
return 0
if BLOB_BASE_COST * parent.base_fee_per_gas > GAS_PER_BLOB * get_base_fee_per_blob_gas(parent):
return parent.excess_blob_gas + parent.blob_gas_used * (blobSchedule.max - blobSchedule.target) // blobSchedule.max
else:
return parent.excess_blob_gas + parent.blob_gas_used - TARGET_BLOB_GAS_PER_BLOCK
理由
费用非弹性和保留价格
该提案缓解了 blob 基础费用拍卖中的特殊性。费用更新机制不知道它所调节价格的商品的全部价格,因此无法及时收敛到均衡状态。为了解决这个问题,需要与执行 gas 的价格建立链接。相对较高的执行 gas 成本使得对 blob 基础费用的更改在控制需求量方面效果较差——最终是执行成本决定了均衡的形成。鉴于协议规定了一条长期完全非弹性的供给曲线(图 1 中的垂直蓝线),只要执行成本太高,消费者无法在 TARGET_BLOB_GAS_PER_BLOCK
处实现均衡形成,blob 基础费用将简单地降至 1 wei 的边界。因此,在执行费用占主导地位的情况下,需求曲线是blob 费用非弹性的,而每当 blob 费用占主导地位时,需求曲线是执行费用非弹性的。图 1 说明了实际需求函数
$Q(b + c),$
将 blob 需求量 $Q$ 映射到 blob 基础费用 $b$ 和用户的执行成本,以“每个 blob gas”表示,$c$:
c = execution_cost * base_fee_per_gas / GAS_PER_BLOB
如果 $c>0$,则需求曲线将具有“非弹性范围”(参见图 1),超过该范围,进一步降低 $b$ 不再增加 $Q$,从而使这种费用降低变得多余:
$\lim_{b \to 0} Q(b + c) = Q(c).$
为了避免非弹性范围,指定了一个保留价格 $b_r$,低于该价格,$b$ 无法进一步降低。它由新常量 BLOB_BASE_COST
计算得出,如下所示:
b_r = BLOB_BASE_COST * base_fee_per_gas / GAS_PER_BLOB
只要 $b_r$ 是 $c$ 的相关部分,费用更新机制将始终能够通过在 blobspace 竞争时提高 blob 基础费用来调节需求,从而缓解资源消耗的峰值。blob 费用在总价格 ($b+c$) 中所占的份额,在保留价格下始终至少为
$\frac{b_r}{b_r+c}.$
这就是为什么在保留价格下的均衡(图 1 中的虚线)位于在 0 执行基础费用下形成的黑色需求曲线下方一个恒定分数 $16384/(16384+10500)$ 的原因。
即使在零执行成本下,需求曲线也可能具有一定的非弹性。然而,这只是进一步推进该提案的另一个理由。无论需求曲线的确切形状如何——当然,这仍然是未知的,并且可能会继续变化——该提案都是基于对 blob 消费者产生实际影响的事物。这使其成为对 blob 基础费用的合理中性约束。
blob 基础费用的保留价格与执行基础费用之间的比率是固定的:BLOB_BASE_COST / GAS_PER_BLOB
,在建议的常量下为 1/8。该关系来自 calc_excess_blob_gas()
中的新 if
子句。
Blob KZG 证明验证成本
EIP-4844 引入了以太坊数据可用性采样 (DAS) 路线图的第一阶段。共识层 (CL) 上的验证者通过以加密方式验证随附的 KZG proofs
,来验证有效负载中的 KZG commitments
是否与提供的 blobs
相对应。执行层 (EL) 节点还必须验证 tx_payload_body
,并验证进入节点 tx 池的每个 blob 的包装数据(blob、commitment 和证明)。验证整个 blob 的 KZG 证明的计算要求略高于验证该 blob 上的单个点的 KZG 证明的计算要求;后者是智能合约收取的 POINT_EVALUATION_PRECOMPILE_GAS
(50000) 所涵盖的特定操作。
EIP-7594 引入了 PeerDAS。由于依赖于 blob 单元及其各自的证明,它改变了计算要求。确切的规范尚未完全确定,但这是一个粗略的指导方针:
- EL 节点批量验证每个 blob 的
CELLS_PER_EXT_BLOB
(128) 个单元证明,然后再将携带该 blob 的 tx 包含在其 tx 池中。此验证(例如,使用verify_cell_kzg_proof_batch
)大约比与单个POINT_EVALUATION_PRECOMPILE_GAS
相关的计算贵 15 倍(这是一个verify_kzg_proof
的费用)。 - 完整节点必须验证 4 个托管列,每列包含来自有效负载中引用的所有 blob 的一个单元。可以批量验证每列的单元证明。
- 超级节点必须验证 128 个托管列,每列包含来自有效负载中引用的所有 blob 的一个单元。可以批量验证每列的单元证明。
- 完整节点和超级节点之间的验证器将托管 4-128 列。
- 节点对每个 slot 进行 peer-sample
SAMPLES_PER_SLOT
(8) 列(除了托管列)。与之前一样,可以批量验证每列的单元证明。
对于在 PeerDAS 中 CL 上执行的验证,通过批量处理共同处理一列的单元证明(来自所有 blob)的能力减少了每个 blob 花费的计算时间,因为 blob 的数量增加了。当按顺序批量处理列时,每个 blob 的计算时间相对于点评估仍然非常高。也可以联合批量处理所有列,或者跨列并行处理。当考虑 CL 并行化的前景时,值得记住的是,使用预编译的 rollup 执行的点评估证明验证通常不应在执行块中的其他交易中具有许多依赖项(点评估本身和以结果为条件的操作),因此也适用于并行化。这种并行化是当前重要的研究重点。这意味着点评估和 blob 的顺序处理(按列批量处理)之间的比较仍然相关(因为两者都可以并行化)。
图 1 显示了每个 blob 的验证时间除以单个点评估操作(由 VerifyKZGProof
预编译执行)的测量执行时间,适用于各种配置。该图表明,根据当前的 Fusaka PeerDAS 规范,blob 将使节点承受相当繁重的计算要求——与智能合约被收取 POINT_EVALUATION_PRECOMPILE_GAS
的单点评估证明验证相比。例如,完整节点将对 p2p 传播的所有 blob 执行 EL mempool 验证(已经 15 倍)。它还将采样 8 列,在目标为 32 个 blob 时,如果按顺序完成(分别批量处理每列),则需要多 2 倍的时间,并且它们最终将托管 4 个指定的列,这些列与点评估的要求大致相同。但是,如何定价 KZG 证明验证是一个复杂的问题,因为它在不同的上下文中执行。建议的常量 BLOB_BASE_COST
由绿线表示,与节点承担的计算成本相比,相对适中。它规定低于 DAS 的完整批处理成本(8 列),即使在非常高的 blob 计数下也是如此。
图 2. 相对于在具有 12 个内核的 Apple M2 Max 上的一次点评估,每个 blob 的验证时间。在最坏的情况下,EL mempool 验证(红色)需要 15 倍的时间,而不管 blob 目标如何。列的每个 blob 验证时间取决于托管/采样的列数,并且由于共同处理列的所有单元而加快,因此 blob 目标增加,每 blob 验证时间会减少。批量处理或并行处理时,处理速度会加快(尽管在后一种情况下会占用更多内核)。与 blob 对节点施加的计算成本相比,常量 BLOB_BASE_COST
相对适中。
为未来而设计
考虑未来的 blob 扩展是相关的,存储固定量数据的价格在过去 80 年中一直在下降。正如在遵循尼尔森定律和摩尔定律的许多领域中所观察到的那样,技术进步通常会降低数据服务的单位成本。这意味着,如果以太坊将 blob 吞吐量提高几个数量级,但不扩展块空间,从而使执行基础费用保持较高水平,则规定的 BLOB_BASE_COST
执行 gas 保留价格将过高。如果以太坊大致同步地扩展块空间和 blobspace,则可以合理地预期规定的保留价格保持在所需的水平。
在这种分析中,有一种特定的反身性需要理解。来自 DA 的 ETH 计价总收入会影响 ETH 代币的法币计价价值,从而反射性地限制了可能的长期 ETH 计价收入,从而限制了 blob 的单位价格。本质上,当以相同的 ETH 计价价格出售更多 blob 时,ETH 代币变得更有价值,因为每个代币的收入上升。然后,ETH 代币价格上涨,增加了消费者面临的法币计价 blob 成本,从而在相同的 blob 基础费用下推低了需求,从而在均衡状态下推低了 blob 基础费用。
因此,可能无法维持与 blob 数量或执行费用无关的固定阈值。在以太坊每个区块出售更多 blob 的情况下,理想情况下,均衡 blob 基础费用应具有相对较低的下限。任何固定阈值(与执行基础费用或 blob 数量无关)都需要逐渐调整以保持相同的相对影响。
每百万 blob gas 大约有 8 个 blob。30M 执行 gas(即 gas 限制为 60M)和 240 个 blob 的目标在 gas 方面是相等的。在这种分布的情况下,鉴于 blob 基础费用的固定保留价格为执行费用的 (1/8),以太坊需要至少将其收入的 1/9 从 blob gas 获得。力求在一个并非所有销售的 blob 都以保留价格出售的费用市场中似乎是可取的,并且假设以太坊可以从 blob gas 中获得与执行 gas 一样多的收入,这可能过于乐观。因此,围绕收入潜力以及执行和 blob 扩展的假设非常重要。如果认为 blob gas 的扩展速度将快于执行 gas,则略低的 BLOB_BASE_COST
可能是合理的。
执行费用快速上涨期间的延迟响应
当 if
语句得出结论,即以太坊在执行费用主导的定价制度中运行时,blob 基础费用会根据 blob_gas_used * (max - target) // max
上涨,而无需减去 TARGET_BLOB_GAS_PER_BLOCK
。这是一种恢复到 blob 费用主导的定价制度的直观方式,保留了相同的最大费用增幅,同时不允许降低。如果执行基础费用迅速上涨,则可能需要几个区块才能赶上 blob 基础费用(在此期间,永远不会减去 TARGET_BLOB_GAS_PER_BLOCK
。这可以说不是一个问题,并且在这些情况下 blob 基础费用的平稳响应甚至可以被视为一种好处。
实证分析
图 3-4 显示了 2024 年 11 月三周的价格演变,当时的平均执行基础费用约为 16 gwei,以及 2025 年 3 月的价格演变,当时的平均费用约为 1.3 gwei。建议的保留费用直接应用于原始数据,而未考虑其对均衡费用的潜在影响。一旦此费用的需求高于目标价格,均衡 blob 基础费用实际上将从阈值水平上升。EIP-7918 强制执行两条曲线的最大值,以较深的颜色表示。
图 3. 在平均执行基础费用约为 16 gwei 的 2024 年 11 月的三周内,当前的费用市场(黑色)和建议的保留费用(蓝色)下的 Blob 基础费用演变。EIP-7918 强制执行两条曲线的最大值,如较深的颜色所示。阈值直接应用于原始数据,而未考虑其对均衡费用的影响。
图 4. 在平均执行基础费用约为 1.3 gwei 的 2025 年 3 月的三周内,当前的费用市场(黑色)和建议的保留费用(蓝色)下的 Blob 基础费用演变。EIP-7918 强制执行两条曲线的最大值,如较深的颜色所示。阈值直接应用于原始数据,而未考虑其对均衡费用的影响。
图 5 显示了从 2024 年 11 月(图 3 的数据周期开始)到 2025 年 3 月(图 4 的数据周期结束)的四个月期间观察到的费用和两条曲线最大值的直方图,对应于从区块号 22075724 开始的约 90 万个区块。直方图采用每个十年(10 倍增加)100 个对数间距 bin,这些 bin 使用宽度为 21 的汉宁窗口和镜像反射的边缘进行平滑处理。
图 5. 没有阈值或应用 EIP-7918 时的 Blob 基础费用直方图(来自先前图的较深黑色和蓝色曲线的虚线组合),应用了轻微的平滑处理。分析了从 2024 年 11 月到 2025 年 3 月的四个月期间。阈值直接应用于原始数据,而未考虑其对均衡费用的影响。
替代规范
常量 BLOB_BASE_COST
仍在进行测试和审查。它可能会在最终规范中更改。
安全注意事项
blob 基础费用将稳定在 blob 的成本至少与携带 blob 的交易成本大致相同的水平。据作者所知,这不存在任何安全风险。
版权
通过 CC0 放弃版权及相关权利。
Citation
Please cite this document as:
Anders Elowsson (@anderselowsson), Ben Adams (@benaadams), Francesco D'Amato (@fradamt), "EIP-7918: 受执行成本限制的 Blob 基础费用 [DRAFT]," Ethereum Improvement Proposals, no. 7918, March 2025. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7918.