Alert Source Discuss
Standards Track: Core

EIP-7623: 增加 calldata 成本

增加 calldata 成本以减少最大区块大小

Authors Toni Wahrstätter (@nerolation), Vitalik Buterin (@vbuterin)
Created 2024-02-13

摘要

当前的 calldata 定价允许高达 7.15 MB 的 EL 负载,而平均大小要小得多,约为 100 KB。 本 EIP 建议调整 calldata 成本,以减少最大可能的区块大小及其方差,而不会对普通用户产生负面影响。 这可以通过增加主要发布数据的交易的 calldata 成本来实现。

动机

EIP-1559 以来,区块 gas 限制没有增加,而由于越来越多的 rollup 将数据发布到以太坊,区块的平均大小一直在持续增加。 此外,自 EIP-2028 以来,calldata 成本一直没有变化。 EIP-4844 引入了 blobs 作为数据可用性 (DA) 的首选方法。 这种转变需要重新评估 calldata 定价,特别是为了解决平均区块大小和最大区块大小之间的差距。 通过引入一个取决于 EVM 操作的 gas 消耗与 calldata 的比率的最低成本,本提案旨在减少最大区块大小,为额外的 blobs 或潜在的区块 gas 限制增加腾出空间。

规范

参数
STANDARD_TOKEN_COST 4
TOTAL_COST_FLOOR_PER_TOKEN 10

tokens_in_calldata = zero_bytes_in_calldata + nonzero_bytes_in_calldata * 4

isContractCreation 是一个布尔值,指示相应的事件。

execution_gas_used 是用于 EVM 执行的 gas,减去 gas 退款。

INITCODE_WORD_COST 为 2,如 EIP-3860 中所定义。

当前用于确定每笔交易的总 gas 使用量 (tx.gasUsed) 的公式等效于:

tx.gasUsed = (
    21000
    + STANDARD_TOKEN_COST * tokens_in_calldata
    + execution_gas_used
    + isContractCreation * (32000 + INITCODE_WORD_COST * words(calldata))
)

用于确定每笔交易的 gas 使用量的公式更改为:

tx.gasUsed = (
    21000
    +
    max(
        STANDARD_TOKEN_COST * tokens_in_calldata
        + execution_gas_used
        + isContractCreation * (32000 + INITCODE_WORD_COST * words(calldata)),
        TOTAL_COST_FLOOR_PER_TOKEN * tokens_in_calldata
    )
)

任何 gas 限制低于 21000 + TOTAL_COST_FLOOR_PER_TOKEN * tokens_in_calldata 或低于其内在 gas 成本(取这两者计算的最大值)的交易都被认为是无效的。这种限制的存在是因为交易必须支付其 calldata 的最低价格,而无需依赖交易的执行。在有效的情况下,gasUsed 将低于此最低价格,但最低价格需要在交易 gas 限制中保留。

原理

当前的最大 EL 负载大小约为 1.79 MB (30_000_000/16)。可以创建填充零字节的负载,扩展到 7.15 MB。但是,由于区块通常在 P2P 层使用 Snappy 进行压缩,因此零字节较多的 EL 负载通常压缩到 1.79 MB 以下。EIP-4844 的实施将最大可能的压缩区块大小增加到大约 2.54 MB。

本提案旨在增加 calldata 的成本,对于那些花费在 EVM 操作上的 gas 相对于花费在 calldata 上的 gas 没有超过某个阈值的交易,费用增加到 10/40 gas。这种变化将通过限制可以容纳在单个区块中的数据密集型交易的大小来显着减少最大区块大小。通过将数据密集型交易的 calldata 成本从每字节 4/16 增加到 10/40 gas,本 EIP 旨在将可能的 EL 负载大小减少到大约 0.72 MB (30_000_000/40),而不会影响大多数用户。其他对抗性区块构造可能具有大约 1.26MiB 的不可压缩 EL 负载大小。

值得注意的是,普通用户(例如,发送 ETH/Tokens/NFTs、参与 DeFi、社交媒体、restaking、桥接等)不主要使用 calldata 进行 DA 的用户可能不会受到影响。涉及大量 EVM 计算的交易的 calldata 成本保持在每字节 4/16 gas,因此这些交易不受影响。

向后兼容性

这是一个向后不兼容的 gas 重新定价,需要计划内的网络升级。

钱包开发人员和节点运营商必须更新 gas 估算处理,以适应新的 calldata 成本规则。具体来说:

  1. 钱包:使用 eth_estimateGas 的钱包必须进行更新,以确保它们正确计算 TOTAL_COST_FLOOR_PER_TOKEN 参数。未能这样做可能会导致 gas 估算不足,从而导致交易失败。

  2. 节点软件:诸如 eth_estimateGas 之类的 RPC 方法必须包含更新后的 gas 计算公式。节点开发人员必须确保与更新后的 calldata 定价逻辑兼容。

用户可以保持其通常的工作流程而不进行修改,因为钱包和 RPC 更新将处理这些更改。

安全注意事项

由于减少了最大可能的区块大小,因此没有提出安全问题。

在某些情况下,将两个交易合并为一个以降低成本似乎是有利的。例如,将一个严重依赖 calldata 但最少依赖 EVM 资源的交易与另一个执行相反操作的交易捆绑在一起。但是,由于以下几个原因,这不是一个重要的问题:

  1. 这种类型的捆绑在今天已经成为可能。合并多个交易可以节省第一个交易之外的每个额外交易的 21,000 gas 成本,这是 ERC-4337 中明确支持的功能。
  2. 这种捆绑不会损害本 EIP 的区块大小减少目标。
  3. 实际上,由于信任和协调要求等挑战,交易捆绑通常是不切实际的。

这些因素确保交易捆绑不会构成重大问题。

版权

版权和相关权利通过 CC0 放弃。

Citation

Please cite this document as:

Toni Wahrstätter (@nerolation), Vitalik Buterin (@vbuterin), "EIP-7623: 增加 calldata 成本," Ethereum Improvement Proposals, no. 7623, February 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7623.