# 以太坊EVM与智能合约执行

By [Chris Gao](https://paragraph.com/@sec-dao) · 2022-05-12

---

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值，这个值在交易信息中包括。

---

*Originally published on [Chris Gao](https://paragraph.com/@sec-dao/evm)*
