Ethereum虚拟机

Ethereum虚拟机

  1. 基于栈的虚拟机,一次调用产生一个实例
  2. 每个栈的元素大小是32字节
  3. 大小无限制,调用深度上线是1024
  4. 临时存储指存在于本实例中,永久存储指存储在MPT中的变量

Ethereum组成

指令集

指令集定义了以太坊虚拟机(EVM)能理解并执行的所有操作。

每一条指令就是一种操作,例如:

指令 功能
ADD 加法
MUL 乘法
SSTORE 写入存储
CALL 调用其他合约
SHA3 哈希运算

代码

代码是部署在以太坊合约账户上的字节码(Bytecode)。

流程:

  • 用 Solidity/Vyper 等高级语言编写
  • 用编译器(如 solc)编译成 EVM 字节码
  • 部署到区块链上,变成固定数据

特点:

  • 部署后不可修改(除代理合约例外)
  • EVM 按字节逐条执行
  • 支持跨合约调用

全局状态

全局状态表示以太坊上所有账户(普通地址和合约地址)的当前快照

记录每个账户的:

  • 余额(Balance)
  • Nonce(交易次数)
  • 存储(Storage)
  • 代码(Code)

全局状态通过 Merkle Patricia Trie(MPT) 组织,确保高效、可验证。

执行环境

执行环境描述了一次交易/调用时的上下文信息,例如:

  • 当前合约地址(address)
  • 调用者地址(caller)
  • 传入的 ETH 数量(value)
  • 区块相关信息(timestamp、number)
  • Gas 限制(gas limit)
  • 输入数据(calldata)

每次交易或合约调用都有自己独立的执行环境。

虚拟机实例状态

执行过程中,EVM会维护一个临时的内部状态,包括:

  • 栈(Stack):存放中间数据,最大 1024 个元素
  • 内存(Memory):可变长度的字节数组(临时的)
  • 存储(Storage):持久化存储,属于全局状态
  • 程序计数器(PC):记录当前执行到哪条指令
  • 剩余 Gas(Remaining Gas)

这些状态只在执行期间存在,执行完成后销毁。

定价策略

定价策略定义了每种操作所需消耗的 Gas 量。

操作 Gas 消耗
加法(ADD) 3 Gas
存储写入(SSTORE) 高达 20,000 Gas
合约创建(CREATE) 极高 Gas 消耗

预编译合约

预编译合约是由以太坊内置、预先优化好的常用功能模块,具有固定地址。

常见的预编译合约:

地址 功能
0x01 ecrecover(签名恢复)
0x02 sha256 哈希
0x03 ripemd160 哈希
0x04 identity(返回输入)
相关推荐
迷藏4949 小时前
**发散创新:基于Solid协议的Web3.0去中心化身份认证系统实战解析**在Web3.
java·python·web3·去中心化·区块链
AI_Claude_code10 小时前
ZLibrary访问困境方案三:Web代理与轻量级转发服务的搭建与优化
爬虫·python·web安全·搜索引擎·网络安全·web3·httpx
开开心心_Every16 小时前
内存清理软件灵活设置,自动阈值快捷键清
运维·服务器·pdf·web3·电脑·excel·共识算法
木西4 天前
深度复刻 Sky Protocol:基于 OpenZeppelin V5 与 Solidity 0.8.24 的工程实践
web3·智能合约·solidity
OxYGC4 天前
[Web3] 一文读懂区块链中的账本类型
web3·区块链
Joy T7 天前
【Web3】深度解析 NFT 跨链智能合约开发:原生资产与衍生包装合约架构实战
git·架构·web3·区块链·node·智能合约·hardhat
Joy T8 天前
【Web3】智能合约质量保障工程:从单元测试到 Gas 效能优化
单元测试·log4j·web3·智能合约·hardhat
Joy T8 天前
【Web3】NFT 元数据去中心化存储与智能合约集成实战
开发语言·web3·去中心化·区块链·php·智能合约·hardhat
亚历克斯神9 天前
Flutter 三方库 eip55 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、严谨、符合 Web3 标准的以太坊地址校验与防串改引擎
flutter·web3·harmonyos
阿晨9 天前
Solana SquadX off-chain 登录 /「类签名」
web3