Web3中文|什么是以太坊虚拟机(EVM),它是如何工作的?

news2024/9/29 1:30:20

来源 | cointelegraph

编译 | Dali@iNFTnews.com

以太坊已成为仅次于比特币的第二重要区块链。以太坊能发展得这么好,它的原生Solidity编程语言和以太坊虚拟机(EVM)发挥了重要的作用。

以太坊区块链凭借自身拥有的灵活性、大量可用的开发工具和庞大的用户基础,继续吸引着去中心化应用(DApp)开发人员的加入。

作为区块链架构的核心,EVM是执行以太坊应用代码或智能合约的程序,并为它们提供在以太坊网络上运行的环境。

此外,EVM是图灵完备的( 一切可计算的问题都能计算,这样的虚拟机或者编程语言就叫图灵完备的),因此理论上,它可以运行所有以编程语言编写的程序,从而让开发人员可以轻松地创建自定义智能合约和DApp。

除了这些,EVM还可以访问网络中的所有节点,处理智能合约的执行,并有效地管理以太坊区块链上的所有交易,这也使其成为当今世界上最强大的虚拟机之一。

什么是以太坊虚拟机(EVM),它是如何工作的?

以太坊网络的概念是程序员Vitalik Buterin在2013年提出的。

作为DApp开发者的首选区块链,以太坊的成功有赖于Gavin Wood在以太坊任职期间设计的以太坊虚拟机(EVM)。

EVM用C++编写并使用 LLVM项目编译器(LLVM是架构编译器的框架系统,用于优化任意程序语言编写的程序的编译时间、链接时间、运行时间以及空闲时间),它是一种可以连续运行的特殊的状态机,决定着以太坊区块链中每个区块的状态。

EVM不仅管理着节点对分布式账本的操作范围,还定义了在不同区块之间改变状态的具体规则。后一种功能是以太坊智能合约成功运行的基础。

要了解以太坊虚拟机的作用,需要知道它在确保以太坊网络平稳运行方面都做了些什么。

对于接收到的每一个输入信息,EVM都会产生一个本质上具有确定性的输出信息。

EVM的运行方式类似于将瞬态值推入和推出下推栈的堆栈机器,其深度为1024个项,而每个项都是256位字。

此外,它还以字节数组的形式维护临时内存。已编译的智能合约代码由EVM以140个标准操作码集合的形式执行,其他区块链特有的堆栈操作也由它实现。

因此,EVM在处理交易过程中具有本质上不稳定的机器状态,同时它又具备全局或世界状态以容纳以太坊区块链上的不同账户信息。

以太坊上的所有操作均由EVM代码管理,自2015年以太坊网络推出以来,EVM代码本身经历了多次迭代,这也使得目前存在多种EVM实现工具。

EVM负责维护数千个以太坊节点和执行代码之间的抽象层级,以及在不向客户端或节点泄露过多细节的情况下起到传送一致信息的作用。

以太坊虚拟机(EVM)的用途是什么?

EVM一直在为以太坊上的所有应用提供可靠的动力。

对于开发人员来说,EVM是运行较小的可执行程序(在以太坊中称为智能合约)的首要程序,同时为他们提供了用各种编程语言(如Solidity、Vyper、Python和Yul等)编写这些智能合约的自由。

由于EVM提供的这种灵活性,以太坊区块链在DeFi和NFT领域催生了数千个DApp。

每一个DApp和组成它们的智能合约都被转换为字节码,这些字节码被传送至EVM并分布在以太坊网络的所有节点中。

当部署智能合约时,EVM负责与所有节点联系,并在达成共识后进行状态更改。

可以说,正是因为EVM,以太坊得以使用字节码而非基本编程语言来执行智能合约,从而物理主机与以太坊运行的机器代码可以被区分开来。

以太坊虚拟机(EVM)的好处

EVM的运作方式为开发人员执行代码扫清了一些顾虑——不会影响网络的其他部分或影响托管在任意节点的数据或个人文件。

此外,开发人员可以在具有分布式共识的不同计算环境中运行复杂的智能合约。

这确保单个节点的故障不会对DApp或智能合约的整体运行产生任何负面影响,因为所有节点上的EVM代码都是相同的。

不仅如此,因为账户数据在EVM中维持着一种全局状态,这为开发人员创造了良好的条件以编写自定义智能合约代码和创建可以访问全局数据集并产生可靠输出的独特DApp。

总体上来说,以太坊区块链非常适合于DApp和智能合约的可持续扩展。

除了上述提到的,EVM还有可供开发人员选择的标准代码库、越来越多与之兼容的第2层区块链和大量潜在的EVM用例,这就是为什么EVM是Web3开发的首选平台。

以太坊虚拟机(EVM)的缺点

但EVM并非十全十美,打算在以太坊上发展项目的开发人员和企业家也需要了解一下EVM的不足之处,比如高额交易费或者说Gas成本。

这些费用需要用户通过ETH进行支付并且会根据智能合约的复杂性和当时网络拥塞情况变化,这要求开发者和企业家必须对服务进行相应定价。

此外,Solidity是EVM上最受欢迎的编码语言,这意味着开发人员需要有足够的经验和一定的技术专长,才能利用Solidity创建高效的智能合约。

这一点很重要,因为任何额外的计算需求都将导致更高的Gsa成本,而这不利于项目的成功。

如果开发人员选择使用其他语言进行编码,那么他们需要认真解决代码中的任何固有重复问题。

EVM的未来

EVM给区块链生态系统带来了革命性的变化,但许多区块链项目也正在改进这种用于读取和执行代码的技术。

跨链互操作性对于开发人员来说是最重要的,许多与EVM兼容的区块链已经发展起来了,其中大多数都提供了比以太坊更低的费用和更快的交易速度。

以太坊用户可以直接与这些区块链进行无缝交互,并通过跨链桥将以太坊上的资金转移到这些区块链。

还有必须提到的是,随着在2022年9月完成合并,以太坊的下一个目标是完成从EVM到以太坊WebAssembly (eWASM)的范式转变。

以太坊旨在将eWASM打造成一个高度模块化并独立于平台的虚拟指令集体系架构。

很多人将eWASM吹捧为以太坊的下一个游戏规则改变者,并认为它可能为其他区块链所使用。

然而,eWASM到底能否取代EVM成为最受信任的智能合约机制呢?这个问题,或许只有时间能回答。

声明:web3中文编译作品,内容仅代表作者立场,且不构成投资建议,请谨慎对待,如文章/素材有侵权,请联系官方客服处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL高级SQL语句

一.准备 mysql -uroot -p123123create database train_ticket; #创建库use train_ticket; create table REGION(region varchar(10),site varchar(20)); create table FARE(site varchar(20),money int(10),date varchar(15)); #创建表desc REGION; desc FARE; #查看表结构ins…

[附源码]计算机毕业设计云南美食管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

浅析linux内核网络协议栈--linux bridge(二)

6. 网桥数据转发 6.1 网桥数据包入口 网桥是一种2层网络互连设备,而不是一种网络协议。它在协议结构上并没有占有一席之地,因此不能通过向协议栈注册协议的方式来申请网桥数据包的处理。相 反,网桥接口(如上述的eth1&#xff09…

mysql—MHA原理与实现

官方介绍:https://code.google.com/p/mysql-master-ha/ MySQL复制集群中的master故障时,MHA按如下步骤进行故障转移: 从上图可总结MHA工作步骤为: -从宕机崩溃的master保存二进制日志事件(binlogevents)。 -识别含有最新更新的s…

macOS Electron 环境安装时的错误 Cannot find module ‘macos-alias‘ 解决

macOS Electron 环境安装时的错误 Cannot find module ‘macos-alias’ 解决 一、问题描述 在想 make 并发布软件版本的时候,现出这个错误: ❯ Making distributables✖ Making a dmg distributable for darwin/arm64› Cannot find module macos-ali…

SSM处理过程

SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层 使用spring MVC负责请求的转发和视图管理 spring实现业务对象管理&#xf…

DSP篇--C6678功能调试系列之TIMER、UART调试

目录 1、TIMER计时器调试 2、UART串口调试 2.1 核传输 2.2 EDMA传输 1、TIMER计时器调试 The TMS320C6678 device has sixteen 64-bit timers in total. Timer0 through Timer7 are dedicated to each of the eight CorePacs as a watchdog timer and can also be used as g…

黄东旭:开发者的“技术无感化”时代,从 Serverless HTAP 数据库开始 | PingCAP DevCon 2022

12 月 1 日,以"去发现,去挑战"为主题的 PingCAP DevCon 2022 主论坛在线上成功举办,为数万观众带来一场技术盛宴。PingCAP 联合创始人兼 CTO 黄东旭,在大会上分享了“The Future of Database”的主题演讲,分…

Unity记录几个5.x升级到2018问题

XLua的 ILType Emit等C#框架问题 本来是Unity5.x,貌似是最旧的代码 。Net 2.0 无奈升级用了Unity2018之后,只支持4.x, 在PlayerSetting面板,改成.Net3.5,居然阔以了 (Unity2018.7 - 支持的最低,.Net 3.x…

使用 Learner Lab - 学生

使用 Learner Lab - 学生 AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务,让学生可以在 100 USD的金额下,自行练习所要使用的 AWS 服务,AWS Academy 学习平台建立 Learner Lab - 教师 这篇文章介绍老师如…

【JVM】 类加载器 ClassLoader

一、JVM 类加载器 JVM 具有 4 种类加载器: 引导类加载器 : 负责加载支持 JVM 运行的位于 JRE 的 lib 目录下的核心类库,比如 rt.jar 、charsets.jar 等等扩展类加载器:负责加载支撑 JVM 运行的位于 JRE 的 lib 目录下的 ext 扩展…

java计算机毕业设计ssm宁夏源沣医药线上销售平台thd3v(附源码、数据库)

java计算机毕业设计ssm宁夏源沣医药线上销售平台thd3v(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&a…

戳进来,带你走近飞凌嵌入式旗舰级AIoT芯RK3588开发板

飞凌嵌入式OK3588-C开发板现已正式发售!真8K、强大算力、出色的多媒体性能、丰富的用户资料......多重优势为您带来更优质的体验! OK3588-C开发板基于Rockchip旗舰级AIoT处理器RK3588设计开发,先进的8nm制程工艺、Big.Little大小核架构以及L3…

[附源码]计算机毕业设计springboot学分制环境下本科生学业预警帮扶系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

基于PHP+MySQL班级信息发布和管理系统的设计与实现

一直以来我国领导人提倡以人为本的治国方案,而大学是未来人才的培养基地,如何能够更好的对学生信息进行管理,是很多高校一直在研究的一个问题,只有更加科学的对学生信息进行管理,才能够更加积极的培养国家的栋梁之才。…

VIAVI唯亚威SmartPocket V2 OLS-35V2/-36V2 光学光功率计

OLS-3xV2 是一系列小巧、坚固耐用的光学光源 (OLS),用于快速、轻松、方便地进行现场插入损耗测量和连续性检查。SmartPocket V2 OLS 是与 OLP-3xV2 光功率计相辅相成的理想工具,可在单模 (SM) 和多模 (MM) 光纤网络中实现插入损耗和连续性测试。坚固小巧…

[附源码]计算机毕业设计springboot兴达五金日杂批发商店管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Linux 磁盘空间异常爆满,该怎么查?

在服务器运维过程中,我们时常会遇到这样的情况,收到服务器磁盘空间告警: 登录服务器,通过df -Hl查看 和告警信息一致,接着我们就是要找到导致磁盘空间满的目录或文件。 如何找到占用空间大的目录或文件? …

【Python基础系列】Part1. 基本数据类型与变量

一、变量与简单数据类型 1.Hello World hello_world.py中输入: print("Hello World")运行,然后会看到一下输出: Hello World具体流程:运行hello_world.py时,末尾的.py表明这是一个python程序&#xff0c…