
先区分执行规则与具体实现
区块链虚拟机源码不是一份所有客户端逐字共用的程序。以太坊EVM介绍列出不同语言的实现;它们需要按相同执行规则处理输入状态和交易,得到对应的新状态。阅读源码时,应先说明所读实现及版本,再把实现中的模块对应到规则,而不是将某个文件名当成协议本身。
本文只建立阅读框架,没有下载、编译或逐行审计某个客户端。EVM处理的是合约字节码与状态;介绍中的实现列表也不是产品性能排名。把这些范围写清,才能避免将规范概念、源代码组织和实测结果混成一件事。
栈用于运算,内存也不是长期账本
EVM介绍把执行模型描述为栈机器:栈最多容纳1024项,每项是256位字。运算指令围绕这些中间值工作。执行期间还存在临时内存,它不会跨交易保留。两者都不应被理解为程序随时可以写入并永久保存的账户数据库。
因此,看执行轨迹中某个值被算出,不能立刻断言它已经成为合约长期状态。可以在阅读笔记中分开标注:运算中间值在哪里、哪一步使用内存、是否涉及持久状态。这个标注方式是理解资料的建议,不是完整的程序正确性证明。

临时状态与持久状态仍需再分一层
同一EVM文档还区分了transient storage与持久storage。前者按交易存续,交易结束清除;后者属于账户关联的持久状态。不能仅因名称都含storage,就将它们的保存期限和作用范围视为相同,也不能把临时状态与普通内存直接合并。
假设两段代码都使用一个名为counter的变量,名称相同并不足以说明它们读写相同数据。还要核对其对应机制与执行上下文。这里采用假设名称辅助阅读,不构成真实代码示例,也未对某个网络当前启用的操作码作兼容性承诺。
变量改名不一定改变已保存数据
OpenZeppelin的可升级合约说明提供了一个有用对照:在它描述的存储布局场景中,变量改名后可以继续读到原来的值,删除末尾声明也不会自动清除已有存储。由此可见,源码中的文字名称和持久数据位置不是同一个概念,不能凭名称变化推断数据已经重建。
该文还区分传统布局与命名空间布局,实际规则需要结合对应实现阅读。本文只借此说明持久状态不能按临时变量理解,不指导合约升级或操作已有资产。一个可靠的源码阅读记录,应分别注明规则版本、数据层次和已核实范围,尚未运行的部分就保持未验证。