了解以太坊虚拟机(EVM)

2024-04-03 12:12
文章标签 了解 虚拟机 evm 以太

本文主要是介绍了解以太坊虚拟机(EVM),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

了解以太坊虚拟机(EVM)

以太坊虚拟机(Ethereum Virtual Machine,简称EVM)是以太坊网络的核心组件之一,它承担着智能合约执行的重要任务

特点

  • 智能合约执行环境:EVM提供了一个安全的环境,用于执行智能合约。这些合约以Solidity等高级编程语言编写,并在以太坊区块链上部署和执行

  • 不可篡改性:EVM的设计目标之一是确保智能合约执行的不可篡改性。一旦部署到以太坊区块链上,智能合约的代码将永远不会改变,保证了合约的可靠性和安全性

  • 分布式执行:EVM运行在整个以太坊网络上的节点之上,通过共识算法确保所有节点对智能合约的执行结果达成一致

  • 燃料机制:为了防止恶意用户滥用资源,EVM引入了燃料机制。执行智能合约需要支付一定数量的以太币作为燃料费用,确保合约的执行成本被合理控制

状态与数据模型

  • 存储区域(Storage)存储区域是每个以太坊账户的持久性存储空间,用于永久性地存储合约的状态信息。这些状态信息包括合约的变量状态标志、以及其他重要的数据,这里指的是每个节点的状态数据库。

比如ERC20代币合约,它存储了每个用户的余额信息。在合约的存储区域中,将会存储每个用户的地址与对应的余额数据

Storgate

  • 内存区域(Memory):内存区域是EVM提供的一个临时性的存储空间,用于在合约执行期间存储临时数据。通常用于存储中间计算结果或其他临时数据。

在一个复杂的数学计算合约中,可能需要使用内存区域来存储中间计算结果,以便在执行过程中进行多步计算

  • 合约数据区域:合约数据区域是用于存储合约的代码的特殊存储空间。每个合约的代码都存储在合约数据区域中。

一个智能合约的字节码文件(由代码编译而来)存储在合约数据区域中的数据。当合约被部署到以太坊网络上时,会被存储在这个特殊的存储空间中

注意

交易和合约调用(其实也是一种交易)的信息会存储在区块链上,但是这些交易引发的状态变更(比如Alice向Bob转了1ETH)是不会记录在区块链中的,状态变更数据库是节点根据区块链中的交易构建而成的。所以我们上面说的存储区域合约数据区域是节点根据区块构建出来的。

build

为什么要构建状态数据库?

构建状态数据库之后节点可以快速的校验交易的合法性,以及验证新区块

  • 从计算机的角度看:状态数据库可能存在计算机的硬盘里,也可能存在计算机的内存中,要看节点的具体实现
  • 从EVM的角度看:先对于内存区域而言,这些数据被"物理"的存储了

memory&storage

结论

  • 以太坊虚拟机(EVM)是以太坊生态系统的核心组件之一,它为智能合约的安全执行提供了一个可靠的环境
  • EVM的特点和状态与数据模型为开发者提供了丰富的功能和灵活性,使得以太坊成为了一个强大而多样化的智能合约平台

这篇关于了解以太坊虚拟机(EVM)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

JAVA虚拟机中 -D, -X, -XX ,-server参数使用

《JAVA虚拟机中-D,-X,-XX,-server参数使用》本文主要介绍了JAVA虚拟机中-D,-X,-XX,-server参数使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录一、-D参数二、-X参数三、-XX参数总结:在Java开发过程中,对Java虚拟机(JVM)的启动参数进

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

虚拟机与物理机的文件共享方式

《虚拟机与物理机的文件共享方式》文章介绍了如何在KaliLinux虚拟机中实现物理机文件夹的直接挂载,以便在虚拟机中方便地读取和使用物理机上的文件,通过设置和配置,可以实现临时挂载和永久挂载,并提供... 目录虚拟机与物理机的文件共享1 虚拟机设置2 验证Kali下分享文件夹功能是否启用3 创建挂载目录4

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

HotSpot虚拟机的经典垃圾收集器

读《深入理解Java虚拟机》第三版笔记。 关系 Serial、ParNew、Parallel Scavenge、Parallel Old、Serial Old(MSC)、Concurrent Mark Sweep (CMS)、Garbage First(G1)收集器。 如图: 1、Serial 和 Serial Old 收集器 2、ParNew 收集器 3、Parallel Sc

理解java虚拟机内存收集

学习《深入理解Java虚拟机》时个人的理解笔记 1、为什么要去了解垃圾收集和内存回收技术? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。 2、“哲学三问”内存收集 what?when?how? 那些内存需要回收?什么时候回收?如何回收? 这是一个整体的问题,确定了什么状态的内存可以