以太坊学习黄皮书摘要,一篇文章读懂以太坊的技术灵魂
以太坊黄皮书(Ethereum Yellow Paper)由以太坊联合创始人 Gavin Wood 博士于2014年撰写,是以太坊协议最正式、最权威的技术规范,与白皮书偏向理念阐述不同,黄皮书采用严密的数学语言,精确地定义了以太坊的状态转换函数、区块结构、交易执行规则以及以太坊虚拟机(EVM)的运行机制,对于希望深入理解以太坊底层原理的开发者和研究者来说,黄皮书是绕不开的经典文献,本文将对黄皮书的核心内容进行系统摘要,帮助读者建立清晰的认知框架。
以太坊的本质:状态转换机
黄皮书开篇即点明以太坊的核心设计思想:以太坊是一个基于交易的状态机(Transaction-based State Machine)。
-
世界状态(World State):以太坊维护一个全局状态,它是从地址(160位)到账户状态(account state)的映射。
-
状态转换函数:以太坊的运行过程可以概括为一个公式:
Υ(σ, T) → σ'
即给定当前世界状态 σ 和一笔交易 T,通过执行得到新的世界状态 σ'。
这一简洁而深刻的形式化定义,是理解一切后续内容的基础,区块链本质上就是将交易按序应用到创世状态上,逐步演进出当前状态的账本。
账户模型:两类账户构成的世界
黄皮书将以太坊账户分为两类:
- 外部账户(EOA,Externally Owned Account):由私钥控制,可以发起交易,没有关联代码。
- 合约账户(Contract Account):由合约代码控制,被交易或消息调用触发时自动执行,无法主动发起行动。
每个账户状态包含四个字段:
| 字段 | 含义 |
|---|---|
| nonce | 该账户已发送的交易数(合约账户为创建的合约数量) |
| balance | 账户余额,以 Wei 为单位(1 ETH = 10¹⁸ Wei) |
| storageRoot | 账户存储树的 Merkle 根哈希(仅合约账户有意义) |
| codeHash | 账户 EVM 代码的哈希,代码不可更改 |
这种账户模型与比特币的 UTXO 模型形成鲜明对比,它更接近传统的银行账户范式,便于实现智能合约逻辑。
交易:驱动状态变化的燃料
黄皮书定义了两种合法的交易类型:
- 消息调用(Message Call):向某个账户发起调用,可以是转账、调用合约函数等。
- 合约创建(Contract Creation):在链上创建新的合约账户并部署代码。
每笔交易包含以下关键字段:
- nonce:发送方交易计数,防止重放攻击
- gasPrice:发送方愿意为每单位 Gas 支付的价格
- gasLimit:为交易执行设定的 Gas 上限
- to:接收方地址(合约创建交易中为空)
- value:转账金额(Wei)
- data / init:调用数据或合约初始化代码
- v, r, s:ECDSA 签名分量,用于验证发送方身份
值得注意的是,交易的有效性检查包括 nonce 匹配、Gas 扣费预扣、余额充足性和签名合法性,即使交易执行失败,发送方仍需为已消耗的计算资源支付 Gas 费用——这正是以太坊防拒绝服务攻击的经济机制。
Gas 机制:计算成本的度量衡
Gas 是黄皮书中极具智慧的设计,由于图灵完备的系统中存在停机问题,必须有机制防止无限循环耗尽全网资源。
核心规则包括:
- 每种 EVM 操作码都有固定的 Gas 消耗成本,例如简单的加法运算与写入存储的操作成本差异巨大。
- 交易执行前,
gasLimit × gasPrice的费用会被预先扣除。 - 若执行中 Gas 耗尽,发生 out-of-gas 异常,所有状态变更被回滚,但已消耗的 Gas 不予退还。
- 若执行顺利结束,剩余 Gas 对应的费用返还给发送方。
Gas 机制将计算资源明码标价,构成了以太坊经济安全模型的重要支柱。
以太坊虚拟机(EVM):智能合约的运行环境
EVM 是黄皮书技术细节最密集的部分,其特点包括:
- 准图灵完备:理论上可执行任意计算,但受 Gas 限制约束。
- 基于栈的架构:EVM 是栈式虚拟机,操作数深度最大为1024,每个字(word)为256位,这一设计便于密码学运算(如 Keccak-256 哈希和椭圆曲线运算)。
- 确定性执行:EVM 中不存在随机源,确保所有节点对同一交易得出完全一致的结果。
- 无系统调用、无网络访问:合约执行完全封闭,外部数据只能通过交易输入或预言机机制引入。
合约创建过程在黄皮书中被描述为两阶段:先执行 init 代码并返回最终的合约运行时代码,随后该代码被存储到区块链上,之后每次被调用时执行的都是这份运行时代码。
数据结构:RLP 与 Merkle Patricia Tree
RLP 编码(递归长度前缀)
RLP 是以太坊最基础的数据序列化方案,只处理字节数组和嵌套列表两种结构,它的设计哲学是极简与确定性——编码结果唯一,便于哈希和验证。
Merkle Patricia Tree(MPT)
MPT 是以太坊最重要的数据结构,它将 Merkle 树与 Patricia 压缩前缀树结合:
- 支持高效的插入、删除和查找(复杂度 O(log n))
- 通过密码学哈希根,任何篡改都会导致根哈希变化
- 提供 Merkle 证明,实现轻节点的状态验证(SPV)
以太坊每个区块头包含三个树根:
- stateRoot:世界状态树
- transactionsRoot:交易树
- receiptsRoot:交易回执树
区块结构与链的最终化
区块由区块头(block header)、交易列表和叔区块头(Ommer/Uncle block headers)组成,区块头包含父哈希、时间戳、难度、三个状态树根、Gas 使用量、以及与共识相关的字段。
黄皮书详细规定了区块合法性验证条件:只有父区块存在、难度正确、GasLimit 在允许范围内变动、PoW(后经合并升级为 PoS)证明有效、状态转换正确执行的区块,才能被接受并追加到链上,最终确定链的规则,就是选择总难度(或权益权重)最大的合法链。
学习建议与总结
黄皮书的学习曲线陡峭,主要在于其大量使用数学符号定义,建议的学习路径:
先通读白皮书与《Mastering Ethereum》建立直觉
发布于:2026-10-03,除非注明,否则均为原创文章,转载请注明出处。
