在区块链技术领域,以太坊以其智能合约功能和图灵完备性而闻名,支撑起这个庞大去中心化应用的,并非仅仅是代码和共识机制,更有一套精妙的数据结构设计。三种核心的树状数据结构——状态树(State Tree)、交易树(Transactions Tree)和收据树(Receipts Tree)——共同构成了以太坊数据存储和检索的基石,它们共同维护了整个网络的状态,并确保了数据的完整性、可验证性和高效访问。

理解这“三棵树”,就是理解以太坊如何高效、安全地记录每一笔交易和每一个账户状态的关键。

状态树(State Tree)—— 以太坊的“世界账本”

状态树是这三种树中最为核心的一棵,它记录了以太坊在任何一个特定区块被确认后,整个网络的全局状态,你可以把它想象成以太坊的“世界账本”或“总账”。

  • :它存储了所有账户的状态信息,这包括两类账户:
    • 外部账户(EOA):由用户私钥控制的账户,记录其余额、nonce值等。
    • 合约账户:由代码控制的账户,记录其代码、存储数据、余额等。
  • 数据结构:它是一棵Merkle Patricia Trie(MPT,默克尔帕特里夏树),这是一种结合了Merkle树和Patricia Trie优化的数据结构。
    • Merkle树的特性确保了任何数据的微小改动都会导致根哈希值的巨大变化,这使得我们可以高效地验证某个特定数据是否存在于树中,而不需要下载整棵树。
    • Patricia Trie是一种更节省空间的压缩前缀树,特别适合存储键值对,并且能高效地进行查询和更新。
  • 核心作用
    1. 存储全局状态:它是以太坊当前所有账户状态的权威记录。
    2. 状态验证:轻量级节点(如手机钱包)只需下载状态树的根哈希,即可向全节点验证某个账户的余额或状态是否真实有效,无需同步全部数据。
    3. 驱动交易执行:每当一笔交易被执行时,它会读取和修改状态树中的数据,转账会修改发送方和接收方的余额。

状态树回答了“在当前这个时刻,以太坊上每个账户都是什么样子的?”这个问题。

交易树(Transactions Tree)—— 区块内的“交易流水账”

如果说状态树是静态的“世界账本”,那么交易树则是记录某个特定区块内所有交易活动的“流水账”。

  • :它存储了包含在某个区块中的所有交易数据,每笔交易作为一个叶子节点被存储在树中。
  • 数据结构:同样是一棵Merkle Patricia Trie (MPT)
  • 核心作用
    1. 记录交易历史:它为每个区块内的所有交易提供了一个不可篡改的、有序的记录。
    2. 随机配图