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-170 将 MAX_CODE_SIZE
指定为 24576 字节,并且 EIP-3860 将 MAX_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.