EIP-4520: 以 EB 和 EC 开头的多字节操作码
保留 `0xEB` 和 `0xEC` 用于扩展操作码空间。
Authors | Brayton Goodall (@Spore-Druid-Bray), Mihir Faujdar (@uink45) |
---|---|
Created | 2021-12-01 |
Discussion Link | https://ethereum-magicians.org/t/multi-byte-opcodes/7681 |
摘要
保留 0xEB
和 0xEC
用于扩展操作码空间。
动机
引入新的操作码会很方便,这些操作码可能不经常使用,同时总共能够拥有超过 256 个操作码。由于单字节操作码是双字节操作码的一半大小,因此代码大小方面的最大效率将是频繁使用的操作码是单字节操作码。使用两个前缀字节来容纳最多 510 个双字节操作码。
规范
例如,一个新的算术操作码可以分配给 0xEC 01
(ADD
),一个新的操作码可以在 0xEB F4
(DELEGATECALL
) 处引入。
三字节操作码可以通过 0xEB EB
、0xEC EC
、0xEB EC
和 0xEC EB
进行双重前缀化。可以首先将实验性操作码分配到这个三字节空间,如果证明它们是安全和有用的,那么稍后可以将它们分配到双字节或单字节空间中的位置。
只有 0xEB EB
、0xEC EC
、0xEC EC
和 0xEB EC
可以被解释为操作码空间的进一步扩展。0xEB
和 0xEC
本身不会影响堆栈或内存,但是进一步的字节指定的操作码可能会影响。如果尚未定义多字节操作码,则应将其视为 INVALID
而不是 NOP
,这与未定义的操作码通常的情况一样。
理由
考虑到两个前缀字节而不是一个前缀字节足以用作扩展地址的保留。选择 0xEB
和 0xEC
都是 E 系列操作码的一部分。例如,0xEF
字节保留用于符合 Ethereum Object Format 的合约。通过拥有未分配的操作码来扩展操作码空间,与选择已分配的操作码相比,破坏已部署合约的功能的风险将降低。
向后兼容性
之前使用 0xEB
和 0xEC
可能会导致意外行为和损坏的代码。
安全考虑
目前没有已知的安全考虑。
版权
版权和相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Brayton Goodall (@Spore-Druid-Bray), Mihir Faujdar (@uink45), "EIP-4520: 以 EB 和 EC 开头的多字节操作码 [DRAFT]," Ethereum Improvement Proposals, no. 4520, December 2021. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-4520.