当我们谈论以太坊虚拟机(EVM)时,一个常见的问题是:“EVM的服务器在哪里?” 这个问题源于我们习惯于传统互联网应用中,服务器由特定公司(如亚马逊、谷歌)拥有和管理的中心化模式,以太坊作为一个去中心化的区块链平台,其核心设计理念与传统服务器架构截然不同,要理解EVM的“服务器”在哪里,我们首先需要摒弃传统服务器的概念,拥抱去中心化的思维方式。

“服务器”概念的颠覆:从中心化到去中心化

在传统Web2.0世界里,一个应用的“服务器”通常指物理或虚拟的服务器集群,存储数据、处理逻辑,并与客户端交互,这些服务器由单一实体控制,存在单点故障、审查风险和中心化信任等问题。

以太坊及其EVM则采用了完全不同的范式,EVM是以太坊网络中执行智能合约代码的“世界计算机”,这台“计算机”并非运行在某个或某些特定的物理服务器上,而是分布式运行在全球成千上万个节点组成的网络中,这些节点由世界各地的独立个体或组织自愿运行和维护。

以太坊虚拟机(EVM)的“宿主”—— 全节点

具体是哪些设备在“运行”EVM呢?答案是以太坊全节点

  1. 什么是全节点? 全节点是完整地复制了以太坊区块链数据的客户端软件,它们存储了从创世区块至今的所有交易历史、状态信息(账户余额、合约代码等),并能够独立验证新区块和交易的有效性。

  2. 全节点如何运行EVM? 当一笔调用智能合约的交易被广播到以太坊网络时,网络中的全节点会收到这笔交易,节点会按照以下步骤处理:

    • 验证交易: 检查交易的签名、nonce、手续费等是否符合规则。
    • 执行交易: 如果交易有效,节点会将其放入待处理交易池(Mempool),当矿工(在PoW时代)或验证者(在PoS时代)选择打包这笔交易时,网络中的所有全节点都会独立地执行这笔交易中的智能合约代码。
    • 状态更新: EVM会根据智能合约的执行逻辑,读取和修改以太坊的全局状态(即账户状态),每个全节点都会独立计算并更新自己的本地状态副本。
    • 达成共识: 通过共识机制(如PoS的Casper),所有节点就哪个版本的区块链(包含哪些交易和状态变更)是有效的达成一致,从而保证网络状态的一致性。

每一个以太坊全节点都相当于运行着一个EVM实例,它们共同构成了这台“世界计算机”的处理器和内存。

节点的类型与EVM的执行

虽然全节点都能完整运行EVM,但根据节点的功能和资源投入,也可以细分为不同类型,它们在EVM执行中的角色和侧重点略有不同:

  • 归档节点(Archive Nodes): 存储了区块链的所有历史数据,包括所有已删除的状态,它们对于需要查询历史状态的复杂应用或深度分析非常重要,但运行成本高,同步时间长,它们也能完整运行EVM。
  • 同步节点(Syncing Nodes): 指正在从创世区块开始同步区块链数据或从最近的检查点同步数据的节点,在同步完成前,它们可能无法实时处理最新交易,但同步后即成为全节点。
  • 矿工/验证者节点(Miner/Validator Nodes):随机配图