以太坊虚拟机 (EVM) 简介:运行所有智能合约的引擎

以太坊虚拟机 (EVM) 简介:运行所有智能合约的引擎

我记得第一次遇到交易手续费吞噬了我一半交易额的情况。那是 2021 年,我尝试在 OpenSea 上铸造一些东西,结果网络竟然要价 87 美元才能处理。那一刻我意识到,我对底层机制的运作一无所知。为什么手续费这么高?钱都花到哪儿去了?究竟是什么在执行我的交易?这三个问题的答案都一样:以太坊虚拟机。

大多数加密货币爱好者都听说过“EVM”这个词。但真正了解它作用的人却寥寥无几。这至关重要,因为EVM几乎影响着以太坊以及390多条借鉴其设计的区块链上的一切。目前,超过1900亿美元的DeFi资产就运行在EVM网络上。如果你曾经使用过MetaMask、兑换过代币,或者在DApp(去中心化应用程序,简称dApp)上点击过按钮,那么EVM就在幕后默默地执行着这些操作。节点在所有这些区块链上执行智能合约,而EVM正是让每一个智能合约调用真正得以运行的关键所在。

所以,让我们来真正地分析一下。不是教科书式的分析,而是真实的分析。

什么是以太坊虚拟机?它为何如此重要?

好,先说最简单的版本。你用过计算器应用吗?输入 2 + 2,得到 4。很无聊。现在想象一下,这个计算器同时在 10,000 部手机上运行。每部手机都得到相同的答案。如果一部手机试图声称“2 + 2 = 5”,其他 9,999 部手机会立即拒绝。没有人能控制计算器,没有人能关闭它,也没有人能篡改它。这基本上就是 EVM 的工作原理,只不过它运行的不是数学作业,而是智能合约,用来转移真金白银。

计算机专家称之为状态机。以太坊维护着大量数据:谁拥有哪些代币、有哪些智能合约、每个地址有多少以太币、每个合约存储了哪些信息。所有这些都构成了“状态”。你发送一笔交易。EVM(以太坊虚拟机)会将这笔交易与当前状态进行比对。一个新的状态由此产生。旧状态加上交易等于新状态。公式如下:Y(S, T) = S'。完成。

最神奇的是冗余机制。你的交易并非只到达弗吉尼亚州的一台服务器,而是会经过遍布以太坊网络的数千个节点。每个节点都会独立运行计算,然后比较结果。匹配?很好,新的状态会被添加到区块链上。不匹配?错误的版本会被丢弃。我总是想象成千上万的会计师填写同一份纳税申报表。如果其中一人填写的数字不同,所有人都会停下来找出错误。

这就是它与普通软件的不同之处。EVM 无人运营,没有公司支持,没有技术支持,也没有管理员可以在凌晨两点悄悄回滚交易。代码是开源的,在每个节点上运行都一样,信任来自于大量的用户共识,而不是某个权威人士的“相信我”。

evm

EVM 的工作原理:从 Solidity 到执行

让我带你了解一下智能合约的生命周期,因为一旦你了解了完整的事件链,EVM 就更容易理解了。

第一步:编写代码。大约 90% 的 EVM 开发者选择 Solidity 作为编程语言。它借鉴了 JavaScript 的语法:花括号、函数、变量等等。Vyper 也存在(更接近 Python,有意设计得更简洁),但 Solidity 仍然是主流。这里有个容易让新手栽跟头的陷阱:每一行代码的运行都需要真金白银。没有沙箱,也没有回滚机制。如果你部署的合约存在 bug,除非你事先构建了升级机制,否则这个 bug 将永久存在。我亲眼目睹一位开发者朋友因为一个小数点位置错误而彻夜难眠,才深刻体会到这一点。

第二步:你的 Solidity 代码会被编译成字节码。你可以把字节码想象成 EVM 的机器语言。你编写的代码是人类可读的,编译器会把它转换成 EVM 能够理解的十六进制代码。这些十六进制代码中包含大约 150 个操作码。ADD 执行加法运算。SSTORE 永久保存数据。CALL 允许合约之间进行通信。一个操作码对应一个小型任务。你的合约会将成千上万个这样的任务串联起来。

第三步才是真正精彩的部分。有人调用你的合约。网络上的每个节点都会获取这笔交易,加载你的字节码,并开始按顺序处理操作码。处理器是基于栈的:想象一下一叠盘子,你只能触摸最上面的盘子。压入一个数字。再压入另一个数字。执行加法运算。两个数字都会从栈顶取出,相加,结果放回栈中。最大深度为 1024 层,每层 256 位。

每个节点都独立执行此操作。相同的字节码、相同的输入、相同的初始状态。每次都得到相同的结果。正是这种可预测性使得区块链共识机制得以运作。如果EVM在不同的机器上输出不同的结果,那么整个区块链体系就会崩溃。

EVM架构:堆栈、内存和存储

电子交易系统(EVM)分三层处理数据。这一点至关重要,因为它直接影响您的交易成本。

是程序的核心。所有计算都在这里进行:压栈、出栈、操作、重复。它速度快、成本低(每次操作大约消耗 3 gas),并且在程序执行完毕后就会消失。大多数操作码都直接操作栈。

内存就像一张草稿纸。你可以对其中的任何位置进行读写操作,这使得它比栈更灵活,尤其适用于字符串或大型数组等数据。但内存也会在事务处理完成后消失。从成本角度来看,它介于两者之间:比栈贵,但比存储便宜得多。内存会根据需要增长,分配的内存越多,gas 成本呈平方级增长。

然后是存储。存储成本很高,而且理由充分。存储是永久性的。当你的智能合约记录 Alice 拥有 500 个代币时,该数据会被写入以太坊状态树并永久保存。网络上的每个节点都会存储它。永久保存。一次新的存储写入需要 20,000 gas。一次更新需要 5,000 gas。作为参考,一次简单的以太币转账总共需要 21,000 gas。因此,一次存储写入的成本几乎与一笔完整的交易一样高。

数据层持续时间天然气成本它的用途是什么
处决后消失。每次手术使用约3种气体数学、逻辑、比较
记忆交易后消失3 气体 + 膨胀成本临时数据,函数参数
贮存永恒的每次写入 5,000-20,000 加仑汽油代币余额、所有权记录、设置

如果你曾经好奇为什么部署智能合约的成本如此之高,原因就在这里。部署过程会将合约的所有字节码和初始数据写入存储。这相当于累积了大量 20,000 gas 的操作。

如果这听起来很熟悉,那是因为它很常见。普通电脑的工作原理也类似。CPU寄存器速度快但容量小,就像堆栈一样。RAM容量大但速度慢,就像内存一样。硬盘存储所有数据,但每次写入耗时最长,就像存储设备一样。以太坊的创建者故意这样设计。他们希望你感受到将数据永久存储在链上的经济成本,这样你就会只存储真正需要存储的数据。

EVM上的Gas费:以太坊价格计算方式

我需要谈谈气体,因为它既是电子生产机器(EVM)中最巧妙的部分,也是最令人沮丧的部分。

EVM 是图灵完备的。简单来说:它可以运行你交给它的任何计算,包括无限循环。想象一下,有人部署了一个包含 while(true) 循环且运行成本为零的合约。所有节点都会卡住,区块链冻结,游戏结束。

Gas 可以防止这种情况发生。每个操作码都有对应的 Gas 值。ADD 操作消耗 3 个 Gas,SSTORE 操作消耗 5,000 或 20,000 个 Gas。发送交易时,你需要设置一个 Gas 预算。如果计算在预算范围内完成,你会获得未使用 Gas 的退款。如果达到预算上限,所有操作都会回滚,但你仍然需要支付已消耗的 Gas 费用。无限循环会耗尽 Gas 预算,导致程序崩溃。

你钱包里实际扣除的费用是 Gas 费乘以 Gas 价格。Gas 费取决于你的交易内容。Gas 价格会随着网络繁忙程度而波动,网络繁忙程度以 gwei(十亿分之一以太币)为单位衡量。交易量大?Gas 价格上涨。周日交易清淡?Gas 价格下降。

故事精彩之处就在这里。还记得我2021年那次87美元的增值吗?当时的Gas费通常在100-200 gwei之间。DeFi的夏季热潮和NFT热度让网络满负荷运转。快进到2026年初,平均Gas费降到了3 gwei左右。一笔普通的ETH转账费用大约在0.30美元到0.67美元之间。这比2021年下降了96%。

平均交易费天然气价格范围是什么原因造成的?
2021约24美元100-200克威NFT热潮,DeFi收益耕作
2022 5-15美元30-80克威市场崩盘,活动减少
2023 2-8美元15-40克威熊市结算
2024 0.50-2美元5-15克威登村升级,EIP-4844
2026年第一季度0.30-0.67美元~3 gwei L2 迁移,blob 事务

发生了什么变化?两件事。首先,2024 年 3 月的 Dencun 升级引入了 EIP-4844,它为 Rollup 创建了“blob”存储。在 blob 出现之前,二层网络必须将数据作为 calldata 发布到以太坊主网上,这成本很高。Blob 是临时的,成本也低得多,可以将二层发布成本降低约 95%。其次,大部分交易活动都转移到了二层网络。当你的 Uniswap 交易运行在 Arbitrum 而不是主网上时,底层网络就不会那么拥挤。

在这些二层网络上,一次交易的成本可能不到一美分。Arbitrum、Base 和 Optimism 都运行 EVM,因此你的 Solidity 代码运行方式相同。你只需支付一小部分 gas 费用。

evm

EVM兼容性:为什么390多个区块链都复制了以太坊的蓝图

至此,EVM 的故事从有趣发展到对整个行业具有真正意义。

BNB Chain上线时,币安并没有发明新的虚拟机,而是对EVM进行了调整。Polygon也做了同样的事情。Avalanche、Fantom、Cronos、Harmony、Gnosis Chain等项目也遵循同样的模式。甚至像Arbitrum和Optimism这样专门构建的Layer 2 Rollup项目也原生运行EVM。最终形成了一个拥有超过390条兼容EVM的区块链生态系统,但其中只有大约40-50条拥有活跃的日常交易活动。

为什么不从头开始构建,而是复制以太坊?原因有三,而且都很实际。

首先是开发者。全球有超过 2 万名 Solidity 开发者。如果启动 EVM 链,他们每个人都能在第一天就交付代码,而无需学习新的语言。Solana 使用 Rust,Aptos 和 Sui 使用 Move。这些链都需要从零开始建立开发者群体。而 EVM 链则完全避免了这个问题。

其次,免费工具。MetaMask、Hardhat、Foundry、Ethers.js、OpenZeppelin、Etherscan。整套以太坊工具包无需任何改动即可在任何 EVM 链上运行。相同的钱包。相同的测试框架。相同的区块浏览器。这能节省数年时间。

第三,DeFi 与 EVM 协同运作。Uniswap、Aave、Curve、SushiSwap 等项目都运行在五条或更多 EVM 链上。合约从以太坊复制粘贴到 Polygon、Arbitrum 和 BNB 链。相同的代码、相同的审计、相同的安全模型。流动性通过桥梁连接,而 EVM 则起到粘合剂的作用。

但复制 EVM 也意味着复制它的问题。一次只能处理一个事务。在 64 位处理器上使用 256 位字,这增加了开销。虽然 gas 系统能用,但增加了新型虚拟机所没有的复杂性。Solana 的 SVM 可以并行运行事务。MoveVM 的资源模型可以消除某些类型的 bug。FuelVM 借鉴了现代 CPU 设计的理念。

它们之中有哪一项在普及程度上赶上EVM吗?没有。差得远呢。纸面上的技术优势在现实世界中无法匹敌网络效应。EVM拥有最多的开发者、最多的活跃协议、最多的经过审计的代码模式,以及在遭受黑客攻击后幸存下来的最多经验。在加密货币领域,一个漏洞就可能造成数亿美元的损失,这些经验比基准测试结果更有价值。

以太坊状态以及EVM如何维护共识

这部分内容比较技术性,但很重要。它会告诉你为什么以太坊节点需要真正的硬件,以及为什么链上数据存储成本很高。

以太坊维护着一个庞大的查找表。给它任何地址,它都会返回以太币余额、随机数(交易计数),对于合约地址,还会返回完整的字节码以及所有存储的数据。数百万个地址,数百GB的存储空间。这就是以太坊的状态。

所有数据都存储在一个 Merkle-Patricia 树中。简单来说:这是一个树状结构,每个分支都有自己的哈希值,所有分支的哈希值最终汇总成位于树顶的根哈希值。这个根哈希值就位于每个区块的头部。如果两个钱包之间转移 0.001 ETH,根哈希值就会完全改变。验证者通过运行每一笔交易、计算生成的根哈希值并进行比较来检查区块。如果哈希值相同,则区块有效;如果哈希值不同,则区块被拒绝。

运行一个节点意味着要随着每个区块的生成而更新整个树状结构。这实际上是以太坊最大的扩展性问题。虚拟机本身速度足够快,但状态却不断增长。每个 SSTORE 都会在 trie 树中添加一个新的叶子节点,每个新合约都会增加更多的数据。Verkle 树或许可以解决这个问题。以太坊团队已经开发 Verkle 树好几年了。Verkle 树可以让节点在不存储完整状态的情况下验证区块。如果 Verkle 树最终发布,运行一个节点的成本将大幅降低,更多的人可以加入验证者行列。

EVM实现:一个规范,多个客户端

大多数人没有意识到这一点:“EVM”是一份规范,而不是一个程序。它是一份文档,规定“给定这些输入,生成这些输出”。任何人都可以用任何他们喜欢的语言构建自己的版本,只要它符合规范即可。

Geth 是其中最主要的,用 Go 语言编写,可在大多数以太坊节点上运行。但还有其他选择:Nethermind(C#)、Besu(Java,专为企业级应用)、Erigon(Go,针对磁盘优化)以及 Reth(Rust,由 Paradigm 开发)。核心开发者实际上希望保持这种多样性。为什么呢?如果 95% 的节点运行 Geth,而 Geth 又出现了一个严重漏洞,那么整个网络都会受到影响。如果漏洞分散在五个不同的客户端上,那么只会影响 20% 的节点,其余节点仍然可以正常运行。

二层网络带来了一些新意。Arbitrum 开发了一个名为 Arbitrum VM 的修改版。Optimism 的目标是实现“EVM 等效性”,即逐字节地实现完全相同的行为。zkSync Era 更进一步,它将 EVM 字节码编译成一种可以与零知识证明兼容的格式。其底层执行路径完全不同。但对于 Solidity 开发者来说呢?它看起来仍然一样。事实上,架构截然不同的程序对开发者来说都呈现出相同的面貌,这可以说是 EVM 最被低估的特性之一。

作为开发者,你通常不需要关心哪个客户端处理你的合约。你只需编写 Solidity 代码,编译成字节码,然后部署。规范保证了所有客户端都能得到相同的结果。

在EVM上进行智能合约开发:开发者实际面临的问题

尝试为 EVM 构建应用的 Web 开发者会遭遇当头棒喝。bug 会造成实实在在的损失。你无法在生产环境中进行修补。如果交付的合约存在缺陷,除非你事先做好规划,否则它将一直存在缺陷。

Solidity 为超过 90% 的 EVM 合约提供支持。它的工具链也日趋完善。Hardhat 提供 JavaScript/TypeScript 以及插件支持。Foundry 使用 Rust,运行速度更快,并且允许你直接用 Solidity 编写测试。两者都会启动本地 EVM,因此你可以免费进行测试。对于任何新项目,我都会选择 Foundry。但是,一旦你的测试套件超过一百个测试用例,速度差距就会变得非常明显。

代币标准维护着生态系统的秩序。ERC-20 涵盖 USDT、LINK、UNI 等同质化代币。ERC-721 用于 NFT。ERC-1155 处理多代币合约。ERC-4626 用于收益库。所有这些标准在所有 EVM 链上都能以相同的方式运行。只需编写一次合约,即可将其部署到以太坊、Arbitrum、Base、Polygon 等区块链上。相同的代码,相同的行为。

安全?糟糕透了。多年来,重入攻击已造成数亿美元的损失。2016 年的 DAO 黑客事件,由于一个重入漏洞,攻击者得以循环使用提现功能,导致以太坊分裂成两部分,损失高达 6000 万美元。整数溢出问题一直困扰着我们,直到 2021 年 Solidity 0.8 版本添加了默认检查机制才有所缓解。即使是职业战队的审计代码,访问控制错误仍然屡见不鲜。Slither、Mythril 和 Certora 等工具虽然可以捕获一些漏洞,但没有什么能取代全面的审计。而且,即使是审计也难免会有疏漏。这就是现实。

如今部署起来:一个基本的 ERC-20 代币在主网上的价格是 5-20 美元。一个完整的 DeFi 协议呢?可能要几百美元。在 L2 网络上呢?只需几美分。难怪 2025 年 65% 的新合约都部署在了 Layer 2 网络上。

2026 年的 EVM 生态系统:二层主导地位及未来发展趋势

三年前,二层网络的总锁定价值 (TVL) 为 40 亿美元。如今,这一数字已超过 500 亿美元。仅 Arbitrum 就拥有 166 亿美元,Base 为 100 亿美元,Optimism 为 60 亿美元。这种转变的发生是因为二层网络费用几乎降至零。大多数 Rollup 交易的互换费用都低于一美分。甚至主网费用也跌破了一美元。过去人们常说以太坊成本太高,大家都应该使用 Solana。但这种说法如今已不再适用。

账户抽象(ERC-4337)在2025年和2026年悄然改变了加密货币领域的格局。智能钱包允许用户使用稳定币支付gas费,将多个操作打包成一笔交易,并在没有助记词的情况下恢复账户。如果你曾亲眼目睹朋友因为MetaMask要求他们批准两次交易弹窗而怒退加密货币,你就能明白这其中的意义所在。加密货币钱包和普通银行应用程序之间的差距正在缩小。

接下来是什么?我正在关注几个方面。EOF(EVM 对象格式)可以清理字节码,从而降低验证成本,并提升工具的运行效率。并行执行的研究有望让 EVM 同时处理多个独立事务,而不是逐个处理。目前还处于早期阶段,但如果成功,吞吐量将大幅提升,而无需开发人员进行任何更改。此外,Verkle 树也越来越接近正式发布。

竞争确实存在。Solana 的 SVM 实现了更高的吞吐量。MoveVM 引入的模式可以防止一整类漏洞的出现。但看看数据吧。EVM 生态系统持有超过 1900 亿美元的 DeFi TVL。DEX 月交易量超过 4000 亿美元。超过 2 万名开发者在其上进行开发。近 11 年的实战检验。新虚拟机在基准测试中胜出。当真金白银投入时,EVM 在所有真正重要的方面都胜出。

任何问题?

以太坊于 2015 年 7 月上线,当时每个 ETH 的价格约为 0.30 美元。1000 美元大约可以买到 3333 个 ETH。假设到 2026 年初,ETH 的价格达到 1800 美元,那么你手上大约会拥有 600 万美元。当然,这只是最乐观的情况;你还需要有足够的勇气熬过多次超过 80% 的暴跌。众所周知,过去的加密货币收益并不能准确预测未来的收益。

不。ERC-20 是一套规则,它告诉可互换代币(USDT、LINK、UNI)如何运作。EVM 是运行这些规则的机器。当你在去中心化交易所 (DEX) 上发送 USDT 或兑换 LINK 时,EVM 会读取 ERC-20 合约代码并实际执行转账操作。

不,这是两码事。ETH 是你买卖的代币。EVM 是运行智能合约的引擎。如果把以太坊比作一辆车,ETH 就是汽油,EVM 就是引擎盖下的部件。你燃烧 ETH 来支付汽油费,而这些汽油维持着 EVM 的运行。但 ETH 和 EVM 根本不是一回事。

是的。以太坊虚拟机(EVM)是以太坊发明的,所以说它“兼容”就像问英语是否与英语词典兼容一样。人们谈论EVM兼容性时,指的是其他区块链,例如BNB Chain、Polygon或Avalanche,它们复制了以太坊的虚拟机,这样开发者就可以将他们的Solidity代码迁移过去,而无需重写任何一行代码。

你用 Solidity 编写代码。编译器会将其转换为字节码,而以太坊虚拟机 (EVM) 实际读取的就是字节码。以太坊区块链上的各个节点会获取这些字节码,并逐条执行指令。每个节点都使用相同的输入独立完成计算,因此它们最终都会得到相同的结果。Gas 费用会为每一步操作设定价格。这样一来,无限循环就不会导致网络瘫痪,验证者也能因完成繁重的计算任务而获得报酬。

你可以把它想象成以太坊的底层引擎。网络上的每台计算机都运行着一个副本。它们都处理同一笔交易,并得到相同的结果。没有哪一台机器拥有绝对的控制权。没有人可以篡改它。成千上万个节点同时达成一致,这是保证其公正性的唯一途径。

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.