EVM 笔记合集

简介 以太坊虚拟机(Ethereum Virtual Machine,EVM)是一个去中心化的、跨节点一致的执行环境,负责在所有以太坊节点上安全地执行智能合约代码。节点运行 EVM 来处理交易、执行合约逻辑,并通过消耗 Gas(燃料) 来度量并限制计算资源,从而保障网络的效率与安全 前提知识 要快速理解 EVM,建议具备以下基础: 计算机科学常用术语:字节(byte)、内存(memory)、堆栈(stack)等 密码学与区块链基础:哈希函数(如 Keccak-256)、默克尔树(Merkle Tree / Patricia Trie)等概念 智能合约开发的基本流程(编译后生成字节码、部署到链上、通过交易触发执行)会帮助理解细节 从账本到状态机:概念上的迁移 与比特币常被比作“分布式账本”不同,以太坊更适合被看作一个分布式状态机。除了记录账号与余额之外,以太坊还维护一个可随交易变化的机器状态,并能在状态变更时执行任意机器代码(即智能合约)。这些状态变更的规则由 EVM 明确定义 数学上可以把以太坊的状态转换描述为一个确定性的函数: Y(S, T) = S' 给定旧的有效状态 S 与一组新的有效交易 T,状态转换函数 Y(S, T) 产出新的有效状态 S' 状态(State) 以太坊的全局状态由一种称为 改进版 Merkle–Patricia Trie 的巨大数据结构保存。该结构将所有账户(包括外部拥有账户和合约账户)及其关联的数据通过哈希组织起来,最终回溯到区块链上的单一根哈希(state root)。这种设计保证了状态可证明性与高效性(例如轻客户端验证) 交易(Transactions) 交易是由账户发起并经密码学签名的指令,分为两类: 消息调用交易(Message Call):调用现有合约或向外部账户发送 ETH 合约创建交易(Contract Creation):将已编译的智能合约字节码部署为一个新的合约账户。部署后,合约字节码存储在该合约账户中;每当有交易/消息调用该合约时,EVM 会读取并执行这些字节码 EVM 的工作方式 堆栈机(Stack machine) EVM 是一个基于堆栈的虚拟机: 堆栈深度上限为 1024 项 每个堆栈项为 256 位(与以太坊使用的 256 位加密原语保持一致,例如 Keccak-256) 绝大多数操作以堆栈为中心进行:入栈、出栈、二元运算(ADD、SUB、MUL、DIV、AND、OR、XOR)等 内存(Memory) 执行期间,EVM 维护一个瞬态的 内存(memory),它是一个可字节寻址的动态字节数组: ...

January 11, 2025 · 1 min · 162 words · Guangyang Zhong