本文详细介绍了以太坊虚拟机(EVM)的工作原理及其在以太坊区块链中的重要性,解释了其架构、设计及如何管理智能合约的执行。此外,还提到了EVM的状态转换功能和关键优势,包括Turing完备性和去中心化的应用能力。
以太坊虚拟机 (EVM) 是以太坊的核心部分,帮助推动区块链和智能合约。它对于协助以太坊实现用户采用和去中心化至关重要。在本指南中,我们将详细了解 EVM,学习 EVM 是什么以及它是如何运作的。然后,我们将覆盖一些关键点以巩固我们的理解。
想要视频讲解吗?跟随 Sahil,了解如何在 5 分钟内认识以太坊虚拟机 (EVM)。
什么是 EVM(以太坊虚拟机)? - YouTube
QuickNode
131K 订阅者
QuickNode
搜索
信息
购物
点击以取消静音
如果播放未能及时开始,请尝试重启设备。
你已登出
你观看的视频可能会添加到电视的观看历史中,并影响电视推荐。为避免此情况,请取消并在计算机上登录 YouTube。
取消确认
分享
包含播放列表
检索共享信息时发生错误。请稍后再试。
稍后观看
分享
复制链接
在观看
0:00
/ •实时
•
订阅我们的 YouTube 频道以获取更多视频! 订阅
以太坊虚拟机 (EVM) 是以太坊的计算引擎,它管理区块链的状态并使智能合约功能得以实现。EVM 包含在客户端软件中(如 Geth, Nethermind 等),你需要这些软件才能在以太坊上运行一个 节点。以太坊上的节点保留交易数据的副本,EVM 处理这些数据以更新分布式账本。一般来说,以太坊上的节点原生支持 EVM,因为客户端软件实现了这一功能。
接下来,我们来覆盖 EVM 执行的一些任务。
EVM 参与区块创建和交易执行。在区块创建中,EVM 设置了从区块到区块管理状态的标准。这些状态存储在一个 Merkle Patricia Trie 中,并保存以太坊的真实状态。
在交易执行中,EVM 通过解释 Opcodes(低级机器指令)中的指令来执行任务(例如,调用智能合约的函数);但是,数据是以字节码格式进行整理的。为了将数据转换为字节码,可以使用编程语言,如 Solidity(即智能合约的本地编程语言)来编译和部署智能合约。
请注意,当 EVM 执行任务时,它受到交易提供的 Gas 限制和 EVM 的整体限制。Gas 是以太坊上计算能力的度量单位。
要了解更多关于交易的信息,请查看我们的指南 以太坊交易是什么?
接下来,让我们看一下 EVM 的架构。
EVM 基于 基于栈的 内存结构运作,包含内存组件,如 Memory、Storage 和 Stack(用于读写与区块链的交互以及管理状态)。
EVM 被认为是 准图灵完全,这意味着它可以在给定指令和输入的情况下解决问题,但其计算能力受到交易提供的 Gas 限制。
现在,让我们讨论当交易的字节码被执行或新块被创建时 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,可以查看以下资源:
或者如果你对创建自己的智能合约感兴趣,可以查看我们的指南 智能合约在以太坊上是如何工作的概述。
恭喜!你现在对 EVM 有了更多的了解。有什么想法或问题,或想展示你学到的东西吗?在 Discord 上告诉我们或通过 Twitter 联系我们。
我们 ❤️ 反馈!
如果你对本指南有任何反馈或问题,请告诉我们。我们非常乐意听取你的意见!
- 原文链接: quicknode.com/guides/eth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!