EIP-3860 提议更改 以太坊 中 initcode 的最大大小限制,并引入对 initcode 的每 32 字节块收取 gas 费用,作为 Shapella 升级的上海硬分叉的一部分。该提案旨在确保对 initcode 进行公平收费,费用与 initcode 的长度成比例。
2021 年 7 月 16 日,创建了 EIP-3860 以更新 initcode,从而最大限度地降低风险。由于对 initcode 的大小没有限制,导致一些 EVM 提案进行了长时间的讨论,影响了设计,甚至导致功能的延迟或取消。通过引入限制,该提案旨在通过设置显式限制(例如代码大小、代码偏移量和跳转偏移量)来简化 EVM 引擎,以适应 16 位。 [1][3]
Initcode 是在创建新合约期间执行的代码,当前 initcode 的最大值在 EIP-170 中设置为 24576 字节。但是,EIP-3860 建议将 initcode 的新最大值增加到 49152 字节,这是当前最大值的两倍。此更改将使最大合约大小翻倍,并使合约具有更复杂的功能。 [1]
每字节 initcode 的 gas 成本将增加 0.0625 gas,并且将 gas 部署到合约的成本也将略有增加。此外,每 32 字节的 initcode 块还有额外的 2 gas 成本,这表示合约创建期间 jumpdest 分析的成本。 [2]
EIP-3860 提案为在以太坊区块链上创建新程序设置了规则。两个重要的规则是 INITCODE_WORD_COST(成本为 2)和 MAX_INITCODE_SIZE(是允许的最大代码大小的两倍)。如果交易的程序代码大于 MAX_INITCODE_SIZE,则该交易无效。此外,程序代码的成本包含在交易的总成本中,如果交易没有足够的 gas 来支付成本,则该交易无效。对于 CREATE 和 CREATE2 指令,在执行程序代码之前会扣除额外的 gas 成本。INITCODE_WORD_COST 的成本常数由性能基准确定,基准是 geth 1.10.9 中的 KECCAK256 哈希。 [2]