/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
不少开发者写过Solidity合约,也用ethers.js调过接口,但被问起“合约到底在链上怎么跑的”“转账时的Gas费是怎么算出来的”“链上数据到底存在哪里”时,往往只能含糊其辞。其实,以太坊的强大不仅在于“智能合约”这个概念,更在于支撑它运行的底层技术骨架——虚拟机、Gas机制和数据结构,这三者构成了以太坊的“发动机”“调节器”和“账本”。
今天我们就跳出应用层,钻进以太坊的“引擎盖”,用大白话+代码示例拆解这三大核心。搞懂它们,你不仅能明白合约报错的根源、Gas费飙升的原因,更能写出更高效、更安全的代码。
一、以太坊虚拟机(EVM):合约的“全球沙盒计算机”
如果你把以太坊比作一个去中心化的操作系统,那EVM就是这个系统的“CPU”——所有智能合约的执行、账户状态的更新,都由EVM统一处理。更关键的是,无论你在世界哪个角落的节点上运行合约,EVM都会给出完全一致的结果,这是区块链“不可篡改”的底层保证。
1. EVM的本质:一个“状态机”
EVM最核心的功能是维护以太坊的“全局状态”。这个状态包含所有账户的余额、合约代码、存储数据等,就像一个巨大的分布式账本。每次有交易发生(比如转账、调用合约),EVM就会根据交易内容,把当前状态转换成一个新的状态——这个过程不可逆,且全网节点都会同步这个新状态。
举个例子:当你调用transfer给朋友转1 ETH时,EVM的执行流程是这样的:

![打卡信奥刷题(3652)用C++实现信奥题 P12076 [OOI 2025] Cute Subsequences-171主机测评](https://www.171host.com/wp-content/uploads/2026/10/20261026055333-6adeeaddd0c48-220x150.png)
