以太坊的三种核心树结构,状态、交易与收据的基石
在以太坊的底层架构中,树结构(Tree)是保障数据完整性、实现高效状态同步与验证的核心组件,以太坊通过三种关键的Merkle Patricia Trie(Merkle Patricia树,简称MPT)——状态树(State Trie)、交易树(Transaction Trie) 和收据树(Receipt Trie),构建了从账户状态到交易执行的全链路数据验证体系,这三种树结构相互关联、协同工作,共同支撑了以太坊作为“世界计算机”的可靠运行。
状态树(State Trie):全局状态的“指纹库”
定义与作用
状态树是以太坊存储全局状态的核心数据结构,它记录了网络中所有账户(EOA外部账户和合约账户)的实时状态,包括账户余额(balance)、随机数(nonce)、代码(code)和存储根(storage root),状态树是以太坊“世界状态”的“总账本”,任何账户状态的变更(如转账、合约调用)都会反映在状态树中。
结构特点
状态树采用Merkle Patricia Trie实现,这是一种结合了Merkle树(哈希验证)和Patricia Trie(前缀压缩优化的前缀树)的混合结构:
- 前缀压缩:Patricia Trie通过共享公共前缀减少节点存储开销,尤其适合处理以太坊中大量地址这类具有公共前缀的键(账户地址)。
- 哈希验证:每个节点都通过哈希值计算子树的根哈希,任何子节点的修改都会导致父节点哈希变化,最终影响整棵树的根哈希(状态根),这使得状态树具备“抗篡改性”——即使单个账户数据被修改,状态根也会立即暴露异常。
关键机制
状态树的根哈希(State Root)会被记录在每个区块的区块头中,当节点同步数据时,只需比较状态根即可快速验证全局状态的完整性,无需下载全部账户数据,极大提升了同步效率,轻节点(Light Client)通过获取状态根,即可向全节点请求特定账户的证明(Proof),验证账户状态的真实性。
交易树(Transaction Trie):交易历史的“索引册”
定义与作用
交易树用于存储单个区块内的所有交易列表,是区块数据的重要组成部分,每个区块都包含一棵独立的交易树,其根哈希(Transaction Root)同样记录在区块头中,交易树的作用是:
- 交易顺序与完整性验证:确保区块中的交易按特定顺序排列,且交易数据未被篡改(如交易内容、签名被修改)。
- 轻节点同步支持:轻节点可通过交易根快速验证区块内交易的存在性,无需下载全部交易详情。
结构特点
与状态树类似,交易树也基于Merkle Patricia Trie构建,但其键(key)是交易在区块中的索引(如0x00、0x01),值(value)是交易数据的RLP(Recursive Length Prefix)编码,交易树的哈希验证机制确保了:
- 若交易顺序或内容变化,交易根哈希会随之改变;
- 轻节点可仅通过交易索引和交易根,验证某笔交易是否属于该区块(通过Merkle Proof)。
示例场景
假设一个区块包含3笔交易A、B、C,交易树会以0x00、0x01、0x02为键,分别存储A、B、C的RLP编码,通过计算子树哈希,最终得到交易根哈希,若交易B的内容被篡改,其子树哈希变化,最终导致交易根哈希与区块头中的记录不匹配,节点即可识别该区块无效。
三
推荐阅读