虚拟机 (VM) 是一种虚拟化或模拟计算机系统的软件,它提供了一个隔离的执行环境,其行为类似于物理硬件。这个概念源于 IBM 在 20 世纪 60 年代对大型机系统的研究,该研究使多个用户能够在同一台物理机上运行不同的操作系统。虚拟机主要分为两类:系统虚拟机和进程虚拟机。前者提供了对真实机器的替代,而后者旨在在与平台无关的环境中执行程序。为了我们的目的,我们对系统虚拟机感兴趣,我们将它们称为“虚拟机”或简称为“VM”。
Solana 虚拟机 (SVM) 是当今区块链中最被误解的系统之一。与以太坊虚拟机 (EVM) 不同,EVM 明确地指代了一个操作码执行器,而 SVM 这个术语涵盖了整个交易执行管道,从 Banking Stage 调度器到 sBPF 字节码解释器本身。这种模糊性反映了 Solana 的架构差异:没有传统的规范可以孤立地定义“SVM”。唯一接近的规范与 Solana 虚拟机指令集架构 (SVM ISA) 有关,该规范描述了 sBPF 字节码必须如何执行,但没有说明更广泛的运行时。
“Solana 虚拟机”(SVM) 一词在社区内引发了激烈的争论,尤其是在网络扩展和其他构建在 Solana 之上的 Layer 区块链出现之后。争论源于该术语的范围:SVM 严格来说是低级 sBPF 解释器,还是它包含完整的交易执行堆栈?
狭义的观点将 SVM 视为类似于传统的虚拟机 (VM),例如 EVM 的操作码执行器。更具体地说,它是解释和 JIT 编译字节码的 eBPF 派生的虚拟机(rBPF,现在是 sBPF)。这种观点强调 SVM 是一个沙盒化的、基于寄存器的执行器,它处理指令,例如 ALU 操作或 Solana 特定的系统调用。从本质上讲,SVM 的灵感来自 Linux eBPF 的安全模型,但它是为区块链基础设施定制的。这与验证器代码中 SVM ISA(指令集架构)之类的短语相符,其中 SVM 仅是 VM 层。
广义的观点将 SVM 定义为 Solana 验证器的整个交易执行层。这不仅包括运行字节码,还包括上游组件,例如 Banking Stage 的调度器、计算单元预算和通过账户数据库(通常称为 AccountsDB)进行的状态更新。它是将原始交易转换为经过验证的状态更改的“运行时”。
出现歧义的原因是官方 Solana 通信将“运行时”与“SVM”交替使用,而没有一个明确的定义。安扎 (Anza) 为这场辩论增加了亟需的清晰度,在明确验证它的同时,也提倡一种务实、以行动为导向的、以工程为基础的观点。他们将 SVM 视为由 Bank 驱动的运行时,它提供 eBPF VM,这种框架提供了一个更广泛的、包含管道的视图,可用于形成 SVM 的正确定义。
这在 Anza 的官方 SVM 规范 中得到了正式确定,该规范将 SVM 定义为“负责交易执行的组件”,打包成一个独立的库,用于验证器、欺诈证明、侧链等等。
我们可以将 Solana 虚拟机定义为:
Solana 验证器中由 Bank 组件驱动的、解耦的运行时接口和交易处理管道,该管道协调并行指令和链上程序执行,从而提供一个定制的、基于 eBPF 的虚拟机,用于安全字节码的解释、JIT 编译和资源计量。