以太坊的三种树是什么?深入解析状态树、交易树与收据树

博主:neragonerago 2026-09-18 14:50:39 3

在区块链的世界里,如何在去中心化的环境中高效、安全地存储和验证数据,是一个核心问题,比特币引入了默克尔树(Merkle Tree)来解决交易数据的验证问题,而以太坊作为功能更加强大的智能合约平台,其数据结构也更加复杂,以太坊在默克尔树的基础上,结合帕特里夏树(Patricia Trie),设计了默克尔帕特里夏树(Merkle Patricia Tree,简称 MPT),并在区块中维护了三种关键的树结构:状态树、交易树和收据树,本文将详细解析这三种树的作用、结构与区别。

前置知识:什么是默克尔帕特里夏树(MPT)?

在了解三种树之前,先简单认识一下 MPT 这个基础数据结构。

  • 默克尔树的特性:所有数据通过哈希逐级向上汇聚,最终形成一个根哈希(Root Hash),任何底层数据的细微改动,都会导致根哈希的巨大变化,因此可以快速验证数据是否被篡改。
  • 帕特里夏树的特性:一种压缩前缀树,能够高效地进行键值对(Key-Value)的插入、删除和查询,避免存储空间的浪费。

MPT 将两者结合,既支持快速的数据检索与更新,又能提供密码学层面的数据完整性证明,以太坊的三种树,本质上都是 MPT 的具体应用。

状态树(State Trie)

作用

状态树是整个以太坊系统中唯一且全局的树,记录了以太坊网络中所有账户的当前状态,无论你是在钱包里查看 ETH 余额,还是调用智能合约读取变量,背后查询的都是状态树中的数据。

状态树的键(Key)是账户地址的哈希(keccak256(地址)),值(Value)是经过 RLP 编码的账户信息,包含两个主要部分:

普通账户(外部账户)包含:

  • Nonce:该账户发出过的交易数量
  • Balance:账户的 ETH 余额

合约账户包含:

  • Nonce:合约创建的合约数量
  • Balance:合约持有的 ETH 余额
  • StorageRoot:合约存储树的根哈希(合约的所有状态变量都存储在这棵子树中)
  • CodeHash:合约代码的哈希

关键特点

  • 状态树的根哈希(stateRoot)存储在每个区块头中
  • 每当有交易执行、账户余额变化时,状态树都会更新
  • 所有全节点维护同一份状态树,通过 stateRoot 保证全球状态的一致性

交易树(Transaction Trie)

作用

交易树记录了单个区块内所有交易,是区块数据的组织形式。

  • :交易在区块中的序号(RLP 编码后的索引,如 0, 1, 2...)
  • :交易的完整内容,包括发送者、接收者、金额、Gas 上限、签名数据等

关键特点

  • 交易树的根哈希(transactionsRoot)存储在区块头中
  • 一旦区块被打包确认,交易树就不可修改——这与状态树“不断更新”的特性形成鲜明对比
  • 每个区块都有一棵独立的交易树
  • 支持默克尔证明:轻节点无需下载完整区块,只需凭借区块头中的根哈希,就能验证某笔交易是否真的存在于某个区块中

收据树(Receipt Trie)

作用

收据树存储的是每笔交易执行后的结果回执,交易执行后会产生哪些日志、消耗了多少 Gas、是否执行成功,这些信息都记录在收据树中。

  • :与交易树对应,同样是交易的序号
  • :交易回执,主要包含:
    • 交易执行后的状态(成功或失败,如 EIP-658 引入的状态码)
    • 交易消耗的累计 Gas(Cumulative Gas Used)
    • 交易过程中产生的日志(Logs),例如合约触发的事件(Event)
    • Bloom 过滤器:由日志信息生成的过滤器,可快速判断某交易是否包含特定日志,而无需读取完整回执

关键特点

  • 收据树的根哈希(receiptsRoot)存储在区块头中
  • 与交易树一样,收据树在区块生成后不可修改
  • 日志功能对 DApp 开发至关重要:前端应用和区块链浏览器正是通过查询日志来监听智能合约事件(如转账、铸造 NFT 等)
  • Bloom 过滤器让轻节点能高效地检索与特定地址或主题相关的事件

三种树的核心区别对比

维度 状态树 交易树 收据树
范围 全局唯一 每个区块一棵 每个区块一棵
账户地址哈希 交易序号 交易序号
账户状态 交易详情 交易执行回执
可变性 随交易不断更新 区块生成后不可变 区块生成后不可变
根哈希字段 stateRoot transactionsRoot receiptsRoot
主要用途 查询余额与合约状态 验证交易存在性 查询执行结果与事件日志

这种设计的意义

以太坊为什么要在每个区块头中同时保存三个树的根哈希?这体现了精妙的系统设计:

支持轻节点(SPV)验证 轻节点只需下载区块头(包含三个根哈希),就能通过默克尔证明验证:

  • 某个账户的当前余额(状态树证明)
  • 某笔
The End

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