以太坊全景图
前四章我们从下往上搭:哈希、链、账户、交易。这一章把它们拼成完整的一张图,并把你之后会反复撞见的术语——EVM、世界状态、节点、客户端、主网/测试网/L2——一次挂到位。读完这章,卷一的"换脑子"就完成了,从下一卷起我们开始动手。
以太坊是一台"世界计算机"
比特币是一本只记"谁转给谁多少钱"的账。以太坊多迈了一大步:它是一台全球共享的状态机。它的"当前状态"是所有账户的余额、所有合约的代码与存储;而交易,就是让这台状态机从一个状态转移到下一个状态的输入。区块链记录的,是这台机器每一步状态转移的完整历史。
新状态 = STF(旧状态, 一批交易)
└ STF = State Transition Function,由 EVM 逐笔执行交易得出
EVM:每个节点里都有的那台虚拟机
EVM(以太坊虚拟机)是执行智能合约的运行时。它是一个 256 位的栈式虚拟机,读取合约字节码、一条一条执行 opcode。它的关键特性是确定性:同样的输入,在全球每一台节点上执行必须得出逐位相同的结果——否则全网无法对状态达成一致。
EVM 之于智能合约,正如 ART / Dalvik VM 之于你的 Kotlin 代码。你写 Solidity(≈ Kotlin),编译成 EVM 字节码(≈ dex/smali),然后在每个节点的 EVM 上执行。第 11 章我们会像读 smali 一样,真的打开 EVM 字节码看它单步执行——那一章有本书的旗舰 Demo,一台能在你浏览器里跑的 mini-EVM。
世界状态:那本账本里到底存了什么
"世界状态"是一棵巨大的 Merkle 树(具体是 Merkle Patricia Trie),从地址映射到账户。每个账户存四样东西:
| 字段 | 含义 | EOA | 合约 |
|---|---|---|---|
| nonce | 已发交易数 / 已创建合约数 | ✓ | ✓ |
| balance | 账户持有的 ETH(以 wei 计) | ✓ | ✓ |
| codeHash | 合约字节码的哈希 | 空 | ✓ |
| storageRoot | 合约自己那棵存储树的根 | 空 | ✓ |
整棵树的根哈希,就是第 2 章提到的区块头里的 stateRoot。一个 32 字节的哈希,就"承诺"了全世界几亿个账户的每一分钱、每一格存储。改动任何一格,root 就变——又是那个熟悉的哈希魔法。
节点与客户端:网络由谁组成
节点(node)是运行以太坊软件、参与网络的一台机器。客户端(client)是那个软件本身。合并之后,一个完整节点其实是两个客户端搭档:
- 执行层客户端(Geth、Nethermind、Reth…):负责执行交易、维护状态、跑 EVM,并对外提供 JSON-RPC 接口(你第 7 章就会用它)。
- 共识层客户端(Prysm、Lighthouse、Teku…):负责 PoS 共识,决定区块顺序与最终性。
之所以有这么多不同实现,是为了客户端多样性——万一某个实现有 bug,不至于让全网一起崩。这本身就是去中心化韧性的体现。
自建节点要同步几百 GB 数据。大多数开发者(尤其起步阶段)直接用 Infura、Alchemy、公共 RPC 等"节点即服务"——它们帮你跑节点,你只管调 RPC。这跟你用云数据库而非自建 MySQL 是一个道理。到了真要去信任化时再自建。
一张网还是很多张网
"以太坊"其实是一族网络。开发时你必须清楚自己连的是哪一张——每张有唯一的 chainId,交易签名里带着它,防止一张网上的交易被拿到另一张网重放。
| 网络 | chainId | 用途 | 币真值钱吗 |
|---|---|---|---|
| Ethereum 主网 | 1 | 真实资产,生产环境 | 是,真金白银 |
| Sepolia 测试网 | 11155111 | 开发测试的首选测试网 | 否,水龙头免费领 |
| Holešky 测试网 | 17000 | 面向质押/验证者测试 | 否 |
| 本地 Anvil/Hardhat | 31337 | 你自己电脑上的一次性链 | 否,秒开秒清 |
| Arbitrum One (L2) | 42161 | 以太坊二层,便宜快 | 是 |
| Base (L2) | 8453 | Coinbase 的二层 | 是 |
L2(第二层)你先建立印象即可:它们是建在以太坊之上、把大量交易在链下处理再把结果压缩回主网的扩容方案,费用低得多。第 25 章会专门拆解它们的原理和风险。开发时的黄金流程是:本地链 → 测试网 → 主网,一路验证再上真金白银。
把整张图拼起来
你的私钥(第3章)
│ 签名
▼
交易(第4章) ──广播──► mempool ──打包──► 区块(第2章)
│ 每个节点的 EVM 执行
▼
世界状态改变(本章)
│ 承诺为
▼
stateRoot 写进区块头
▲ │
└──── JSON-RPC 读取(第7章) ◄── 节点/客户端(本章)
以太坊 = 一台由全球节点共同维护、状态被 Merkle 树承诺、由 EVM 逐笔执行交易来推进的世界状态机。你写的合约跑在 EVM 上,读写的是世界状态里属于你合约的那格存储,通过 JSON-RPC 与之交互。术语地图已经铺好——卷二开始,我们真的装钱包、领测试币、发出你的第一笔链上交互。
本章小结
- 以太坊是一台世界状态机:交易是输入,EVM 是执行引擎,世界状态是被推进的结果。
- EVM 是确定性的 256 位栈机(≈ 手机上的 ART);合约字节码就跑在它上面。
- 世界状态是从地址到账户的 Merkle 树,一个 stateRoot 承诺全网状态。
- 节点由执行层 + 共识层客户端组成;网络按 chainId 区分,开发按"本地 → 测试网 → 主网"推进。