EIP-7666: EVM 化身份预编译
移除身份预编译,并放置一段具有等效功能的 EVM 代码
Authors | Vitalik Buterin (@vbuterin) |
---|---|
Created | 2024-03-31 |
Discussion Link | https://ethereum-magicians.org/t/eip-7561-evm-ify-the-identity-precompile/19445 |
摘要
移除地址为 0x04 的身份预编译。在此更改生效的区块开始执行时,将一小段具有相同功能的 EVM 代码放入该合约中。
动机
如今,以太坊拥有大量的预编译合约。这些预编译合约中,有近一半的使用率不高,并且增加了持续的维护成本和共识漏洞的风险,同时也增加了新的以太坊客户端实现的开发工作量,包括 ZK-EVM 和形式化验证友好的语言实现。
本 EIP 提出了一条以太坊生态系统优雅地放弃这些预编译合约的路径,并通过将此过程应用于所有预编译合约中最简单的一个来迈出第一步:身份预编译(输出等于输入 calldata 的 returndata)。身份预编译最初被引入是因为内存复制是一种常见的操作,并且没有可用于直接执行该操作的 opcode。 此后,关于 opcode 可接受性的规范发生了变化,我们引入了带有 EIP-5656 的 MCOPY 操作码。 因此,我们可以删除身份预编译,并用一段超小的 EVM 代码来复制其功能。
将来,此技术可以应用于其他更复杂的预编译合约,例如很少使用的哈希函数和 MODEXP。
规范
Parameter | Value |
---|---|
IDENTITY_PRECOMPILE_ADDRESS |
0x0000....0004 |
EVM_CODE |
0x365f5f37365ff3 |
在激活此分叉的区块开始时,将 IDENTITY_PRECOMPILE_ADDRESS
的代码设置为 EVM_CODE
。 从该区块开始(包括该区块),IDENTITY_PRECOMPILE_ADDRESS
不应再被视为预编译合约。
原理
给定的 EVM_CODE
对应于
CALLDATASIZE PUSH0 PUSH0 CALLDATACOPY CALLDATASIZE PUSH0 RETURN
这会将 calldata 复制到内存中,然后返回相同的内存切片。 因此,这是对以太坊的最小破坏性更改,可以保留功能,并实现将预编译合约的数量减少 1 的目标。
向后兼容性
给定 EVM_CODE
的功能与身份预编译相同。 Gas 成本略有不同,但是以太坊生态系统之前已经多次进行过 gas 重新定价,并且其影响已得到充分理解。
安全考虑
由于没有引入或降低成本的新功能,因此不会引起安全问题。
版权
版权及相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Vitalik Buterin (@vbuterin), "EIP-7666: EVM 化身份预编译 [DRAFT]," Ethereum Improvement Proposals, no. 7666, March 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7666.