在区块链技术领域,以太坊以其智能合约功能和图灵完备性而闻名,支撑起这个庞大去中心化应用的,并非仅仅是代码和共识机制,更有一套精妙的数据结构设计。三种核心的树状数据结构——状态树(State Tree)、交易树(Transactions Tree)和收据树(Receipts Tree)——共同构成了以太坊数据存储和检索的基石,它们共同维护了整个网络的状态,并确保了数据的完整性、可验证性和高效访问。
理解这“三棵树”,就是理解以太坊如何高效、安全地记录每一笔交易和每一个账户状态的关键。
状态树(State Tree)—— 以太坊的“世界账本”
状态树是这三种树中最为核心的一棵,它记录了以太坊在任何一个特定区块被确认后,整个网络的全局状态,你可以把它想象成以太坊的“世界账本”或“总账”。
- :它存储了所有账户的状态信息,这包括两类账户:
- 外部账户(EOA):由用户私钥控制的账户,记录其余额、nonce值等。
- 合约账户:由代码控制的账户,记录其代码、存储数据、余额等。
- 数据结构:它是一棵Merkle Patricia Trie(MPT,默克尔帕特里夏树),这是一种结合了Merkle树和Patricia Trie优化的数据结构。
- Merkle树的特性确保了任何数据的微小改动都会导致根哈希值的巨大变化,这使得我们可以高效地验证某个特定数据是否存在于树中,而不需要下载整棵树。
- Patricia Trie是一种更节省空间的压缩前缀树,特别适合存储键值对,并且能高效地进行查询和更新。
- 核心作用:
- 存储全局状态:它是以太坊当前所有账户状态的权威记录。
- 状态验证:轻量级节点(如手机钱包)只需下载状态树的根哈希,即可向全节点验证某个账户的余额或状态是否真实有效,无需同步全部数据。
- 驱动交易执行:每当一笔交易被执行时,它会读取和修改状态树中的数据,转账会修改发送方和接收方的余额。
状态树回答了“在当前这个时刻,以太坊上每个账户都是什么样子的?”这个问题。
交易树(Transactions Tree)—— 区块内的“交易流水账”
如果说状态树是静态的“世界账本”,那么交易树则是记录某个特定区块内所有交易活动的“流水账”。
- :它存储了包含在某个区块中的所有交易数据,每笔交易作为一个叶子节点被存储在树中。
- 数据结构:同样是一棵Merkle Patricia Trie (MPT)。
- 核心作用:
- 记录交易历史:它为每个区块内的所有交易提供了一个不可篡改的、有序的记录。
- 交易验证:任何人都可以通过计算交易树的根哈希,并将其与区块头中记录的值进行比对,来快速验证一笔交易是否确实被包含在该区块中,这对于轻节点验证交易历史至关重要。
- 数据完整性:与状态树一样,其Merkle结构保证了任何一笔交易的增删改都会导致根哈希的改变,从而保证了区块内交易数据的完整性。
交易树回答了“在区块N里,到底发生了哪些交易?”这个问题。
收据树(Receipts Tree)—— 交易的“回执证明”
收据树是相对抽象但非常重要的一棵树,它不直接存储交易数据,而是存储每笔交易执行后产生的“回执”或“收据”,这个收据是交易执行结果的证明。
- :每笔交易执行后,都会生成一个收据,并作为叶子节点存入收据树,收据中包含:
- 状态:交易是成功还是失败。
- gas 使用情况:交易消耗了多少 gas。
- 日志条目(Logs):这是智能合约与外部世界进行交互的关键,合约在执行过程中可以生成日志,用于记录事件、通知外部应用或触发其他操作。
- 合约地址:如果交易是创建新合约,收据中会包含新合约的地址。
- 数据结构:也是一棵Merkle Patricia Trie (MPT)。
- 核心作用:
- 提供执行证明:收据是交易执行的最终结果,它证明了“这笔交易已经执行过了,结果是成功/失败,消耗了这么多 gas,并产生了这些日志”。
- 支撑事件日志:对于去中心化应用(DApp)收据中的日志是智能合约向外部世界(如前端应用、数据分析服务)传递信息的主要方式,一个去中心化交易所会通过日志来记录每一笔成交。
- 轻节点验证:轻节点可以下载收据树的根哈希,并验证某个特定事件(如“我关注的NFT被转移了”)是否确实发生过,而无需重新执行整个交易或下载整个状态。
收据树回答了“这笔交易执行后,结果如何?它产生了哪些影响和日志?”这个问题。
三者如何协同工作?
这“三棵树”并非孤立存在,它们通过区块头紧密地联系在一起,形成一个强大的数据完整性保障体系:
- 一个区块被创建后,区块内的所有交易被组织成交易树,并生成一个唯一的根哈希。

- 这些交易被执行后,会更新以太坊的全局状态树,执行过程中产生的收据则被组织成收据树,并生成另一个唯一的根哈希。
- 这三个树的根哈希(状态树根、交易树根、收据树根)以及区块号、时间戳等其他元数据,共同被打包进区块头中。
这种设计的精妙之处在于,任何对历史数据的篡改——无论是修改一笔旧交易、伪造一个收据,还是改变一个账户状态——都会导致其所在区块的“三棵树”的根哈希发生变化,进而导致区块头哈希的改变,由于后续区块都基于前一个区块的哈希,这种篡改将导致整个链的断裂,从而在计算上变得不可能实现。
以太坊中的状态树、交易树和收据树,共同构成了一个精密、高效且安全的“三位一体”数据架构,它们分别扮演着“世界账本”、“交易流水账”和“执行回执”的角色,协同工作,确保了以太坊网络的每一个状态变化都被准确记录、高效验证且无法篡改,理解这三棵树,就是理解以太坊数据层设计的精髓,也是深入探索其上层应用生态的必经之路。