10分钟智能合约:进阶实战-2.2 EVM与智能合约

16 阅读3分钟

欢迎订阅专栏10分钟智能合约:进阶实战

EVM

概念

EVM(Ethereum Virtua lMachine)以太坊虚拟机是

  • 一个基于栈架构、顺序执行的以太坊智能合约运行时环境,
  • 用于处理智能合约相关交易,同一笔交易的代码会在所有节点EVM上执行。
  • EVM使用Gas(燃料)度量所需的计算工作,确保去中心化环境下安全和高效地执行合约代码。

特点

  • 沙盒环境:代码隔高环境下运行,无法访问网络、文件系统等
  • 确定性:相同输入和代码在所有节点上得到的结果相同
  • 图灵元备性:支持复杂计算,能够执行任何逻辑明确的代码
  • 状态持久性:持久存储合约的全局状态变量
  • Gas机制:通过Gas费用限制计算资源消耗,防止溢用

结构

image.png

image.png

Stack(栈)

存储字节码执行过程的中间数据和指令,最多可容纳256bitx1024个元素,以256bit为单位进行读写。 image.png

Memory(内存)

线性存储,用来在运行期间临时存储数据,字长为8位,一次读取256位,一次写入可以为8bit或256bit。

image.png

Storage(存储)

可读写修改的持久存储,为256bit到256bit的键值对存储(插槽),一共2^256个插槽,,每次读写都是256bit. image.png

EVM执行交易

EVM运行

image.png

  • 运行步骤: 1.加载字节码 2.字节码逐条执行操作码 3.PC移动,消耗一定数量的Gas 4.通过Stack进行操作码运算 5.Memory用以临时存储中间数据 6.交易过程及结果在Storage持久存偷。
  • 字节码和操作码:
    • 字节码(Bytecodes):合约编译后的低级代码,形如6806048523...
    • 操作码(Opcode): www.evm.codes/ image.png

合约部署交易

image.png

1.以太坊初始化一个EVM执行环境 2.加载字节码 3.依次执行每个操作码,PC移动,消耗一定数重的Gas 4.初始化变量、执行构造函数 5.生成并存储合约代码(RuntimeCode)

合约调用交易

image.png

1.初始化一个EVM执行环境 2.通过to->codeHash加载合约实际字节码 3.加载data并解析,找到执行函数入口,并传递参数 4.依次执行操作码,PC移动,消耗一定数量的Gas 5.Stack中进行操作码运算,Memory用以临时存储中间数据 6.交易过程及结果在Storage持久存借