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

  • QuickNode
  • 发布于 2025-02-14 11:59
  • 阅读 38

本文详细介绍了以太坊虚拟机(EVM)的工作原理及其在以太坊区块链中的重要性,解释了其架构、设计及如何管理智能合约的执行。此外,还提到了EVM的状态转换功能和关键优势,包括Turing完备性和去中心化的应用能力。

概览

以太坊虚拟机 (EVM) 是以太坊的核心部分,帮助推动区块链和智能合约。它对于协助以太坊实现用户采用和去中心化至关重要。在本指南中,我们将详细了解 EVM,学习 EVM 是什么以及它是如何运作的。然后,我们将覆盖一些关键点以巩固我们的理解。

想要视频讲解吗?跟随 Sahil,了解如何在 5 分钟内认识以太坊虚拟机 (EVM)。

什么是 EVM(以太坊虚拟机)? - YouTube

QuickNode

131K 订阅者

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

QuickNode

搜索

信息

购物

点击以取消静音

如果播放未能及时开始,请尝试重启设备。

你已登出

你观看的视频可能会添加到电视的观看历史中,并影响电视推荐。为避免此情况,请取消并在计算机上登录 YouTube。

取消确认

分享

包含播放列表

检索共享信息时发生错误。请稍后再试。

稍后观看

分享

复制链接

在观看

0:00

/ •实时

在 YouTube 上观看

订阅我们的 YouTube 频道以获取更多视频! 订阅

你需要准备什么

  • 以太坊 的基本知识
  • 对数据结构和内存的基本理解

你将学到什么

  • 以太坊虚拟机 (EVM) 是什么
  • 以太坊虚拟机 (EVM) 如何运作
  • 关于以太坊虚拟机 (EVM) 的关键要点

什么是 EVM?

以太坊虚拟机 (EVM) 是以太坊的计算引擎,它管理区块链的状态并使智能合约功能得以实现。EVM 包含在客户端软件中(如 Geth, Nethermind 等),你需要这些软件才能在以太坊上运行一个 节点。以太坊上的节点保留交易数据的副本,EVM 处理这些数据以更新分布式账本。一般来说,以太坊上的节点原生支持 EVM,因为客户端软件实现了这一功能。

接下来,我们来覆盖 EVM 执行的一些任务。

EVM 参与区块创建和交易执行。在区块创建中,EVM 设置了从区块到区块管理状态的标准。这些状态存储在一个 Merkle Patricia Trie 中,并保存以太坊的真实状态。

在交易执行中,EVM 通过解释 Opcodes(低级机器指令)中的指令来执行任务(例如,调用智能合约的函数);但是,数据是以字节码格式进行整理的。为了将数据转换为字节码,可以使用编程语言,如 Solidity(即智能合约的本地编程语言)来编译和部署智能合约。

请注意,当 EVM 执行任务时,它受到交易提供的 Gas 限制和 EVM 的整体限制。Gas 是以太坊上计算能力的度量单位。

要了解更多关于交易的信息,请查看我们的指南 以太坊交易是什么?

接下来,让我们看一下 EVM 的架构。

EVM 是如何设计的?

EVM 基于 基于栈的 内存结构运作,包含内存组件,如 MemoryStorageStack(用于读写与区块链的交互以及管理状态)。

EVM 被认为是 准图灵完全,这意味着它可以在给定指令和输入的情况下解决问题,但其计算能力受到交易提供的 Gas 限制。

现在,让我们讨论当交易的字节码被执行或新块被创建时 EVM 的内部运作情况。

EVM 如何运作?

在这一部分,我们将讨论 EVM 是如何运作的。请注意,这只是一个高层次的解释,不能涵盖 EVM 的每个操作。

如前所述,EVM 执行格式化为字节码的任务,EVM 在 Opcodes 中解释这些字节码。让我们解释一下智能合约代码(字节码)是如何分解成 Opcodes 的。

在这个例子中,我们将引用 Remix.IDE 上的简单存储合约 (1_Storage.sol)。简单存储合约的编译字节码如下所示:

608060405234801561001057600080fd5b50610150806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80632e64cec11461003b5780636057361d14610059575b600080fd5b610043610075565b60405161005091906100d9565b60405180910390f35b610073600480360381019061006e919061009d565b61007e565b005b60008054905090565b8060008190555050565b60008135905061009781610103565b92915050565b6000602082840312156100b3576100b26100fe565b5b60006100c184828501610088565b91505092915050565b6100d3816100f4565b82525050565b60006020820190506100ee60008301846100ca565b92915050565b6000819050919050565b600080fd5b61010c816100f4565b811461011757600080fd5b5056fea26469706673582212209a159a4f3847890f10bfb87871a61eba91c5dbf5ee3cf6398207e292eee22a1664736f6c63430008070033

你可以通过前往 Remix.IDE,找到示例 1_Storage.sol 合约,然后编译并单击字节码复制按钮来查看相同的字节码。

请注意,EVM 仅使用 140 个独特的操作码;但总共有 256 个操作码,每个操作码的长度为 1 字节。现在让我们看一下合约中某个函数的字节码(例如,store())。

60003560e01c80632e64cec11461003b5780636057361d1461005957

上面的每个字节都代表一个不同的 Opcode。例如,第一个字节(例如,60)指的是 PUSH1 操作码,下一个字节(例如,00)指的是被推进的数据,第三个字节(60)再次指的是 PUSH1 操作码,下一个字节指的是它的输入(例如,e0)。要查看上述函数的所有 Opcodes,你可以前往 evm.codes/playground,将字节码输入到 IDE 中并点击运行(确保在下拉菜单中选择字节码)。

现在我们对 EVM 如何执行字节码有了更多了解,让我们继续理解以太坊状态转换函数。

以太坊状态转换函数

Y(S, T) = S'

其中:

  • Y = 状态转换函数
  • S = 当前区块链状态(余额、合约、存储)
  • T = 新交易
  • S' = 交易后的结果状态

以太坊状态转换函数是 EVM 每次执行交易时处理的公式。该函数的目的是确保交易遵循交易标准并在技术上是有效的(例如,正确的 nonce 和有效的签名)。可以将其视为一个纯函数,它接受当前区块链快照和一笔交易,然后输出新的有效状态。

你现在应该对 EVM 的运作和设计有了更好的理解。接下来,让我们看看 EVM 的一些关键好处。

关键要点

  • 图灵完备:以太坊的图灵完备性使其能够运行任意逻辑,而不像比特币等其他区块链。
  • 可组合性:以太坊并不是唯一的与 EVM 兼容的区块链。许多 Layer 1 (L1) 和 Layer 2 (L2) 链是 EVM 兼容的,这使得在链之间迁移和部署合约或转移代币变得容易。一些示例包括 PolygonBNB Smart ChainAvalanche 等。
  • 去中心化:EVM 使开发者能够在以太坊上部署去中心化应用 (dApps)。

其他资源

如果你想深入了解 EVM,可以查看以下资源:

或者如果你对创建自己的智能合约感兴趣,可以查看我们的指南 智能合约在以太坊上是如何工作的概述

最后思考

恭喜!你现在对 EVM 有了更多的了解。有什么想法或问题,或想展示你学到的东西吗?在 Discord 上告诉我们或通过 Twitter 联系我们。

我们 ❤️ 反馈!

如果你对本指南有任何反馈或问题,请告诉我们。我们非常乐意听取你的意见!

  • 原文链接: quicknode.com/guides/eth...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。