区块链笔记:EVM的作用,EVM与字节码,EVM与共识验证,EVM的执行结构

2024-05-01 06:38

本文主要是介绍区块链笔记:EVM的作用,EVM与字节码,EVM与共识验证,EVM的执行结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

EVM的作用

  • EVM: Ethereum Virtual Machine 以太坊虚拟机
  • 在以太坊上如果我们要转账, 部署智能合约, 调用智能合约都是EVM来执行
  • EVM是在以太坊上的作用
    • 是以太坊节点的功能引擎
    • 执行以太坊交易事务
    • 部署、执行智能合约
    • 每一个节点都有独立的EVM
      • 每个节点都有一个自己的EVM
      • 每一个节点都会一致的执行同样的事务
      • 把智能程序部署这个动作广播到其他的节点
      • 其他节点接收到这个事务以后会调用EVM来同样的部署和广播
      • 也就是说每个EVM,大家都会做一样的事务
      • 这样才能保持一致性
    • 本质上是通过动作的执行更改账本的状态
    • 每个EVM都会一致的执行同样的事务

EVM与字节码

  • 所有的智能合约的部署调用,包括以太币的转账等等,都是通过EVM来执行的
  • EVM具体执行的是一个什么东西呢?EVM执行的是智能合约编译后的字节码
    • 作为虚拟机,它得能执行自己可以识别的格式的数据,这个格式是EVM的字节码
    • 字节码是EVM特定格式的,EVM只有对自己能够识别的数据才能进行执行
  • 可以通过各种语言来编写智能合约
    • 我们要先编写一下智能合约,可以通过各种支持的语言
    • 以太坊默认的是一个叫Solidity, 语法格式类似javascript
    • 目前在以太坊上可以用来编写智能合约的语言,并不只是Solidity一种的
    • 不管用什么语言编写的,最终会编译成EVM能够识别的字节码格式
  • EVM只识别字节码格式
    • 因为EVM执行的是智能合约编译后的字节码
    • 而不是我们的源程序
  • 字节码包含用户的状态数据
    • 比如我们的商品系统,众筹系统,这个系统里面都会包含一些数据
    • 对于程序来讲,总得留下一些数据才有意义
    • 这个数据我们称之为状态数据,也就是所谓的属性,状态
  • 字节码包含EVM能执行的指令,除了包含数据,还有EVM能够执行的指令
    • 这些指令比如,哈希计算,椭圆线的计算,取得一个区块高度等等各种计算
    • 包括虚拟机执行的一些动作,进栈,出栈等动作
  • EVM与JVM类似都是栈式虚拟机

EVM与共识验证

  • EVM的作用就是用来执行以太坊网络中各种各样的智能合约,各种各样的事务
  • 这些事务如果只是在一个节点上执行是没有意义的
  • 对于p2p网络来讲,尤其是区块链讲究账本统一的网络系统来说,必须通过一个共识来使每个节点的账本达到一个一致性
  • 也就是说共识是在于保持每个节点的账本统一
  • EVM是执行事务更新账本的状态,也就是说,通过共识机制使得每个节点上都能调用EVM, 执行同样的动作,更新出同样状态的账本,来保持一致
  • 谁来决定某一时刻到底是做哪些更新呢?那就是矿工,当它获得打包权以后,决定了某一时刻全网需要更新的事务
  • 包括共识验证,使得每一个节点都能来进行相应的执行
  • EVM是做具体的执行的事情,而矿工决定某一时刻执行哪些事务

EVM的执行结构

  • EVM是虚拟机,虚拟机一般分两种结构,继承器式的虚拟机,一个是栈结构虚拟机
  • EVM和Java中的JVM类似, 是栈结构虚拟机
  • EVM在具体执行的时候会先加载字节码,字节码中包含数据,包含指令
  • 程序计数器就像指针一样,一步步的告诉执行栈当前要执行的指令
  • Gas是决定每次对字节码的执行需要消耗的成本, 它是防止死循环式的执行
  • 一旦调用者的Gas(以太币)消耗完毕之后,就停止调用
  • 在执行过程中涉及到的变量等数据会加载在内存中作为一个缓存
  • 整个执行过程执行完了之后形成了一个世界状态(状态存储)
  • 对于以太坊的账本来讲,虚拟机在执行过程当中所产生的各种临时的状态,叫虚拟机状态
  • 只有它执行完成以后,最后的状态才是账本的状态,这个称之为状态存储

这篇关于区块链笔记:EVM的作用,EVM与字节码,EVM与共识验证,EVM的执行结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950956

相关文章

SpringBoot 中 CommandLineRunner的作用示例详解

《SpringBoot中CommandLineRunner的作用示例详解》SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的... 目录1、CommandLineRunnerSpringBoot中CommandLineRunner的作用

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

$在R语言中的作用示例小结

《$在R语言中的作用示例小结》在R语言中,$是一个非常重要的操作符,主要用于访问对象的成员或组件,它的用途非常广泛,不仅限于数据框(dataframe),还可以用于列表(list)、环境(enviro... 目录1. 访问数据框(data frame)中的列2. 访问列表(list)中的元素3. 访问jav

Java实现按字节长度截取字符串

《Java实现按字节长度截取字符串》在Java中,由于字符串可能包含多字节字符,直接按字节长度截取可能会导致乱码或截取不准确的问题,下面我们就来看看几种按字节长度截取字符串的方法吧... 目录方法一:使用String的getBytes方法方法二:指定字符编码处理方法三:更精确的字符编码处理使用示例注意事项方

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析