以太坊的 CALL 系列指令允许调用方指定传多少燃料,这个自由度让 Gas 改价时一批合约集体窒息。EIP-7069 为对象格式合约设计了 EXTCALL 一族新指令:去掉燃料参数、简化补贴规则、把成败布尔值换成三档状态码。本文拆解这套重构的语义清单和它搁浅的原因。
汇总与「EVM」相关的文章,帮助你系统了解该主题。
以太坊的 CALL 系列指令允许调用方指定传多少燃料,这个自由度让 Gas 改价时一批合约集体窒息。EIP-7069 为对象格式合约设计了 EXTCALL 一族新指令:去掉燃料参数、简化补贴规则、把成败布尔值换成三档状态码。本文拆解这套重构的语义清单和它搁浅的原因。
在以太坊上调用哈希、配对这类预编译合约,除了预编译自身的定价,还要额外付一笔 CALL 指令的燃料费,导致任何预编译的实际使用成本都不低于七百 Gas。EIP-1109 为此设计了一条去掉通用 CALL 开销的专用指令。本文拆解这笔双重计费的来历、专用指令的参数差别,以及它为何停在 Stagnant。
EVM的0x40段操作码专门读区块信息:区块哈希、矿工时戳、区块号都有,唯独区块奖励查不到。EIP-698提议加一条BLOCKREWARD指令,返回包含基础奖励、叔块付款和手续费的整块收益,服务链上分账与矿池结算。这条2017年的提案停在Stagnant。本文讲清它想补的读取缺口、动机里的矿池分账算法,以及它最终没被写进虚拟机名单的原因。
EVM的栈单元有256位宽,EIP-616的想法是把这32字节当作一条向量寄存器,切成八格四格这样的车道,一条指令同时算八个数。这条2017年的SIMD提案给哈希和椭圆曲线运算许诺了数倍加速,最终停在Stagnant。本文讲清它的双字节编码方案、提案里引用的加速数字,以及它没被采纳时预编译路线怎样赢下同一场竞赛。
合约调用另一个合约后,返回数据不必提前猜长度也能完整取回,靠的是EIP-211加的两条指令:RETURNDATASIZE量尺寸、RETURNDATACOPY搬数据,数据存在一块每次调用后自动覆写的虚拟缓冲区里。本文讲清这套机制补上的坑、和calldata相似的记账方式,以及它如何让通用转发合约这类模式成为可能。
EVM操作码空间里,0xfe被正式指定为INVALID无效指令:碰到它执行就立刻中止、Gas全部烧完。EIP-141把这件事写成规范只有几行字,但它给调试、编译器防御和合约保险丝提供了一个统一的中止信号。本文讲清0xfe的来历、它和REVERT的分工,以及为什么一个永远不会被正常执行的操作码值得单独写一条提案。
EVM 操作码单字节意味着最多二百五十六格,编号 4520 的提案提议把 0xEB 与 0xEC 保留为前缀字节,用双字节甚至三字节指令把空间扩出五百多格,未定义位置按 INVALID 处理。本文讲清单字节操作码的空间账、前缀方案的解析规则与向后兼容代价、它和 0xEF 保留字节的邻居关系,以及为什么这个提案停在 Stagnant。
以太坊地址固定一百六十位,但 EIP-7676 曾提议在 EOF 字节码里取消执行时的地址高位截断,为将来扩展地址空间做兼容准备。本文解释为什么 EVM 操作码把地址当两百五十六位栈值又只用低九十六位、7676 提出的 EXTBALANCE 与高位非零即停机规则、它与状态过期和账户地址映射的关系,以及普通用户要不要担心地址格式改变。
EVM的CALL指令把Gas参数当上限而不是配额,给不够就少给点也要跑。EIP-1930在2019年提出严格语义:指定多少必须给多少,给不出就revert,并提出用高位标志区分新旧语义的免加指令方案。提案停在Stagnant,但它点破了Gas语义里一个沿用至今的模糊地带。
以太坊上的隐私协议和ZK应用都绕不开alt_bn128曲线的三条预编译指令,EIP-1108在2018年把它们的Gas价格大幅下调:加法从五百降到一百五,配对检查的固定成本砍掉近六成。这份Final提案的定价方法本身就是一次成本审计。