Alert Source Discuss
⚠️ Review Standards Track: Core

EIP-7830: 针对 EOF 增加合约大小限制

仅对 EOF 合约将限制提高到 64 KiB

Authors Alex Beregszaszi (@axic), Danno Ferrin (@shemnon)
Created 2024-11-29
Requires EIP-170, EIP-3540, EIP-3860

摘要

将 EOF 合约的合约大小限制修改为 64 KiB,而不是现有的 24 KiB 限制。 遗留合约不受影响。

动机

引入合约大小限制是为了防止 DoS 攻击。 JUMPDEST 分析是遗留合约所必需的,并且许多执行它的算法不是线性的,和/或存在未知的未知数。 这是犹豫增加限制的原因之一。

对于合约开发者而言,考虑到具有良好错误报告的现代合约会占用更多空间,该限制会带来烦人的问题。 他们被迫使用变通方法,例如“库”(使用 DELEGATECALL)、在常规合约中拆分应用程序(并在其中进行 CALL 调用)或使用代理(例如,“钻石模式”)。 所有这些解决方案都导致了次优模式、已部署合约中的错误以及资金损失。

使用 EOF 后,JUMPDEST 分析将从运行时中删除,并在部署期间执行一次验证过程。EIP-3860 引入的 initcode 成本也考虑到了这种验证。 因此,对于 EOF 而言,增加限制没有任何已知问题,因为开销已经考虑在内。

存储成本已经按每个合约字节支付。

规范

EIP-170MAX_CODE_SIZE 指定为 24576 字节,并且 EIP-3860MAX_INITCODE_SIZE 指定为 2 * MAX_CODE_SIZE(49152 字节)。

FORK_BLOCK 开始,对于 EOF initcode/代码(以 0xEF 0x00 字节开头的代码),限制更改为:MAX_CODE_SIZE 设置为 65536 字节(64 KiB)。 这意味着 MAX_INITCODE_SIZE 变为 131072 字节(128 KiB)。

理由

64 KiB 的限制是现有限制的 2 倍以上,虽然这不是显着的增加,但考虑到 initcode 的限制,这是一个现实的增加。 在 EOF 部署中,要部署的代码存储为一个节(“子容器”),其大小限制为 64 KiB,因此,如果不引入大型或可变长度编码的大小字段,则无法部署更大的合约。

可以将这些更改应用于 EOF,从而提出进一步的增加。

这种增加仍然适合 gas 调度,将大小限制为小于 gas 限制允许的大小。 在 EIP-170 中,gas 限制首先设置为“将上限设置在略高于当前 gas 限制可行的值”。 当时,gas 限制尚未超过 5M gas。

一个简单的分析表明,64 KiB 合约的合约部署在 14M 到 16M gas 之间,大致接近当前 15M 的目标。

  Cancun This EIP 36M Gas Max Initcode
Initcode bytes 200 200 200 65,536
Deployed Bytes 24,576 65,536 165,331 65,536
Zero byte ratio 10% 10% 10% 10%
Initcode Cost 4/16 4/16 4/16 4/16
         
Intrinsic Gas 53,000 53,000 53,000 53,000
Calldata Gas 366,685 972,893 2,449,859 1,939,866
EIP-3860 Gas 49,552 131,472 331,062 262,144
EVM Execution 100,000 100,000 100,000 100,000
Code Deposit 4,915,200 13,107,200 33,066,200 13,107,200
         
Total Cost 5,484,437 14,364,565 36,000,121 15,462,210

请注意,Max 30M gas 的 135 KiB 合约大小超出了本 EIP 中提议的限制,并且包含在内是为了显示超出当前 gas 限制所需的条件。

向后兼容性

这是一个向后兼容的更改。 现有合约不受影响,只有新的部署会受到影响。

安全考虑

鉴于分析成本是作为部署的一部分支付的,因此合约的大小不应影响运行时。

可能需要进行更彻底的分析,以确定所提出的限制是否因客户端存储架构而构成任何风险。

版权

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

Citation

Please cite this document as:

Alex Beregszaszi (@axic), Danno Ferrin (@shemnon), "EIP-7830: 针对 EOF 增加合约大小限制 [DRAFT]," Ethereum Improvement Proposals, no. 7830, November 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7830.