以太坊虚拟机(EVM)作为分布式账本技术的开创性创新,成功将区块链从单纯的交易账本(如比特币)转化为能够执行任意逻辑的准图灵完备状态机。然而,EVM 诞生之初所确立的串行执行架构——虽然在早期为共识的一致性和安全性提供了坚实保障——如今已成为制约去中心化应用(dApps)规模化扩展的核心瓶颈。随着链上交互需求的指数级增长,行业扩展方案已从早期的单纯垂直扩容(单节点性能提升)和水平分片(Sharding/Rollups),转向了对执行层本身的根本性重构:并行执行(Parallel Execution)。
以太坊的愿景是构建一台全球共享的“世界计算机”。在 Gavin Wood 撰写的以太坊《黄皮书》中,EVM 被定义为一个基于栈的虚拟机,其核心功能是根据交易 $T$ 改变系统状态 $\boldsymbol{\sigma}$。形式化地,状态转换函数可以表示为:
$$ \boldsymbol{\sigma}_{t+1} \equiv \Upsilon(\boldsymbol{\sigma}_t, T) $$
在一个包含交易集合 $B = \{T_0, T_1,..., T_n\}$ 的区块中,最终状态 $\boldsymbol{\sigma}_{final}$ 是严格按照 $0$ 到 $n$ 的顺序应用 $\Upsilon$ 的结果。这种串行约束并非设计上的疏忽,而是当时技术环境下的安全铁律。在一个由数千个互不信任的节点组成的分布式系统中,非确定性(Non-determinism)是致命的。如果节点 A 和节点 B 以不同的顺序执行交易,它们计算出的状态根(State Root)将不一致,从而导致链的分叉。串行执行提供了一种最简单、最健壮的保证:只要所有节点从相同的状态 $\boldsymbol{\sigma}t$ 出发,并按相同的顺序处理相同的交易,它们必然会到达相同的 $\boldsymbol{\sigma}{t+1}$。
然而,这种设计将区块链的吞吐量直接绑定在了单核 CPU 的处理能力上。随着摩尔定律的放缓,单核性能的提升已无法满足区块链网络日益增长的计算需求。此外,EVM 的 gas 机制虽然防止了死循环,但也为每个区块的计算总量设定了硬性上限,进一步限制了网络的扩展性。
传统 EVM 的性能天花板并非仅仅由 CPU 时钟频率决定,而是由三个相互交织的架构决策共同构成的:
在传统的串行模型中,CPU 在处理 I/O 操作时处于闲置状态。当 EVM 执行诸如 SLOAD(从存储中读取数据)这样的操作码时,执行线程必须挂起,等待数据从磁盘加载到内存。考虑到磁盘 I/O(即使是 SSD)的速度比寄存器操作慢几个数量级,“世界计算机”在绝大多数时间里实际上是在“等待数据”,而非“计算数据”。这种同步的、阻塞式的 I/O 模型极大地浪费了现代 CPU 的计算周期。
以太坊使用 Merkle Patricia Trie (MPT) 来存储状态。MPT 是一种极其精妙的数据结构,它允许轻客户端仅通过一个哈希值(状态根)就能验证任何账户的状态,这对于去中心化网络的安全性至关重要。然而,从数据库性能的角度来看,MPT 是效率的噩梦。
以太坊的 Gas 模型本质上是一个单线程的计量单位。区块 Gas Limit 限制了单个区块内可以执行的操作总量,这个上限是根据网络中标准节点的单核处理能力设定的。这意味着,即使验证者拥有 64 核的高性能服务器,在处理以太坊区块时,另外 63 个核心也基本处于闲置状态。硬件资源的极度浪费是串行 EVM 架构最显著的特征之一。
在并行执行成为主流研究方向之前,主要工作主要集中在两个方向: