Skip to content

以太坊虚拟机EVM #134

@jht6

Description

@jht6

EVM

EVM用于合约的部署和执行,可理解为一个全球性的去中心化计算机。

特性

  • 基于栈,在一个栈中保存所有内存数值。
  • 合约执行受gas限制
  • 数据处理单位是256位的字(主要为了方便处理哈希运算和椭圆曲线计算)

EVM的状态

世界状态:一个映射,以太坊地址 -> 账户数据,包括:

  • ETH余额
  • nonce,外部账号则为该账户发出交易的次数,合约账户则为该合约创建合约的次数
  • 存储与代码,仅合约账户会用到

当执行合约时,一个新的EVM实例会被初始化并执行合约代码。

部署合约

部署合约时,需要发送一笔特殊的交易,to地址是0x0,即零地址;data则是用于输出合约代码的代码,EVM新实例会执行把data加载到ROM中并执行,将执行输出作为新合约账户的代码。

  • 部署字节码:即上述的data
  • 运行时字节码:即合约账户真正的关联代码

函数标识

函数签名的keccak256哈希值的前4字节即为函数标识

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions