一文读懂以太坊三棵树,状态树、交易树与收据树的核心区别

博主:neragonerago 2026-10-11 07:00:27 2

在以太坊的世界里,有三位低调却至关重要的“主角”——它们就是状态树(State Trie)、交易树(Transaction Trie)和收据树(Receipt Trie),这三棵树共同构成了以太坊数据存储与验证体系的基石,它们的根哈希都被记录在区块头中,是轻节点验证、Merkle证明等技术得以实现的前提,很多初学者容易混淆这三者的作用,本文将深入剖析它们的核心区别。

共同的技术底座:Merkle Patricia Trie

在展开区别之前,先明确一点:这三棵树都采用同一种数据结构——Merkle Patricia Trie(MPT,默克尔帕特里夏树),MPT 结合了默克尔树的可验证性与帕特里夏树的高效查找能力,具有以下特性: 的改动都会导致根哈希变化,天然具备防篡改能力;

  • 支持快速的存在性证明(Merkle Proof)和不存在性证明;
  • 通过路径压缩,提高存储与查询效率。

结构相同,但三棵树承载的内容与使命却截然不同。

状态树:全球账户的“总账本”

状态树保存的是以太坊的整个世界状态(World State),它映射了所有账户地址到账户状态的对应关系。

核心特点: 键为账户地址(160位),值为账户信息,包括 nonce(交易计数)、balance(余额)、storageRoot(合约存储根)、codeHash(合约代码哈希)。 2. 范围:包含全网所有账户,无论这些账户在当前区块中是否有交易发生。 3. 持久性:这是三棵树中最关键的区别——状态树不会随着区块重建,而是在原有基础上不断更新、追加与修改,是一个持续演化的全局结构。 4. 体积:由于包含全部账户,状态树极其庞大,这也是以太坊“状态膨胀”问题的根源。

交易树:区块内交易的“清单”

交易树记录的是单个区块内所包含的全部交易。

核心特点: 键为交易的索引号(RLP 编码,如 0、1、2……),值为交易的具体内容(发送方、接收方、金额、gas 等)。 2. 范围:仅包含当前区块的交易,与其他区块无关。 3. 生命周期:每个新区块产生时,交易树都会从零重新构建;一旦区块生成,这棵树便不可修改。 4. 用途:任何人可以通过 Merkle 证明验证“某笔交易确实包含在某个区块中”,这是轻客户端工作的基础。

收据树:交易执行结果的“回执单”

收据树保存的是区块内每笔交易执行后的结果数据。

核心特点: 每张收据包含交易执行后的累计 gas 消耗、执行状态(成功或回滚)、日志(Logs,即合约触发的事件)以及布隆过滤器(Bloom Filter)。 2. 范围与生命周期:与交易树一致,仅针对当前区块,每个区块重建一次。 3. 用途:轻节点无需执行交易,仅凭收据树就能验证事件日志是否真实发生,布隆过滤器让日志检索效率极高,各类区块链浏览器展示的事件数据,源头正是收据树。

核心区别对比一览表

维度 状态树 交易树 收据树
全网所有账户的状态 区块内的所有交易 每笔交易的执行结果与日志
键(Key) 账户地址 交易索引(RLP编码) 交易索引(RLP编码)
包含范围 全局,所有账户 仅限单个区块 仅限单个区块
生命周期 持久存在,持续更新 每个区块重建一次 每个区块重建一次
可变性 频繁增删改 建树后不可变 建树后不可变
树根哈希 stateRoot transactionsRoot receiptsRoot
典型用途 查询余额、验证账户状态 验证交易是否被打包 验证事件日志、支持轻节点

用一个类比总结

我们可以把以太坊比作一家银行:

  • 状态树相当于银行的总账本,记录着所有客户的实时余额,每笔业务发生后都会更新,且永不丢弃;
  • **交易树
The End

发布于:2026-10-11,除非注明,否则均为区块链社区- 欧亿APP下载原创文章,转载请注明出处。