合约调用另一个合约后,返回数据不必提前猜长度也能完整取回,靠的是EIP-211加的两条指令:RETURNDATASIZE量尺寸、RETURNDATACOPY搬数据,数据存在一块每次调用后自动覆写的虚拟缓冲区里。本文讲清这套机制补上的坑、和calldata相似的记账方式,以及它如何让通用转发合约这类模式成为可能。
汇总与「EVM」相关的文章,帮助你系统了解该主题。
合约调用另一个合约后,返回数据不必提前猜长度也能完整取回,靠的是EIP-211加的两条指令:RETURNDATASIZE量尺寸、RETURNDATACOPY搬数据,数据存在一块每次调用后自动覆写的虚拟缓冲区里。本文讲清这套机制补上的坑、和calldata相似的记账方式,以及它如何让通用转发合约这类模式成为可能。
EVM的栈单元有256位宽,EIP-616的想法是把这32字节当作一条向量寄存器,切成八格四格这样的车道,一条指令同时算八个数。这条2017年的SIMD提案给哈希和椭圆曲线运算许诺了数倍加速,最终停在Stagnant。本文讲清它的双字节编码方案、提案里引用的加速数字,以及它没被采纳时预编译路线怎样赢下同一场竞赛。
EVM的0x40段操作码专门读区块信息:区块哈希、矿工时戳、区块号都有,唯独区块奖励查不到。EIP-698提议加一条BLOCKREWARD指令,返回包含基础奖励、叔块付款和手续费的整块收益,服务链上分账与矿池结算。这条2017年的提案停在Stagnant。本文讲清它想补的读取缺口、动机里的矿池分账算法,以及它最终没被写进虚拟机名单的原因。
在以太坊上调用哈希、配对这类预编译合约,除了预编译自身的定价,还要额外付一笔 CALL 指令的燃料费,导致任何预编译的实际使用成本都不低于七百 Gas。EIP-1109 为此设计了一条去掉通用 CALL 开销的专用指令。本文拆解这笔双重计费的来历、专用指令的参数差别,以及它为何停在 Stagnant。
以太坊的 CALL 系列指令允许调用方指定传多少燃料,这个自由度让 Gas 改价时一批合约集体窒息。EIP-7069 为对象格式合约设计了 EXTCALL 一族新指令:去掉燃料参数、简化补贴规则、把成败布尔值换成三档状态码。本文拆解这套重构的语义清单和它搁浅的原因。
EVM 按被触碰的最高地址给内存算账,编译器只能把变量塞得尽量紧。EIP-3336 提出按固定大小的页来计费:用了哪几页付哪几页的钱,地址空间随便分配。这份 2021 年的提案解释了计费规则如何反过来塑造合约代码的形态。
以太坊上最常用的一步算术是乘一个数再除一个数,但EVM里做全精度乘除要靠基于mulmod的几十条指令模拟。EIP-5000提议给EVM加一条MULDIV指令,用512位中间精度一次算完。本文拆解它的规格、那个特殊的除零约定,以及它为什么停在Stagnant。
EOF格式把合约字节码装进带数据段的容器,旧的CODECOPY读码指令被弃用,读数据段需要新工具。EIP-7480提出DATALOAD、DATALOADN、DATASIZE、DATACOPY四条指令。本文逐条拆解它们的语义、Gas定价和越界补零规则。
EVM 的 gas 是整数,ADD 这类最便宜的指令至少收3,砍到1就是地板。EIP-2045提出一个更细的记账单位——粒子,1 Gas 等于一万粒子,让便宜指令的成本可以继续往下探。本文讲清这套双计数器账本的算法与它的止步原因。
EVM的字节码天生没有函数边界,参数怎么传、返回到哪、局部变量放哪儿全靠编译器口头约定。EIP-4573提出用一组指令把过程正式写进指令集。本文介绍它依赖的跳转表与容器框架,以及五条新指令各自管什么。