本文档深入分析区块链的数据存储模型,涵盖 Ethereum 的 MPT、Cosmos 的 IAVL、以及 Verkle Trie 等前沿存储结构。
| 类型 | 数据 | 描述 |
|---|---|---|
| 无状态数据(输入数据) | Block | 区块数据 |
| Transaction | 交易数据 | |
| 状态数据(输出数据) | Account | 如 ETH 的账户 |
| Contract Storage | 如 ETH 中合约状态 | |
| Tx Receipt | 如 ETH 中的 event | |
| UTXO | 如 BTC 中 Unspent TX Output |
简单的 KV 存储:
hash → Block 和 height → hashtxhash → Transaction大部分区块链使用 KV 数据库:LevelDB、RocksDB、Berkeley DB 等。
区块链本质上是一个状态机,状态数据是最核心的数据。主要分两类:
| 模型 | 代表 |
|---|---|
| KV 存储 | Bitcoin 的 UTXO |
| MerkleTree + KV 存储 | Ethereum(Account, Contract Storage)、Cosmos(Account) |
| 优势 | 说明 |
|---|---|
| 共识状态数据 | Merkle Root 放入 Block Header,保证共识一致性 |
| 状态数据可验证 | 支持 Merkle Proof,证明某个状态数据存在 |
| 易于回滚 | 分叉后直接切换到对应高度的树 |
| 历史数据查询 | 从对应高度的树查询 |
Merkle Tree:
Compact Trie(压缩字典树):
| 树 | 存储内容 | Root 位置 |
|---|---|---|
| Account Tree | 账户数据 | Block Header(state root) |
| Storage Tree | 合约存储数据 | 账户中(storage root) |
| Receipt Tree | 交易执行结果 | Block Header(receipt root) |
本质是 Merkle Tree + Compact Trie。
hash(address)hash(storage key)Patricia 树通过减少查找路径的长度来提高数据查找效率。
全称 Immutable AVL+ Tree,本质是 Merkle Tree + AVL 平衡二叉树。
| 特性 | IAVL | MPT |
|---|---|---|
| 树结构 | 二叉树 | 16 叉树 |
| 深度 | 较高 | 较低 |
| 磁盘 IO | 较多 | 较少 |
| 更新耗时 | 需要平衡操作,较高 | 较低 |
| 读写一致性 | 多次读/写耗时相同 | 取决于路径 |
| 确定性 | 相同数据不同插入顺序,树结构不同 | 相同数据结构相同 |
由于 IAVL 是平衡二叉树,相同数据不同写入顺序会导致不同的 root hash。这意味着:交易并行执行时打乱顺序,可能导致 stateRoot 不一致。
Cosmos 生态侧重轻量级和模块化设计,IAVL 与其 Tendermint 共识更好集成,且多次读写时间消耗一致。
当前 MPT 中验证一个账户的 witness(Merkle Proof)约 3KB,最坏可达 10KB。假设每块 6000 个账户更新,无状态客户端需下载约 18MB 数据。
Verkle Trie 可将 witness 降低至约 200B,大幅减少数据量。
| 节点类型 | 说明 |
|---|---|
| InnerNode | 中间节点,最多 256 个子节点 |
| LeafNode | 叶子节点,存储 256 个 32 字节值 |
| 影响 | 说明 |
|---|---|
| ✅ 状态数据可在 P2P 网络传递 | 无状态客户端成为可能 |
| ✅ 节点同步速度更快 | witness 数据大幅减小 |
| ✅ 运行节点硬件要求降低 | 可能在手机上运行 |
| ❌ 不直接提高 TPS | 主要改善状态验证 |
| ❌ 不直接降低 L2 成本 | L2 batch 不存储在 Verkle Tree 中 |
graph TB
subgraph "存储模型演进"
A["KV 存储<br/>Bitcoin UTXO"] --> B["MPT + KV<br/>Ethereum"]
B --> C["IAVL + KV<br/>Cosmos"]
B --> D["Verkle Trie<br/>Ethereum 未来"]
end
subgraph "核心权衡"
E["树宽度 ↑"] --> F["IO 次数 ↓"]
G["树深度 ↑"] --> H["IO 次数 ↑"]
I["确定性"] --> J["并行执行兼容性"]
end
区块链存储模型的核心是在查询效率、存储空间、共识一致性之间寻找平衡。MPT 适合以太坊的账户模型,IAVL 适合 Cosmos 的模块化架构,Verkle Trie 则是面向无状态客户端的未来方向。