区块链 - 以太坊虚拟机



以太坊虚拟机 (EVM) 作为一个简单的基于堆栈的执行环境运行,它处理字节码指令以将系统状态从一种条件转换到另一种条件。

虽然 EVM 是图灵完备的,但其操作受执行指令所需 gas 的限制。此限制可防止出现可能导致拒绝服务攻击的无限循环。此外,EVM 配备了异常处理机制,以解决潜在问题,例如 gas 不足或指令无效,从而导致机器停止并向执行代理返回错误。

以太坊虚拟机结构

以太坊虚拟机 (EVM) 使用256 位字长,其堆栈最多可容纳 1024 个元素,并遵循后进先出 (LIFO) 原则。它作为一个完全隔离和沙盒化的运行时环境运行。在 EVM 中执行的代码无法访问外部资源,包括网络或文件系统。

此设计增强了安全性,确保了确定性执行,并允许在以太坊区块链上执行不受信任的代码——任何用户都可以运行的代码。如前所述,EVM 使用堆栈式架构。它本质上是大端序的,并使用 256 位宽的字,这有助于Keccak 256 位哈希和椭圆曲线密码学 (ECC) 计算。

存储类型

合约和以太坊虚拟机 (EVM) 使用三种主要的存储类型:

内存

第一种类型称为内存或易失性内存,它充当字寻址字节数组。一旦合约完成执行,内存就会被重置。这类似于传统计算中的RAM。写操作可以以 8 位或 256 位执行,而读操作仅限于 256 位字。

存储

第二种类型称为存储,它作为一个键值存储器运行,并永久记录在区块链上。键和值的大小均为 256 位。它可以与传统系统中的硬盘存储进行比较。

堆栈

EVM 作为一个堆栈式机器运行,在称为堆栈的数据区域内执行所有计算。内存中保存的所有值也存储在堆栈中。堆栈的最大深度为 1024 个元素,并容纳 256 位的字长。

Types of Storage in Ethereum Virtual Machine

执行环境

执行环境需要几个必要的组件才能有效地运行代码。这些关键参数由执行代理(例如交易)提供。

需要以下元素:

  • 当前系统状态。
  • 可用于执行的 gas。
  • 拥有正在执行的代码的账户的地址。
  • 交易发送方的地址,作为此执行的来源,可能与发送方的地址不同。
  • 启动交易相关的 gas 价格。
  • 输入数据或交易数据,取决于执行代理类型。这表示为字节数组。
  • 启动代码执行或交易发送方的账户地址。
  • 以 Wei 表示的值或交易值。如果执行代理是交易,则表示交易值。
  • 要执行的代码,以字节数组的形式提供,迭代器函数在每个执行周期中检索。
  • 当前区块的区块头。
  • 当前正在执行的消息调用或合约创建交易 (CALL、CREATE 或 CREATE2) 的数量。
  • 修改状态的授权。
Execution Environment

机器状态

机器状态的内部维护正在进行,在 EVM 的每个执行周期后进行更新。迭代器函数(将在下一节中详细介绍)在 EVM 中运行,以产生状态机单个周期的结果。

机器状态表示为包含以下组件的元组:

  • 可用 gas
  • 程序计数器,一个可以大到 256 的正整数
  • 内存内容,表示为总计 2256 个零的序列
  • 内存中活动字的数量,从位置 0 开始连续跟踪
  • 堆栈的内容。

迭代器函数

迭代器函数执行几个对于确定机器和整体世界状态的下一个状态至关重要的基本任务。这些任务包括:

  • 它从包含执行环境中机器代码的字节数组中检索下一条指令。
  • 它使用PUSH 或 POP操作适当添加或删除堆栈中的项目。
  • 根据指令或操作码相关的 gas 成本调整 gas 消耗,并相应地递增程序计数器 (PC)

此外,EVM 能够在其执行周期中遇到STOP、SUICIDE 或 RETURN操作码时在正常情况下停止。

广告
© . All rights reserved.