了解以太坊虚拟机(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的特点和状态与数据模型为开发者提供了丰富的功能和灵活性,使得以太坊成为了一个强大而多样化的智能合约平台

相关推荐

  1. 使用Golang开发(一)

    2024-04-05 16:16:04       41 阅读
  2. 源码阅读01

    2024-04-05 16:16:04       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 16:16:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 16:16:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 16:16:04       82 阅读
  4. Python语言-面向对象

    2024-04-05 16:16:04       91 阅读

热门阅读

  1. Python程序设计 垃圾回收机制&鸭子类型

    2024-04-05 16:16:04       31 阅读
  2. vue3 模板编译过程

    2024-04-05 16:16:04       37 阅读
  3. 深度学习中的算子

    2024-04-05 16:16:04       27 阅读
  4. Linux服务器上安装多个版本cuda的一些准备

    2024-04-05 16:16:04       32 阅读
  5. 理想大模型实习面试题6道(答案解析)

    2024-04-05 16:16:04       36 阅读
  6. 设计模式:生活中的组合模式

    2024-04-05 16:16:04       36 阅读
  7. Android studio gradle 8.0引用libs目录下的aar库

    2024-04-05 16:16:04       30 阅读
  8. Istio-learning-note-About-Gateway API(一)

    2024-04-05 16:16:04       37 阅读
  9. 线程和进程的区别?

    2024-04-05 16:16:04       38 阅读