在知乎等中文技术社区,我们经常能看到一些关于以太坊底层技术的高频提问,其中有一个问题尤其具有代表性:“以太坊有三种树吗?” 这个问题的答案,既不是简单的“是”,也不是简单的“否”,它触及了以太坊数据模型的核心,也暴露了初学者在学习路径上容易遇到的混淆点。

我们就来深入探讨一下这个问题,彻底搞清楚以太坊究竟“种”了几棵“树”。

“三种树”说法的来源:没错,是三种!

我们必须承认,“以太坊有三种树”这个说法并非空穴来风,它源于以太坊的黄皮书(Ethereum Yellow Paper)中对状态存储模型的精确描述,这三种树分别是:

  1. 状态树
  2. 交易树
  3. 收据树

这三棵树共同构成了以太坊中一个“区块”的核心数据结构,它们都是Merkle Patricia Trie (MPT,默克尔帕特里夏树) 的具体实例,你可以把它们想象成一个大仓库(区块)里的三个不同功能的货架,每个货架都用自己的独特方式(哈希算法)来整理和标记货物。

状态树 - 世界状态的“总账本”

  • 作用:这是以太坊最重要的一棵树,它记录了整个以太坊网络在某个特定时刻的全球状态,这个状态包括了所有账户的余额、代码、存储内容等。
  • 每个账户(无论是外部账户EOA还是合约账户)在状态树中都对应一个叶子节点,树的根哈希值(State Root)被写入区块头中,它代表了整个世界状态的“指纹”,只要根哈希不变,就意味着全球状态没有发生改变。
  • 比喻:它就像一个国家的“不动产登记中心”或“中央银行的总账”,记录了谁拥有多少钱,谁有什么智能合约。

交易树 - 区块内交易的“流水账”

  • 作用:这棵树记录了当前区块内包含的所有交易的具体数据。
  • 区块里的每一笔交易都是这棵树的一个叶子节点,通过这棵树,我们可以完整地、不可篡改地追溯一个区块内的所有交易顺序和内容。
  • 比喻:它就像是这个区块的“银行流水单”或“会议记录”,清晰地列出了本区块内发生的所有操作。

交易收据树 - 交易结果的“回执单”随机配图