Ethereum学习之路 —— 状态树

本文介绍了以太坊状态树的设计思路,主要聚焦于Merkle-Patricia Trie(MPT)。MPT是为了解决账户地址到账户状态映射的问题,它基于字典树和Patricia树的优点,通过哈希指针提高了数据验证效率。状态树的根哈希用于验证账户数据的完整性和防止篡改。在以太坊中,每次状态变更会创建新的分支,保留历史状态以便在分叉时回滚。状态树中,账户的状态通过RLP序列化后存储,与比特币的Merkle Tree不同,以太坊的状态树不采用全节点打包发布的方式,以减少不必要的存储和计算成本。
摘要由CSDN通过智能技术生成

状态树

要设计一种什么数据结构呢?要完成账户地址到账户状态的映射。
以太坊的账户地址是160位的,也就是20个字节,一般表示成40个16进制的数。
状态时指外部账户和合约账户的balance、nonce等。

MPT

了解MPT之前,先了解下trie。

trie: 字典树。假设有如下几个单词:General,Genesis,Go,God,Good,使用 trie 这种数据结构产生的树如下:

trie的特点

  • 优点
    • 由于以太坊的地址是40个16进制的数组成,所以头节点有0~f加上结束标志位总共17个
    • 因为地址都是40个16进制的数,所以纵向的长度是40。
    • 两个地址映射到哈希表中,可能会出现哈希碰撞,但trie中,两个不同的地址必定映射到两个不同的路径。
    • 给定一组输入,不论什么顺序,最后构造出的数都是一样的。
    • 更新操作时,局部性很好,只需访问输入地址所映射的节点即可
  • 缺点
    • 中间节点(如E、N、E)存储浪费

如何解决 trie 中的缺点呢?这里用到了 Patricia tree(压缩前缀树)。上面的例子进行路径压缩后,得到的数据结构如下:

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值