以太坊学习三: Merkle树和验证

Merkle树是一种二叉树结构,用于快速比较和定位数据变化。在以太坊中,MPT(Merkle-PatriciaTrie)作为状态树使用,包含空节点、叶子节点、扩展节点和分支节点,优化了数据存储和检索效率。状态树、交易树和收据树是构成以太坊区块头的关键部分,分别存储账户状态、交易记录和交易收据。

Merkle tree简介

   Merkle树又称为哈希树,是一种二叉树,由一个根节点、若干中间节点和一组叶节点组成。最底层的叶节点存储数据,在它之上的一层节点为它们对应的Hash值,中间节点是它下面两个子节点的Hash值,根节点是最后顶层的Hash值,这个一般成为Merkle根。
在这里插入图片描述
  Merkle树的层层Hash计算,任何底层叶节点或者说某个节点的数据变动都会传递到父亲节点,并直达树根。当叶子节点发生数据改变时,如果要比较两个集合的数据是否相同,则只需比较两次数据的树根即可,若底层叶节点数据相同,则树根相同;反之,树根便不相同。因此Merkle树的典型应用场景具体如下:

  • 快速比较大量数据:当两个Merkle树根相同时,则意味着所代表的数据必然相同
  • 快速定位变更:如果上图L1的数据被修改,则hi影响到Hash0-0,Hash0 和Root。因此沿着Root->Hash0->Hash0-0,可以快速定位到发生改变的L1。

MPT 状态树

  Trie树是一种有序的树形结构,也被称为前缀树或者字典树,一般用于保存关联数组,其中的键通常是字符串,键不保存在节点中,而是由节点在树中的位置决定,根节点对应空字符串,键对应的值标注在节点之下。

  Patricia树是一种节省空间的压缩前缀树。相当于Trie树存在的缺点,每个前置节点仅能表示一个字母,不管key和其它key有没有共享内容,key越长,树的深度也就越长。Patricia树的主要改进在于如果存在一个父节点只有一个子节点,那么这个父节点将与其子节点合并,这样可以减少Trie中树的深度,加快搜索节点速度,同时也减少了空间的消耗。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值