本文档提出了一项以太坊改进提案(EIP),旨在通过调整 calldata 的成本来缩小以太坊区块的最大可能大小及其方差。该提案引入了基于 EVM 操作 gas 消耗与 calldata gas 消耗比率的底价机制,以提高主要用于数据发布事务的 calldata 成本,同时避免影响普通用户的交易,并为未来的 blobs 或区块 gas 限制增加留出空间。
当前的 calldata 定价允许 EL 有效载荷最大达到 7.15 MB,而平均大小则小得多,约为 100 KB。 本 EIP 提议调整 calldata 成本,以减少最大可能的区块大小及其波动,同时不对普通用户造成负面影响。 这通过增加主要用于发布数据的交易的 calldata 成本来实现。
自 EIP-1559 以来,区块 gas 限制一直没有增加,而由于越来越多的 rollup 将数据发布到以太坊,区块的平均大小持续增加。此外,自 EIP-2028 以来,calldata 成本保持不变。 EIP-4844 引入了 blob 作为数据可用性(DA)的首选方法。 这种转变需要重新评估 calldata 定价,特别是为了解决平均区块大小和最大区块大小之间的差异。 通过引入一个取决于 EVM 操作消耗的 gas 与 calldata 消耗的 gas 比率的底线成本(floor cost),本提案旨在减小最大区块大小,以便为额外的 blob 或潜在的区块 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 为扣除 gas 退款后用于 EVM 执行的 gas。
令 INITCODE_WORD_COST 为 EIP-3860 中定义的 2。
当前用于确定每笔交易总 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 的成本提高到 10/40 gas,用于那些在 EVM 操作上花费的 gas 相对于 calldata 花费的 gas 未超过特定阈值的交易。这一变化将通过限制可以在单个区块中容纳的数据密集型交易的大小来显著减少最大区块大小。通过将数据密集型交易的 calldata 成本从每字节 4/16 gas 增加到 10/40 gas,本 EIP 旨在将可能的 EL 有效载荷大小减少到大约 0.72 MB (30_000_000/40),而不会影响大多数用户。其他对抗性区块构造可以具有大约 1.26MiB 的不可压缩 EL 有效载荷大小。
值得注意的是,普通用户(例如发送 ETH/Token/NFT、参与 DeFi、社交媒体、重质押、跨链等),如果他们不主要将 calldata 用于 DA,可能不会受到影响。 涉及大量 EVM 计算的交易的 calldata 成本仍然是每字节 4/16 gas,因此这些交易不受影响。
这是一项向后不兼容的 gas 重新定价,需要进行预定的网络升级。
钱包开发者和节点运营商必须更新 gas 估算处理,以适应新的 calldata 成本规则。具体而言:
钱包:使用 eth_estimateGas 的钱包必须更新,以确保它们正确考虑 TOTAL_COST_FLOOR_PER_TOKEN 参数。否则可能导致 gas 估算不足,从而导致交易失败。
节点软件:eth_estimateGas 等 RPC 方法必须纳入更新后的 gas 计算公式。节点开发者必须确保与更新后的 calldata 定价逻辑兼容。
用户可以保持其通常的工作流程不变,因为钱包和 RPC 更新将处理这些更改。
由于最大可能的区块大小减小,因此没有引发安全问题。
在某些情况下,将两笔交易合并为一笔交易以降低成本可能看起来是有利的。例如,将一笔严重依赖 calldata 但 EVM 资源消耗极少的交易与另一笔反之的交易捆绑在一起。然而,这并不是一个重大问题,原因如下:
这些因素确保交易捆绑不会构成重大问题。
通过 CC0 放弃版权及相关权利。
- 原文链接: github.com/nerolation/EI...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!