这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理,以及部分延伸的思考。文末附有公开课链接。
本文主要回答以下3个问题:
1、以太坊状态树包含什么内容?
2、以太坊状态树的数据结构是怎么样的?有什么特征?
3、状态树中为什么要保留历史记录?
以太坊的账户地址160位,20个字节(1个字节是8bits),40个16进制的数。
账户内容包括(余额,交易次数),(代码,存储)
比特币虽然没排序,但是顺序唯一,是由有记账权,发布节点的人决定的。
如果以太坊不排序,难以查找,难以保持一致性,顺序不一致的情况下,各地算出的哈希值可能不一样。
Trie,retrieval树形结构

特点1:每个节点的分支数目,取决于key值的取值范围,英文字母26个,加一个结束位;
特点2:查找效率取决于key的范围,越广,查找效率越低
特点3:只要地址不一样,就不会出现碰撞
特点4:不论什么顺序插入,结构都一样
特点5:和更新有关,局部变化
缺点1:浪费存储
Patricia tree/trie 压缩过的trie结构

好处:树的长度缩短,占的内存变小
键值分布比较稀疏的时候,压缩trie结构比较好
和普通的结构的区别是,里面的内容是哈希指针
用处1:可以防止篡改
用处2:可以查账户余额
用处3:可以证明non membership 所在的分支进行查询

每个合约账户的存储都是一个小的MPT
为什么数据中要保留历史记录?
第一,为了audit
第二,临时性的分叉是常态,出现之后roll back,undo当前的交易,尤其是复杂的智能合约,必须保持历史状态才能回滚。

parenthash前一个区块的块头的哈希值
unclehash
Root 状态树的根哈希值
txhash交易数的哈希值
receipthash收据数的哈希值

可以有多个叔父区块,uncles 是个数组,叔父区块会在后面的内容详细说明。
视频课程原文链接
