Merkle树与Tire树

281 阅读2分钟

以太坊中的三种树

状态树

  • 以太坊中的中状态树包含键值映射
    • 其中键就是地址,值是包括账户的声明、账户余额、nonce、代码及每一个账户的存储
    • 因为账户余额和nonce经常改变,新的账户会频繁插入,存储的键也会经常被插入及删除,所以状态树需要经常更新
  • 根据以上的需求,以太坊去优化树
    • 保证能在一次插入、更新、删除操作后,从所改变接地啊你快速计算到树根,不需要重新计算整棵树的Hash
    • 可以简单理解为状态树中每个节点有16个孩子节点,每个叶节点表示一个账户,这些叶节点的父节点由一叶节点的散列组成
    • 键是账户地址、值主要是nonce/balance/codeHash/storageRoot
      • 其中nonce是账户交易的序数

      • balance账户余额

      • codeHash是代码的散列治

      • storageRoot是另一棵树的根节点

  • 以太坊是一个以账户为基础的区块链应用平台
    • 账户的状态不是直接存储在每个区块中

    • 所有的账户状态都是以状态数据存储在以太坊节点中

交易树

  • 每个区块都要一颗独立的交易树
    • 区块中的交易顺序大部分都是由矿工来决定的
    • 矿工一般会根据交易的GasPricenonce对交易的nonce来排序
      • 每个账户的交易完成后,再通过比较每个账户的第一条交易选出最高价格的交易,通过堆-heap来实现

收据树

  • 每个区块都有自己的收据树,其不需要更新
    • 收据树代表每笔交易的相应数据
    • 其键是索引编号,用来指引这条收据相应的交易位置
    • 值为收据的内容