在继续以太坊黄皮书的探索之旅中,我们来到了整个以太坊系统的核心——以太坊虚拟机(Ethereum Virtual Machine, EVM),如果说区块链是分布式账本,那么EVM就是运行在这个账本上的“世界计算机”的处理器,黄皮书第四部分(通常对应黄皮书的第4章,具体版本可能略有差异,但核心内容一致)详细定义了EVM的规范,包括其架构、执行模型、存储结构以及预编译合约等,这部分内容是理解以太坊智能合约如何运行、状态如何变迁的关键。

EVM概述:一个基于栈的虚拟机

EVM本质上是一个图灵完备的虚拟机,这意味着它能够执行任何可计算的任务,只要给予足够的时间和资源,为了实现这一点并保证安全性、确定性以及避免无限循环等问题,EVM采用了基于栈的架构。

  • 基于栈:与基于寄存器(如x86架构)的CPU不同,EVM的所有操作数都从栈中获取,操作结果也压回栈中,栈是一种后进先出(LIFO)的数据结构,EVM有一个执行栈(Execution Stack),用于在指令执行过程中临时存储数据,栈的最大深度为1024,以防止栈溢出攻击,这种设计简化了虚拟机的实现,并确保了操作的确定性。

  • 操作码(Opcode):EVM通过一系列预定义的操作码来执行指令,这些操作码涵盖了算术运算(ADD, SUB, MUL)、逻辑运算(AND, OR, NOT)、比较(LT, GT, EQ)、位操作(SHL, SHR, SAR)、内存管理(MLOAD, MSTORE, MSTORE8)、存储交互(SLOAD, SSTORE)、控制流(JUMP, JUMPI, STOP, RETURN, REVERT, INVALID)、合约创建(CREATE, CREATE2)以及日志记录(LOG0-LOG4)等,每一个操作码都有明确的gas消耗规则。

执行模型:字节码解释与Gas机制随机配图