了解区块链虚拟机:EVM、HVM、WASM、MOVE

EVM

基础概念

EVM,是ERC协议和运作的心脏。

简单的类比:EVM之于以太坊,正如Java虚拟机之于Java语言

我们写的java代码会被编译成字节码,但计算机无法识别字节码;java虚拟机把字节码编译成计算机系统可以识别的机器码指令,然后在计算机上运行。如下图所示:

EVM的存在是为了能让我们用Solidity编写的合约代码,运行在以太坊的环境中。这样类比的话,以太坊就相当于计算机环境,EVM把合约代码编译成以太坊能识别的机器码运行。如下图所示:

大致流程:

当智能合约被编译成二进制文件后,被部署到区块链上。用户通过调用智能合约的接口,来触发智能合约的执行操作。EVM执行智能合约的代码,修改当前区块链上的数据(状态)。被修改的数据,会被共识,确保一致性。

它实际上是完全隔离的,这意味着在EVM上运行的代码无法访问网络、文件系统和其他进程。智能合约对其他的智能合约的访问权也有限,在区块链网络上单独运作。

编写智能合约有三个主要步骤:

  1. 用高级语言编写,如Solidity
  2. 用EVM编译器编译成字节码
  3. 用客户端上传到区块链网络

技术细节

EVM的存储模型

EVM是一个基于堆栈的虚拟机,具有临时内存字节数组和持久键值存储(持久存储在Storage中)。

Stack:EVM是基于栈(stack)的虚拟机,stack用来保存指令的输入输出数据,最大深度为1024个字,其中每个单元就是一个字。

临时存储Memory:内存,一个简单的内存数组,用于临时存储EVM代码运行中需要存取的各种数据,基于字进行寻址和扩展

永久存储Storage:用来保存所有合约“状态”的永久存储,由以太坊客户端独立维护,每个账户的存储区域被以“字”为单位划分为若干个“槽”(solt),合约中的状态变量会根据其具体类型分别保存到这些槽中。例如在合约创建时由EVM根据合约定义的状态变量进行初始化,将他们保存进以“字”为单位划分的“存储槽(solt storage)”中。

Storage也是作为是世界状态的一部分存在的,客户端会用一个MPT来维护其数据。

ROM:用来保存所有EVM程序代码的只读存储,由以太坊客户端独立维护。

交易在EVM的执行

输入一笔交易,内部会转换成一个Message 对象,传入EVM执行。

普通转账交易

如果是一笔普通转账交易,那么直接修改StateDB中对应的账户余额即可。

智能合约的创建或者调用

如果是智能合约的创建或者调用,则通过EVM中的解释器加载和执行字节码,执行过程中可能会查询或者修改StateDB。

1.生成Contract对象

交易会被转换成一个Message对象传入EVM,而EVM则会根据Message生成一个Contract对象以便后续执行。

2.送入解释器执行

EVM是基于栈的虚拟机,解释器中需要操作四大组件

PC:类似于CPU中的PC寄存器,指向当前执行的指令

Stack:执行堆栈,位宽为256bits,最大深度为1024

Memory:内存空间

Gas:油费池,耗光油费则交易执行失败

EVM的每条指令称为一个OpCode,占用一个字节,所以指令集最多不超过256

  • 首先PC会从合约代码中读取一个OpCode
  • 然后从一个JumpTable中检索出对应的operation,也就是与其相关联的函数集合
  • 接下来会计算该操作需要消耗的油费,如果油费耗光则执行失败,返回ErrOutOfGas错误。如果油费充足,则调用execute()执行该指令,根据指令类型的不同,会分别对Stack、Memory或者StateDB进行读写操作。

EVM机器语言

EVM机器语言分为特定的指令集组,例如算术运算,逻辑和比较运算,控制流,系统调用,堆栈操作和储存器操作。除典型的Bytecode操作外,EVM还必须管理帐户资讯(即地址和余额),当前gas价格和区块资讯。

通用堆栈操作

POP // 项目出栈
PUSH // 项目入栈
MLOAD // 将项目加载到记忆体中
MSTORE // 在记忆体中储存项目
JUMP // 改变程式计数器的位置
PC // 程式计数器
MSIZE // 活动的记忆体大小
GAS // 交易可用的gas数量
DUP // 复制栈项目
SWAP // 交换栈项目

<< · Back Index ·>>

发表回复

相关推荐

盤點近五十年每個田徑小項的發展與未來(14)——女子跳遠篇

本文主要盤點的田徑項目是女子跳遠,主要從奧運會和世錦賽這兩個田徑的最高級別賽事的維度考量,奧運會從1972年慕尼黑奧運會...

· 30秒前

obey me/Obey Me! Nightbringer 安卓/IOS的下载更新方法及入坑需知

obey me是2019年12月发布的,游戏语言有繁中,是养卡推关的玩法。没有姐妹会拒绝顶级的文案,天花板级别的剧情和人设的,会 ...

· 1分钟前

劈山救母(暗線和黑結局)

本文為下回答更新而來,因結局方向變化致原文多處修改,幹脆連部分角色名字一起改瞭重新發一篇。話說有歌詞唱道“天上下凡三聖...

· 2分钟前

全面客觀條件的考察,是創業的基石

讀《毛澤東選集》第一卷 談對創業的一些淺薄的理解。成功的創業中,客觀條件和主觀能動,是缺一不可的今天單說創業中,客觀條...

· 3分钟前

2023遮阳伞/雨伞推荐丨雨伞要怎么选?雨伞的品牌推荐/买哪个品牌的雨伞好

晴时防晒,雨来遮盖,无论春夏秋冬,我们可越来越离不开伞了。既然它在我们生活中使用率如此高,你不会还是随手在超市一挑就 ...

· 3分钟前