以太坊需要在每个区块中高效表示全局状态(数亿个账户余额、合约存储),同时支持轻客户端用极小的数据量验证任意状态值的正确性。Merkle Patricia Trie(MPT)是解决这个问题的核心数据结构。
以太坊状态面临三个约束:
简单的 Merkle 树满足条件 1 和 3,但不满足条件 2(插入/删除效率低)。
简单的 Patricia Trie 满足条件 2,但不满足条件 1 和 3。
MPT = Merkle + Patricia,同时满足三个约束。
Root Hash
/ \
H(A+B) H(C+D)
/ \ / \
H(A) H(B) H(C) H(D)
| | | |
"a" "b" "c" "d"
H(B) 和 H(C+D) → O(log n) 大小的证明键集合:["abc", "abd", "xyz"]
root
/ \
ab xyz
/ \ |
c d (值)
| |
(值) (值)