全局状态
我们知道以太坊的全局状态由帐户地址和帐户状态之间的映射组成。此映射存储在称为梅克尔帕特里夏树(Merkle Patricia tree)的数据结构中。
梅克尔树(Merkle tree,也叫Markle trie,下文统一叫Markle trie)是一种由一组节点组成的二叉树,它由以下部分组成:
- 包含底层数据的,位于树底部的大量叶节点
- 一组中间节点,中间节点的每个节点是其余两个子节点的哈希
- 单个根节点,也由其两个子节点的哈希形成,表示树的顶部
树底部的数据是通过将我们要存储的数据拆分成块,然后把块拆分成桶,最后取每个桶的哈希并重复相同的过程,直到剩余的哈希总数变为只有一个:根哈希(Root hash)。
这棵树需要为每条存储的数据存储一个键值。从树的根节点开始,这个键值决定子节点是哪个,从而得到对应的值,这个值存储在叶子节点中。在以太坊的例子中,状态树的键/值映射在地址和它们关联的账户之间,包括每个账户的balance、nonce、codeHash 和 storageRoot(其中storageRoot本身就是一棵树)。
资源:以太坊白皮书
同样的trie结构也能够存储交易和收据。更具体地说,每个块都有一个“头”,它存储三个不同Merkle trie结构的根节点的哈希,包括:
- State Trie
- Transaction Trie
- Receipts Trie