引言
以太坊作为全球最大的智能合约平台之一,每天处理数百万笔交易。这些交易不仅涉及简单的转账,还包括复杂的智能合约交互。那么,以太坊是如何高效管理全球数亿账户的状态的呢?答案就是 Merkle Patricia Trie(MPT)——一种结合了默克尔树(Merkle Tree)和帕特里夏树(Patricia Trie)的混合数据结构。
本文将深入探讨:
-
MPT 的核心组成(Merkle Tree + Patricia Trie)
-
为什么以太坊选择 MPT 而非传统哈希表?
-
MPT 如何实现高效的状态验证和更新?
-
MPT 在以太坊中的实际应用(如状态根、轻节点验证)
1. 什么是以太坊的“世界状态”?
在以太坊中,“世界状态”(World State) 是所有账户(外部账户和合约账户)的全局快照,包括:
-
账户地址
-
余额(Balance)
-
Nonce(交易计数)
-
合约代码(CodeHash,如果是合约账户)
-
存储根(StorageRoot,合约的状态变量)
由于以太坊的账户数量可能高达 2¹⁶⁰(约1.46×10⁴⁸),如何高效存储和检索这些数据成为关键挑战。

2. 为什么需要 MPT?传统方案的问题
如果使用哈希表存储账户状态,会面临以下问题:
无法高效验证账户是否存在(哈希表无法提供默克尔证明)
每次状态变更需重新计算全局哈希(1亿账户更新1个,也要遍历全部)
存储浪费(以太坊地址空间极其稀疏,哈希表占用大量空间)
而 MPT 结合了 Merkle Tree 和 Patricia Trie ,提供了高效的键值存储、快速查找、数据完整性验证,并确保了数据的不可篡改性。
那么,在以太坊中,MPT 被用于:
- 账户状态存储(State Trie)
- 交易数据存储(Transaction Trie)
3. MPT 的核心组成
(1)Merkle Tree(默克尔树)
-
特点:
-
每个叶节点存储数据的哈希
-
父节点存储子节点哈希的组合
-
根哈希(Root Hash)代表整个数据集的状态
-
-
优势:
-
轻节点只需存储根哈希即可验证数据(如验证某账户余额)
-
防篡改(任何数据修改都会改变根哈希)
-
(2)Patricia Trie(基数树优化版)
-
作用:高效存储和检索键值对(如 地址 → 账户状态)
-
特点:
-
路径压缩:合并相同前缀的节点,减少存储空间
-
16 进制分支(每个节点最多16个子节点,对应 0-F)
-
确定性(无论插入顺序如何,最终树结构相同)
-
-
优势:
-
比普通 Trie 更节省存储
-
查询和更新效率高(O(log n))
-
4. MPT 如何工作?
(1)账户状态存储
-
每个账户的状态(余额、Nonce等)以 RLP(递归长度前缀)编码 存储。
-
账户地址作为 Key,状态数据作为 Value,存入 MPT。
(2)节点类型与数据结构
MPT 对 Key 采用 Hex 编码,每个 Hex 字符是一个 nibble(半字节)。遍历路径时,每次只处理一个 nibble。节点主要分为以下几种类型:
分支节点(Branch Node)
-
是一个 17 元素的数组:
-
前 16 个元素对应 0x0 到 0xF 的 Hex 字符,存储指向下一级节点的 指针(实际是子节点的哈希)。
-
第 17 个元素存储 当前路径结束时的值(如果存在)。
-
-
例如:查询地址 0x1A3B… 时,先访问 1,再访问 A,依此类推。
扩展节点(Extension Node)
-
存储 共享前缀 和下一个节点的哈希,用于路径压缩。
叶子节点(Leaf Node)
-
存储 剩余路径 和最终的值(如账户状态)。
关键设计:
-
指针用 子节点的哈希 表示,而非直接存储子节点数据。
-
每个节点将子节点的哈希作为自身内容的一部分,形成 默克尔树结构,确保数据可验证性。
(3)状态根(StateRoot)
-
每个区块的 Header 包含 stateRoot,即 MPT 的根哈希。
-
任何状态变更都会导致 stateRoot 更新。
(4)默克尔证明(Merkle Proof)
-
轻节点通过 路径上的节点哈希链 验证数据(如账户余额)。

5. 实际应用场景
-
账户状态存储 以太坊每个账户的状态都存储在 State Trie 中:
通过账户地址作为 Key,状态数据作为 Value。 账户状态变化时,MPT 结构随之更新,影响区块的 Merkle Root。
-
交易验证 交易数据存储在 Transaction Trie,通过 Merkle Proof 可验证交易是否包含在区块中。
-
智能合约存储 合约存储使用独立的 MPT(Storage Trie),保证存储安全且可验证。
6. 总结
MPT 是以太坊状态管理的核心,它通过 Merkle Tree + Patricia Trie 的组合,实现了: ✔ 高效的状态查询和更新 ✔ 低存储开销(路径压缩) ✔ 安全的默克尔证明 ✔ 跨节点一致性(RLP 编码)
正是这种精妙的设计,使得以太坊能够支撑全球数亿账户的复杂状态管理。
查看相关文档:
默克尔帕特里夏字典树
Trie Visualization(mpt可视化演示)



