Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-7825: 交易 Gas 限制上限

引入一个协议级的交易最大 gas 用量上限,设为 3000 万。

Authors Giulio Rebuffo (@Giulio2002)
Created 2024-11-23
Discussion Link https://ethereum-magicians.org/t/eip-7825-transaction-gas-limit-cap/21848

摘要

本提案引入了一个协议级的单个交易最大 gas 用量上限,设为 3000 万 gas。通过实施此限制,以太坊可以增强其对某些 DoS 向量的抵抗力,提高网络稳定性,并为交易处理成本提供更高的可预测性,尤其是在提高 Gas Limit 的背景下。

动机

目前,理论上交易可以消耗高达整个区块 gas 限制的 gas,这带来了一些风险:

  1. DoS 攻击:单个交易消耗大部分或全部区块 gas 可能会导致负载分配不均,并影响网络稳定性。
  2. 状态膨胀风险:高 gas 交易通常会导致更大的状态更改,增加节点的负担并加剧以太坊状态增长问题。
  3. 验证开销:高 gas 交易可能导致更长的区块验证时间,从而对用户体验和网络去中心化产生负面影响。

通过将单个交易限制为最多 3000 万 gas,我们的目标是:

  • 降低单笔交易 DoS 攻击的风险。
  • 促进区块内交易之间更公平的 gas 分配。
  • 通过减轻极端的区块验证时间,确保节点之间更好的同步。

规范

Gas 上限

  • 对任何单个交易强制执行协议级别的最大 3000 万 gas 限制。
  • 此上限适用于矿工或验证者设置的区块 gas 限制,不受其影响。
  • 指定 gas 限制高于 3000 万 gas 的交易将被拒绝,并显示相应的错误代码(例如,MAX_GAS_LIMIT_EXCEEDED)。

EVM 行为的变更

  1. Txpool 验证:在交易验证期间,如果发送者指定的 gasLimit 超过 3000 万,则交易无效(不包括在 txpool 中)。
  2. 区块验证:作为处理前的区块验证的一部分,任何具有 gasLimit > 3000 万的交易的区块都被视为无效并被拒绝。

协议调整

  • 客户端实现中交易的 GAS_LIMIT 参数将被限制为 3000 万。
  • 此上限与区块 gas 限制无关,区块 gas 限制仍然可以超过此值。

理由

为什么是 3000 万?

提议的 3000 万 gas 上限基于当今以太坊区块的典型大小,通常在 3000 万到 4000 万 gas 之间。此值足够大,可以允许复杂的交易,例如合约部署和高级 DeFi 交互,同时仍然为区块内的其他交易保留空间。

与当前 Gas 动态的兼容性

  • 向后兼容性:gas 使用量低于 3000 万的交易不受影响。现有的工具和 dApp 只需要进行少量更新即可实施新的上限。
  • 对验证者的影响:验证者可以继续处理 gas 限制超过 3000 万的区块,前提是单个交易符合上限。

向后兼容性

此更改与指定 gas 限制超过 3000 万的交易不向后兼容。具有如此高限制的交易将需要拆分为更小的操作。 预计此调整将影响最少数量的用户和 dApp,因为今天的绝大多数交易都远低于提议的上限。

安全注意事项

  1. DoS 缓解:固定上限降低了由过高的 gas 交易引起的 DoS 攻击的风险。
  2. 区块验证稳定性:通过限制单个交易,区块的验证变得更加可预测和统一。
  3. 边缘情况:某些高度复杂的交易,例如大型合约部署,可能需要重新架构以适应 3000 万 gas 的上限。

版权

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

Citation

Please cite this document as:

Giulio Rebuffo (@Giulio2002), "EIP-7825: 交易 Gas 限制上限 [DRAFT]," Ethereum Improvement Proposals, no. 7825, November 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7825.