Alert Source Discuss
⚠️ Draft Standards Track: Core

EIP-7903: 移除 Initcode 大小限制

移除 EIP-3860 中引入的 initcode 大小限制

Authors Charles Cooper (@charles-cooper)
Created 2025-03-05
Discussion Link https://ethereum-magicians.org/t/remove-initcode-size-limit/23066
Requires EIP-170, EIP-3860

摘要

本 EIP 提议移除 EIP-3860 中引入的 49152 字节的 initcode 大小限制。该限制使得在单个交易中部署多个解决 EIP-170 限制(24576 字节)的合约变得复杂,而现有的 initcode gas 计量已经确保了 initcode 的合理成本,包括 JUMPDEST 分析。

动机

EIP-3860 的 initcode 大小限制对部署模式施加了不必要的约束,特别是对于在单个交易中创建由多个 物理子合约 组成的大型 逻辑 合约的创建交易。 保留 EIP-170 的 24KB 运行时代码限制的一个关键论点是,高级语言 (HLL) 应该将其抽象化。 然而,EIP-3860 的限制阻止了 HLL 对此进行清晰的抽象,因为部署超过 49152 字节 initcode 的大型逻辑合约需要拆分为多个交易,从而破坏了抽象。

移除该限制简化了智能合约的部署,并使 HLL 能够清晰地抽象大型合约,而不会损害网络安全或成本归属。

规范

恢复 EIP-3860 中引入的 initcode 大小限制。具体来说:

  • 移除合约创建期间 initcode 大小的 49152 字节上限。
  • 保留现有的 initcode 执行 gas 成本,包括 EIP-3860 中定义的每个字节 2 gas 的 JUMPDEST 分析成本。

除了移除大小限制之外,不建议对已部署的合约大小限制(EIP-170)或 gas 计划进行任何更改。

原理

该提案的驱动因素是需要恢复合约部署模式的灵活性,例如工厂合约在一次交易中创建多个子合约。移除 49152 字节上限的设计决策利用了预先存在的 gas 计量系统,该系统与 initcode 大小呈线性关系(即,每个字节 2 gas),从而确保了公平的成本归属,而无需人为限制。

EIP-170 的 24576 字节限制的一个关键理由是,高级语言 (HLL) 应该将其抽象化。然而,EIP-3860 的 initcode 上限通过强制大型合约进行多交易部署来破坏这一点,从而打破了 HLL 旨在提供的抽象。移除上限通过支持单次交易部署来与这一理念保持一致。

替代设计,例如增加上限(例如,增加到 98304 字节),已被考虑但被拒绝,因为它们是任意的;gas 计量已经减轻了资源问题。每个区块的 gas 限制已经自然地限制了 initcode(在当前 3500 万的 gas 限制下,initcode 被限制在约 16mb)。此外,initcode 还有额外的隐含成本 - 它必须已经通过 calldata 或内存扩展支付了费用,从而进一步限制了它。

向后兼容性

此更改完全向后兼容。现有合约和交易不受影响,因为该提案仅取消限制,而不会更改执行语义或 gas 成本。

测试用例

安全考虑

不会引入新的安全风险。当前的 gas 计划已经通过按字节收费 initcode 来减轻了拒绝服务问题。进行了基准测试,并且 ns/byte 在从 128 字节到 15MB 的一系列不同字节码中保持一致。

版权

在 CC0 下放弃版权和相关权利。

Citation

Please cite this document as:

Charles Cooper (@charles-cooper), "EIP-7903: 移除 Initcode 大小限制 [DRAFT]," Ethereum Improvement Proposals, no. 7903, March 2025. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7903.