当我们谈论以太坊的数据结构时,“树”是一个不可或缺的概念,它们不仅仅是技术细节,更是保障区块链安全、高效和可扩展性的核心机制,以太坊究竟有“三种树”吗?答案是肯定的,但理解这“三种树”具体指什么,以及它们各自扮演的角色,是深入理解以太坊工作原理的关键,这三种树分别是:状态树、交易树和收据树,它们共同构成了以太坊区块头中默克尔化 Patricia Trie(Merkle Patricia Trie, MPT)结构的三大支柱。
状态树(State Tree / World State Tree)
状态树是以太坊数据结构的“总账”,记录了整个以太坊网络在特定时间点的全局状态,这个状态包含了所有账户信息,无论是外部拥有账户(EOA,由用户私钥控制)还是合约账户(由代码控制)。
- :
- 每个账户的余额(Ether数量)。
- 每个账户的随机数(用于确保交易顺序的唯一性)。
- 每个合约账户的存储代码。
- 每个合约账户的存储数据(即变量状态)。
- 作用:状态树是整个网络的“快照”,当你查询一个地址的余额或一个合约的变量时,你实际上就是在查询当前状态树的叶子节点,它是所有链上交互的基础。
- 动态性:状态树是动态变化的,每当有新的交易被确认并执行,它会改变一个或多个账户的状态(转账会改变发送方和接收方的余额,合约调用会改变合约的存储数据),状态树就会随之更新,生成一个新的“根哈希值”,这个新的根哈希值会被写入新区块的区块头中,成为该区块状态不可篡改的证据。
交易树(Transactions Tree)
交易树记录了被包含在某个区块中的所有交易列表。
- :
每一笔完整交易的数据,包括发送方、接收方、价值、数据载荷、签名等。
- 作用:交易树为区块内的所有交易提供了一个可验证、不可篡改的记录,它就像一个区块的“流水账”,清晰地记录了该区块内发生的所有价值转移和智能合约调用请求。
- 验证性:通过交易树的默克尔根,节点可以高效地验证某笔交易是否确实被包含在某个特定的区块中,而无需下载整个区块的所有交易数据,这对于轻客户端和链下扩容方案(如Rollups)至关重要。
收据树(Receipts Tree)
收据树是以太坊中一个相对不那么直观但至关重要的部分,它记录了每笔交易执行后的结果,而不是交易本身。
- :
- 状态码:交易成功还是失败。
- 消耗的Gas:执行该交易所消耗的燃料量。
