# 科普以太坊的“心脏”---EVM以太坊虚拟机


By [Calman牛渣粉](https://paragraph.com/@0x079) · 2021-10-27

---

个人的一句话非专业理解：EVM其实就是开发者合约和旷工记账之间最重要的虚拟智能计算机，所谓虚拟，就是镜像版的以太坊上合约计算机

本文转载自知乎博主@币迷，原文链接如下，感谢分享

[https://zhuanlan.zhihu.com/p/102503164](https://zhuanlan.zhihu.com/p/102503164)

近一段大多文章是关于以太坊的，以太坊的智能合约，以太坊的基于”账户”的交易机制，以太坊上的DeFi生态等，今天本想更换目标对象，突然发现，关于以太坊还有一个非常重要的问题没写，那就是**以太坊虚拟机。**

说起VM,相信很多人对它并不陌生,最早的虚拟机软件是由ibm设计实现的。**它的基本功能是可以对操作系进行一个或多个镜像，镜像出的操作系统和现有本机操作系统共享同样的软硬件资源，权限等，你所有操作都可以在这个全新的独立的虚拟系统里面进行**，这对于想要在一台电脑上进行多操作系统操作的用户特别方便，只用在一台电脑上进行切换即可。

什么是EVM?E即Etherne的缩写\*\*,EVM望文生意，即以太坊的虚拟机。\*\*

话说，\*\*以太坊为什么引入虚拟机?\*\*因为我们知道在比特币区块链里是没有虚拟机的。

**这要从以太坊和比特币的区别说起。**

比特币的功能是用来分布式储存数据的:世界范围内的多个计算机上记录、验证、存储及复制交易数据。

而以太坊的愿景是：想要实现它势不可挡，抗审查、自我维持、去中心化的“世界”计算机，既然是计算机，就需要有计算、储存数据、以及沟通交流的功能，所以，**以太坊用不仅需要分布式储存数据，而且需要运行代码进行各种图灵完备的计算，即智能合约。**

智能合约是以太坊相较于比特币最大改进，也是区块链世界里最具有划时代意义的进步。

**基于区块链的分布式式网络的共识机制，智能合约的确定性，即不同节点执行相同合约，必须产生相同的结果，是智能合约正常有效的前提。**

为保持智能合约运行结果的高度确定性，智能合约的运行环境就显得至关重要，为此，以太坊构建了一个以太坊虚拟机，让以太坊节点参与者下载以太坊客户端，**在他们自己的机器上通过”以太坊虚拟机“的操作系统来进行运行**，**这样更好的屏蔽每个计算机节点的底层差异，更好的实现不同节点执行合约的相同结果即确定性。**

也就是说构建以太坊虚拟机的主要目的是为了给智能合约提供稳定可靠的运行环境，也由此可知，**只要支持智能合约功能，虚拟机在当前的技术路线下就不可缺少。**

下面让我们通过一个结构图，进一步理解下虚拟机在以太坊中的重要性。

[https://pic2.zhimg.com/80/v2-2b0fd9427534c111395b8436f7820f81\_1440w.jpg](https://pic2.zhimg.com/80/v2-2b0fd9427534c111395b8436f7820f81_1440w.jpg)

从这个层级图可以看出，**EVM是智能合约运行的基础环境。**

通过运行以太坊虚拟机，你的计算机就变成了网络中的一个“节点”，并与其它节点一样具有同等地位的处理事务。

**当前EVM并不完美**，存在诸如不支持浮点数及缺少标准库、合约代码不支持优化升级，只支持重新部署等问题，**但因以太坊长期形成的生态环境是新生公链在考虑未来开发及运营时的是一个重因素，所以，很多区块链系统仍然是采用在EVM基础上改进来设计实现**。这样不仅可以复用原有以太坊功能，降低开发工作量；还可以利用现有的以太坊生态，进行快速的开发迭代。

不进则退，以太坊虚拟机也在谋求不断地改进，其中一个重要的改进是当前以\*\*太坊1.0中以太坊虚拟机（Ethereum Virtual Machine, EVM）仅支持一种特定的执行环境，但在以太坊 2.0 的第二阶段中，可以实现支持多个执行环境。\*\*假如你发型了一个牛牛币，你可以定义一个牛牛币执行环境，以便在以太坊 2.0 上运行牛牛币或者，您可以定义一个比特币执行环境，这样就可以在以太坊 2.0 上运行比特币，不同的执行环境可以自由切换，就像互联网世界，你在虚拟机里装了多个操作系统一样切换自如。

总之，**以太坊虚拟机是以太坊区块链中关键组成部分，或者说是一个通用的执行环境，没有它，以太坊的智能合约的确定性将无法保障，心**脏对人体，至关重要，以太坊虚拟机对以太坊的重要性，从某种程度上来看，可以说是以太坊的心脏，其重要性自然是不言而喻的。

---

*Originally published on [Calman牛渣粉](https://paragraph.com/@0x079/evm)*
