欢迎订阅专栏:10分钟智能合约:进阶实战
EVM
概念
EVM(Ethereum Virtua lMachine)以太坊虚拟机是
- 一个基于栈架构、顺序执行的以太坊智能合约运行时环境,
- 用于处理智能合约相关交易,同一笔交易的代码会在所有节点EVM上执行。
- EVM使用Gas(燃料)度量所需的计算工作,确保去中心化环境下安全和高效地执行合约代码。
特点
- 沙盒环境:代码隔高环境下运行,无法访问网络、文件系统等
- 确定性:相同输入和代码在所有节点上得到的结果相同
- 图灵元备性:支持复杂计算,能够执行任何逻辑明确的代码
- 状态持久性:持久存储合约的全局状态变量
- Gas机制:通过Gas费用限制计算资源消耗,防止溢用
结构
Stack(栈)
存储字节码执行过程的中间数据和指令,最多可容纳256bitx1024个元素,以256bit为单位进行读写。
Memory(内存)
线性存储,用来在运行期间临时存储数据,字长为8位,一次读取256位,一次写入可以为8bit或256bit。
Storage(存储)
可读写修改的持久存储,为256bit到256bit的键值对存储(插槽),一共2^256个插槽,,每次读写都是256bit.
EVM执行交易
EVM运行
- 运行步骤: 1.加载字节码 2.字节码逐条执行操作码 3.PC移动,消耗一定数量的Gas 4.通过Stack进行操作码运算 5.Memory用以临时存储中间数据 6.交易过程及结果在Storage持久存偷。
- 字节码和操作码:
- 字节码(Bytecodes):合约编译后的低级代码,形如6806048523...
- 操作码(Opcode): www.evm.codes/
合约部署交易
1.以太坊初始化一个EVM执行环境 2.加载字节码 3.依次执行每个操作码,PC移动,消耗一定数重的Gas 4.初始化变量、执行构造函数 5.生成并存储合约代码(RuntimeCode)
合约调用交易
1.初始化一个EVM执行环境 2.通过to->codeHash加载合约实际字节码 3.加载data并解析,找到执行函数入口,并传递参数 4.依次执行操作码,PC移动,消耗一定数量的Gas 5.Stack中进行操作码运算,Memory用以临时存储中间数据 6.交易过程及结果在Storage持久存借