Ethereum EVM简介

这篇具有很好参考价值的文章主要介绍了Ethereum EVM简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 引言

首先需了解以下基本概念:

  • 1)区块链
  • 2)世界状态
  • 3)账号
  • 4)交易
  • 5)消息
  • 6)去中心化账本
  • 7)原子性和顺序性

1.1 何为以太坊区块链?

以太坊可看成是基于交易的状态机,交易代表了2个状态间的valid arc:
Ethereum EVM简介
将多笔交易整理打包为区块,区块为package of data:
Ethereum EVM简介
从状态的角度来看,可将以太坊看成是状态链(chain of states):
Ethereum EVM简介
从实现的角度来看,还可将以太坊看成是“BLOCKCHAIN”(chain of blocks):
Ethereum EVM简介
从账本的角度来看,还可将以太坊看成是“stack of transactions”:
Ethereum EVM简介

1.2 何为世界状态?

世界状态(World state)为address与account state之间的mapping:
Ethereum EVM简介
可从多个角度来看待world state:

  • mapping角度
  • table表格角度
  • object对象角度

Ethereum EVM简介

1.3 何为账号?

账号(Account)为world state的object对象表示:
Ethereum EVM简介

账号状态中可包含EVM code和Account storage:
Ethereum EVM简介
以太坊中主要有2种账号状态:

  • Externally owned account(EOA):由某个私钥控制。不允许包含EVM code。
  • Contract account(CA,合约账号):包含了EVM code。由EVM code控制。

Ethereum EVM简介
Ethereum EVM简介
账号地址以160-bit code来表示:
Ethereum EVM简介

1.4 何为交易?

交易为经密码学签名的单个指令:
Ethereum EVM简介
交易由external actor来提交:
Ethereum EVM简介
有两种实用的交易类型:

  • contract creation交易
  • message call交易

Ethereum EVM简介

交易中包含的字段有:

  • nonce
  • gasPrice
  • gasLimit
  • to:若为contract creation交易,该值为0;否则为160 bit address。
  • value:为tranasferred wei(ether)
  • v, r, s:交易签名
  • init or data:contract creation 或 message call

1.4.1 contract creation交易

contract creation交易示意为:
Ethereum EVM简介

1.4.2 message call交易

message call交易示意为:
Ethereum EVM简介

1.5 何为message?

message的来源主要有:

  • 由交易触发的关联消息
  • 由EVM code触发的消息

Ethereum EVM简介
消息之间的发送和接收方可分为以下四种场景:

  • 1)由EOA通过交易发送消息给EOA
  • 2)由EOA通过交易发送消息给CA
  • 3)由CA通过EVM code发送消息给EOA
  • 4)由CA通过EVM code发送消息给CA

Ethereum EVM简介

1.6 何为去中心化账本?

区块链不仅为a globally shared, transactional database:
Ethereum EVM简介
区块链还是a globally shared, 去中心化, transactional database:
由去中心化节点构成以太坊P2P网络:
Ethereum EVM简介
external actors通过以太坊节点来访问以太坊世界:
Ethereum EVM简介
不过,实际以太坊客户端是通过Web3 API来访问以太坊网络:
Ethereum EVM简介

1.7 何为原子性和顺序性?

交易的原子性是指:

  • 交易为原子式操作,无法分解或中断。
  • 交易要么完全执行成功,要么完全失败。(All(complete done)or Nothing(zero effect))

Ethereum EVM简介

交易的顺序性是指:

  • 交易是无法重叠的
  • 交易必须按顺序执行

Ethereum EVM简介
不过,交易的顺序不是按交易发起时间来确定的,交易的顺序是无法保证的,由矿工来决定区块内的交易顺序:
Ethereum EVM简介
Ethereum EVM简介
同时,区块间的顺序则由共识算法(如PoW)来决定:
Ethereum EVM简介

2. 虚拟机

以太坊虚拟机为stack-based, big-endian VM with a word size of 256-bits,并用于运行智能合约。智能合约与普通账号类似,只是当收到某交易时,智能合约会运行EVM bytecode,处理相应的计算以及后续交易。
EVM中的opcode有:
Ethereum EVM简介
Contract execution starts at the beginning of the bytecode.
Each opcode is encoded as one byte, except for the PUSH opcodes, which take a immediate value.
All opcodes pop their operands from the top of the stack and push their result.

交易的payload可为0或一定字节数的data,用于定义与合约交互的类型即其它额外信息:

  • 1)合约创建交易:
    交易的data payload为所创建合约自身的bytecode,会运行合约的构造函数、设置合约初始状态、并返回最终的合约bytecode。即,一旦合约部署完毕,构造函数将不展示在合约中。
  • 2)合约交互交易:
    通常合约会暴露一个public API——为支持用户与合约交互的一组方法。
    为与合约交互,用户将提交交易,交易内可包含任意wei数量(包括0),以及某格式与ABI匹配的data payload,定义了交互类型以及其他额外参数。
    合约通常由4种方式来处理data:
    • 1)Call Data:通常为:4字节的method identifier + 序列化的参数。相关指令有:CALLDATALOAD/CALLDATASIZE/CALLDATACOPY。
    • 2)Stack:EVM会维护a stack of uint256s来保存本地变量、函数调用参数以及返回地址。区分返回地址与其它变量是复杂的。相关指令有:PUSH1/DUP1/SWAP1/POP等。
    • 3)Memory:为uint8数组,用于保存合约执行过程中的临时数据。memory中的数据无法跨交易保存。相关指令有:MLOAD/MOSTROE/MSTORE8。
    • 4)Storage:为持久关联map,以uint256为key,uint256为value。所有的合约元素以及mappings都存储在storage中。Storage中的元素可通过web3.eth.getStorageAt(address, key)接口来访问获得。相关指令有:SLOAD/SSTORE。

2.1 以太坊虚拟机EVM(Ethereum Virtual Machine)

go-ethereum提供了evm命令行工具对汇编代码进行编译和反汇编,以及执行调试汇编代码:
Ethereum EVM简介
可使用evm工具直接执行调试汇编代码:
Ethereum EVM简介

Ethereum EVM简介

对于message call交易,以太坊虚拟机输入有:

  • 相应合约账号的code
  • 相应合约账号的storage
  • message call交易中的input data

相应的EVM输出会更新到合约账号的stoarge中。
Ethereum EVM简介
EVM为以太坊合约的运行时环境:
Ethereum EVM简介
EVM采用简单的栈架构,其中:

  • EVM code为Virtual ROM:不变的
  • machine state中包含:PC(Program counter)、Gas(Gas available)、Stack、Memory。这些均是可变的。
  • 合约账号Storage为World state:是持久保存的。

Ethereum EVM简介
EVM code可由各种高级语言经相应的编译器编译而来,如:

  • Solidity合约源码:对应Solidity编译器
  • Viper合约源码:对应Viper编译器
  • LLL合约源码:对应LLL编译器
    Ethereum EVM简介

EVM code有2种表示方式:

  • 汇编表示
  • bytecode表示:EVM本地执行的EVM code为bytecode表示。

Ethereum EVM简介
EVM的执行模式为:
Ethereum EVM简介

EVM的machine space中没有寄存器,主要有以下3种资源:

  • Stack:为stack memory,最多可容纳 256 bits x 1024个元素。
  • Memory:为volatile memory,为byte addressing linear memory。
  • (Account)storage:为persistent memory,为256 bits -> 256 bits key-value store。

Ethereum EVM简介

2.1.1 EVM的stack

stack中最多可存储1024个元素,每个元素为256bits。
所有操作都是基于stack进行的,访问stack的指令有:

  • PUSH
  • POP
  • COPY
  • SWAP等等

Ethereum EVM简介

2.1.2 EVM中的memory

memory为线性的,可按字节寻址。访问memory的指令有:

  • MSTORE:256-bit store
  • MSTORE8:8-bit store
  • MLOAD:256-bit load

memory中所有的位置都是以0为初始值,定义明确的。
Ethereum EVM简介

2.1.3 EVM中的(account)storage

storage为key-value store,将256-bit words映射到256-bit words。
访问storage的指令有:

  • SSTORE:256-bit store
  • SLOAD:256-bit load

storage中所有的位置都是以0为初始值,定义明确的。

2.2 Message call

EVM可向其它账号发送消息,message call的深度限制为不超过1024层。
Ethereum EVM简介
message call由CALL指令触发,参数和返回值均通过memory来传输:
Ethereum EVM简介

2.3 异常情况

EVM执行EVM code时存在多种异常情况,如:

  • 1)无效的jump目标
  • 2)out-of-gas
  • 3)无效的指令
  • 4)stack underflow等

Ethereum EVM简介

2.4 Gas and fee

以太坊中所有的程序计算都需要付费(以gas来表示):
Ethereum EVM简介
如EVM中的操作需要消耗gas、message call需要更多的gas、操作storage需要更多的gas。
Ethereum EVM简介

2.5 EVM的输入和输出

外部数据通过message call输入到EVM中,EVM可输出log,同时也可返回值给Caller EVM。
Ethereum EVM简介
input data的指令有:

  • CALLDATALOAD:指向Stack
  • CALLDATACOPY:指向Memory

Ethereum EVM简介

2.6 字节顺序

EVM中的字节采用big endian顺序(network byte order)。
memory、input data、以及BYTE指令等都采用big endian顺序,而SIGNEXTEND指令则有所不同。

2.6.1 memory的字节顺序

Ethereum EVM简介
MSTORE8指令是指将LSB字节存入到相应的位置:
Ethereum EVM简介

2.6.2 input data的字节顺序

Ethereum EVM简介

2.6.3 BYTE和SIGNEXTEND指令的字节顺序

Ethereum EVM简介

2.6.4 PUSH指令的字节顺序

PUSH系列指令:PUSH1/PUSH4/PUSH32均采用right-aligned,big endian顺序。
Ethereum EVM简介

2.7 EVM指令集

EVM指令集通常是256-bit operation。

合约创建和destruct的指令有:

  • CREATE
  • DELEGTECALL
  • CREATE2

Hash指令有:

  • SHA3

Shift指令有:

  • MUL:如MUL m (2^n) == m << n,左移表示乘法指令
  • DIV:表示logical right shift
  • SDIV:表示arithmetic right shift
    Ethereum EVM简介
    其中DIV/SDIV等除法指令,无zero divisional exception。

在EVM内部,存在多个copy指令:

  • CALLDATALOAD:将Input data复制到Stack
  • CALLDATACOPY:将Input data复制到Memory
  • CODECOPY:将EVM code复制到Memory
  • EXTCODECOPY:将另一合约的EVM code复制到本合约运行时的Memory中

Ethereum EVM简介

2.8 Solidity ABI(Application Binary Interface)

Ethereum EVM简介

参考资料

[1] Ethereum EVM illustrated,可参看github https://github.com/takenobu-hs/ethereum-evm-illustrated
[2] Ethereum Virtual Machine Opcodes
[3] Learning Ethereum Virtual Machine Opcodes With EVM Puzzles文章来源地址https://www.toymoban.com/news/detail-405601.html

到了这里,关于Ethereum EVM简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习基本概念简介

    一、机器学习是在干什么? 以中学时代所学的函数为例,做应用题时我们都会建立相应的正比例函数、二次函数等来解决,给定一个自变量x都能得到唯一的因变量y。现在我想找到一个函数ƒ,它的输入并不是数字,而是一段语音,最后相应的文字,亦或输入的是一副图片,

    2024年04月15日
    浏览(40)
  • 深度学习基本概念简介

    一、Linear Models\\\' Bias 上篇学习机器学习一文中,所构造的 $y = b + wx_0$ 函数是一个linear model亦即线性模型,但是linear models有缺陷的——它过于简单了。实际应用中,我们所面临的不会只是一个简单的linear model,因此我们需要更复杂的models。 比如上图中的红色曲线,如何找到它

    2024年04月16日
    浏览(46)
  • Docker(一)简介和基本概念

    作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! 本章将带领你进入 Docker 的世界。 什么是 Docker ? 用它会带来什么样的好处? 好吧,让我们带着问题开始这神奇之旅。 Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一

    2024年01月19日
    浏览(41)
  • Flink的简介以及基本概念

    有界流和无界流 有状态的流处理 2.1集群角色 2.2 部署模式 会话模式(Session Mode) 单作业模式(Per-Job Mode) 应用模式(Application Mode) 3.1  系统架构 1 )作业管理器(JobManager) JobManager是一个Flink集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用

    2024年04月09日
    浏览(60)
  • 了解以太坊虚拟机(EVM)

    以太坊虚拟机(Ethereum Virtual Machine,简称EVM) 是以太坊网络的核心组件之一,它承担着 智能合约执行 的重要任务 智能合约执行环境 :EVM提供了一个安全的环境,用于 执行智能合约 。这些合约以 Solidity 等高级编程语言编写,并在以太坊区块链上部署和执行 不可篡改性 :

    2024年04月26日
    浏览(30)
  • 区块链基本概念与当前生态简介

    区块链是一种去中心化的分布式账本技术,它通过将数据按照时间顺序链接成区块,并使用密码学算法确保数据的安全性和完整性。每个区块包含一定数量的交易记录,而且每个区块都包含了前一个区块的哈希值,这样形成了一个不可篡改的链式结构。 区块链的基本概念包括

    2024年02月12日
    浏览(37)
  • 了解IP地址的基本概念和修改步骤

    在数字化时代,IP地址作为网络设备的唯一标识,其重要性不言而喻。无论是为了提升网络性能,还是出于隐私保护的需求,修改IP地址都是网络使用者可能遇到的操作。虎观代理将详细介绍如何修改IP地址,并探讨在修改过程中需要注意的事项。 一、了解IP地址的基本概念

    2024年04月16日
    浏览(37)
  • 引言:ElasticSearch简介和目标

    ElasticSearch是一个开源的搜索和分析引擎,基于Lucene库构建,具有高性能、可扩展性和实时性等优势。它广泛应用于企业级搜索、日志分析、监控等场景。本文将深入探讨ElasticSearch的背景、核心概念、算法原理、最佳实践、应用场景、工具推荐等方面,为读者提供一个全面的

    2024年02月20日
    浏览(36)
  • kafka--技术文档-基本概念-《快速了解kafka》

    学习一种新的消息中间键,卡夫卡!!! 官网网址 Apache Kafka         Kafka是一种开源的分布式流处理平台,由Apache软件基金会开发,用Scala和Java编写。它是一个高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据。这种动作可以是网页浏览、

    2024年02月11日
    浏览(50)
  • kubernetes--技术文档--基本概念--《10分钟快速了解》

    Kubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统。 它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。Kubernetes 源自Google 15 年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。 Kubernetes 是开源系统,可以自由地部署在企

    2024年02月12日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包