以太坊EVM与智能合约执行

Ethereum Virtual Machine

EVM用来执行以太坊上的交易;每笔交易在传入EVM前,都被转换为一个message对象。

一个message对象其实就是一次交易数据:from,to,amount,data四个主要信息。

例如:程序中的 {msg.sender} 就是指调用者的地址;{msg.data} 就是打包到交易中的data数据,针对智能合约的调用,它主要包含了函数和参数值;

  • 如果是普通转账:EVM直接修改statedb中的数据即可;

  • 如果是智能合约创建/调用:EVM则会执行合约中的代码,期间会查询或修改statedb的数据。

EVM解释器

四大组件:PC, stack, memory, gas池

智能合约在EVM中调用原理和过程

1、当调用一个智能合约函数时:首先,虚拟机通过智能合约地址,从statedb中load出该智能合约的代码,然后再做相应的字节码执行操作。

2、将智能合约代码和输入信息(input:from,to,data)放入EVM解释器执行。

3、通过交易传入的data信息(函数和参数值)和合约代码,即可执行相应的函数;每个函数都有一个hex值,这个值在交易信息中包括。