- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
以太坊中的三种树
状态树
- 以太坊中的中状态树包含键值映射
- 其中键就是
地址,值是包括账户的声明、账户余额、nonce、代码及每一个账户的存储 - 因为账户余额和
nonce经常改变,新的账户会频繁插入,存储的键也会经常被插入及删除,所以状态树需要经常更新
- 其中键就是
- 根据以上的需求,以太坊去优化树
- 保证能在一次插入、更新、删除操作后,从所改变接地啊你快速计算到树根,不需要重新计算整棵树的
Hash - 可以简单理解为状态树中每个节点有16个孩子节点,每个叶节点表示一个账户,这些叶节点的父节点由一叶节点的散列组成
- 键是账户地址、值主要是
nonce/balance/codeHash/storageRoot-
其中
nonce是账户交易的序数 -
balance账户余额 -
codeHash是代码的散列治 -
storageRoot是另一棵树的根节点
-
- 保证能在一次插入、更新、删除操作后,从所改变接地啊你快速计算到树根,不需要重新计算整棵树的
- 以太坊是一个以账户为基础的区块链应用平台
-
账户的状态不是直接存储在每个区块中
-
所有的账户状态都是以
状态数据存储在以太坊节点中
-
交易树
- 每个区块都要一颗独立的交易树
- 区块中的交易顺序大部分都是由
矿工来决定的 矿工一般会根据交易的GasPrice和nonce对交易的nonce来排序- 每个账户的交易完成后,再通过比较每个账户的第一条交易选出最高价格的交易,通过堆-
heap来实现
- 每个账户的交易完成后,再通过比较每个账户的第一条交易选出最高价格的交易,通过堆-
- 区块中的交易顺序大部分都是由
收据树
- 每个区块都有自己的收据树,其不需要更新
- 收据树代表每笔交易的相应数据
- 其键是索引编号,用来指引这条收据相应的交易位置
- 值为收据的内容