《区块链技术与应用》10 ETH 状态树

这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理,以及部分延伸的思考。文末附有公开课链接。

本文主要回答以下3个问题:

1、以太坊状态树包含什么内容?

2、以太坊状态树的数据结构是怎么样的?有什么特征?

3、状态树中为什么要保留历史记录?

前述

以太坊的账户地址160位,20个字节(1个字节是8bits),40个16进制的数。

账户内容包括(余额,交易次数),(代码,存储)

比特币虽然没排序,但是顺序唯一,是由有记账权,发布节点的人决定的。

如果以太坊不排序,难以查找,难以保持一致性,顺序不一致的情况下,各地算出的哈希值可能不一样。

MPT结构

Trie,retrieval树形结构

post image

特点1:每个节点的分支数目,取决于key值的取值范围,英文字母26个,加一个结束位;

特点2:查找效率取决于key的范围,越广,查找效率越低

特点3:只要地址不一样,就不会出现碰撞

特点4:不论什么顺序插入,结构都一样

特点5:和更新有关,局部变化

缺点1:浪费存储

Patricia tree/trie 压缩过的trie结构

post image

好处:树的长度缩短,占的内存变小

键值分布比较稀疏的时候,压缩trie结构比较好

Merkle patricia tree

和普通的结构的区别是,里面的内容是哈希指针

用处1:可以防止篡改

用处2:可以查账户余额

用处3:可以证明non membership 所在的分支进行查询

以太坊是modified MPT结构

post image

每个合约账户的存储都是一个小的MPT

为什么数据中要保留历史记录?

第一,为了audit

第二,临时性的分叉是常态,出现之后roll back,undo当前的交易,尤其是复杂的智能合约,必须保持历史状态才能回滚。

post image
  • parenthash前一个区块的块头的哈希值

  • unclehash

  • Root 状态树的根哈希值

  • txhash交易数的哈希值

  • receipthash收据数的哈希值

post image

可以有多个叔父区块,uncles 是个数组,叔父区块会在后面的内容详细说明。

视频课程原文链接

https://www.bilibili.com/video/BV1Vt411X7JF?spm_id_from=333.337.search-card.all.click&vd_source=6807dc8dcddb18fe6db9d949c12b670c