在以太坊的底层技术架构中,“树”(Tree)结构扮演着至关重要的角色,它们以高效、安全的方式组织和管理链上数据,确保了网络的去中心化、可验证性和一致性,以太坊中最核心的三种树分别是状态树(State Tree)、交易树(Transactions Tree)和收据树(Receipts Tree),它们共同构成了每个区块的“数据骨架”,本文将通过概念解析与图片化的形式,带你直观理解这三种树的结构与作用。
状态树(State Tree):以太坊的“世界状态账本”
核心概念
状态树是以太坊中最庞大、最核心的树结构,它记录了整个网络在某一时刻的“世界状态”(World State)——即所有账户(外部账户合约账户)的实时数据,包括账户余额、nonce、代码存储等,状态树就是以太坊的“总账本”,每一笔交易都会通过改变账户状态来更新这棵树。
状态树采用Merkle Patricia树(MPT)实现,这是一种结合了Merkle树(确保数据完整性)和Patricia Trie(高效前缀压缩)的数据结构,其优势在于:
- 高效查询:通过账户地址的前缀快速定位到具体账户数据;
- 轻量验证:只需验证少量节点即可确认账户状态是否被篡改;
- 动态更新:支持频繁的增删改操作,且不影响整体结构稳定性。

结构与图片解析
想象一棵从上至下生长的树,最顶层是根节点(Root Hash),每个区块头都会记录这个根节点的哈希值(称为“状态根”),根节点下通过分支节点(Branch Node)连接,最终通过扩展节点(Extension Node)和值节点(Value Node)定位到具体账户数据。
图片示意(文字描述可视化场景):
[状态树根节点]
/ | \ \
[分支节点] [分支节点] [分支节点] ...
/ \ / \ / \
[扩展节点] [值节点] [扩展节点] [值节点] ...
| | | |
[账户地址前缀] [账户A数据] [账户地址前缀] [账户B数据] ...
账户A的数据可能包含:{balance: 100 ETH, nonce: 1, code: "0x..."},当账户A收到一笔转账后,其对应的“值节点”数据会更新,整个状态树的根哈希也会随之改变,新区块会记录这个新的根哈希,确保状态可追溯。
交易树(Transactions Tree):每笔交易的“历史档案”
核心概念
交易树存储了某个区块内包含的所有交易数据,包括发送方地址、接收方地址、转账金额、手续费(gas fee)、交易数据(calldata)等,与状态树不同,交易树记录的是“过程数据”——即区块内发生的所有交易行为,而非最终结果。
同样采用Merkle Patricia树结构,其根哈希(称为“交易根”)会被记录在区块头中,交易树的主要作用是:
- 交易可追溯性:任何人可以通过交易根哈希验证区块内交易列表的完整性;
- 轻客户端支持:轻节点只需下载交易根哈希,即可通过零知识证明等方式验证交易是否存在,无需同步全部交易数据。
结构与图片解析
交易树的“叶子节点”直接存储每笔交易的完整数据,通过分支节点组织成树状结构,由于区块内的交易数量是固定的(由区块 gas 限制决定),交易树的结构相对规整。
图片示意(文字描述可视化场景):
[交易树根节点]
/ | \ \ \
[分支节点] [分支节点] [分支节点] [分支节点] [分支节点]
/ \ / \ / \ / \ / \
[交易1数据] [交易2数据] [交易3数据] [交易4数据] [交易5数据] ...
交易1数据可能包含:{from: "0xA...", to: "0xB...", value: 10 ETH, gasPrice: 20 Gwei},当区块被打包时,所有交易按顺序插入交易树,生成唯一的交易根哈希,成为区块头的“身份标识”之一。
收据树(Receipts Tree):交易结果的“回执记录”
核心概念
收据树存储了每笔交易的执行结果,即“收据”(Receipt),收据不是交易本身的数据,而是交易执行后的“回执”,包含关键信息:
- 状态码:交易是否成功(如1表示成功,0表示失败);
- 日志 bloom 过滤器:用于快速查询交易产生的日志(Log);
- 日志列表:交易触发的所有事件(如合约函数调用、状态变更通知等);
- gas 使用量:交易消耗的 gas 总量。
收据树同样基于Merkle Patricia树构建,其根哈希(“收据根”)也会记录在区块头中,如果说交易树是“行为记录”,那收据树就是“结果报告”,为开发者、用户和监管方提供了交易执行结果的验证途径。
结构与图片解析
收据树的叶子节点存储每笔交易对应的收据数据,结构与交易树类似,但内容更侧重“结果”。
图片示意(文字描述可视化场景):```
[收据树根节点]
/ | \ \ \
[分支节点] [分支节点] [分支节点] [分支节点] [分支节点]
/ \ / \ / \ / \ / \
[收据1数据] [收据2数据] [收据3数据] [收据4数据] [收据5数据] ...
收据1数据可能包含:`{status: 1, gasUsed: 21000, logs: [{address: "0xC...", topics: [...], data: "0x..."}]}`,如果交易是向合约转账并触发事件,收据中的“logs”会记录该事件,方便后续通过日志 bloom 过滤器快速检索。
### 三种树的协同:以太坊的“数据完整性三角”
状态树、交易树和收据树并非孤立存在,而是通过区块头紧密关联:每个区块头会同时记录**状态根、交易根、收据根**这三个哈希值,这种设计形成了一个“数据完整性三角”:
- **交易树**保证“交易行为”未被篡改;
- **收据树**证明“交易结果”真实可信;
- **状态树**展示“世界状态”的最新变化。
任何对历史区块数据的恶意修改,都会导致这三个根哈希与网络中的共识数据不一致,从而被其他节点拒绝,这正是以太坊去中心化安全性的核心保障。
### 树结构背后的“信任机器”
从状态树的“实时账本”到交易树的“行为档案”,再到收据树的“结果回执”,以太坊的三种树结构以高效、可验证的方式,构建了链上数据的信任基石,虽然这些技术细节对普通用户而言较为抽象,但正是它们支撑着以太坊作为“世界计算机”的稳定运行,通过理解这三种树,我们不仅能更深入地认识以太坊的技术本质,也能感受到区块链技术“数据不可篡改、过程可追溯”的独特魅力。