# 《区块链技术与应用》10 ETH 状态树 **Published by:** [Minna Yu](https://paragraph.com/@minna-yu/) **Published on:** 2022-06-18 **URL:** https://paragraph.com/@minna-yu/10-eth ## Content 这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理,以及部分延伸的思考。文末附有公开课链接。 本文主要回答以下3个问题: 1、以太坊状态树包含什么内容? 2、以太坊状态树的数据结构是怎么样的?有什么特征? 3、状态树中为什么要保留历史记录? 前述 以太坊的账户地址160位,20个字节(1个字节是8bits),40个16进制的数。 账户内容包括(余额,交易次数),(代码,存储) 比特币虽然没排序,但是顺序唯一,是由有记账权,发布节点的人决定的。 如果以太坊不排序,难以查找,难以保持一致性,顺序不一致的情况下,各地算出的哈希值可能不一样。 MPT结构 Trie,retrieval树形结构 特点1:每个节点的分支数目,取决于key值的取值范围,英文字母26个,加一个结束位; 特点2:查找效率取决于key的范围,越广,查找效率越低 特点3:只要地址不一样,就不会出现碰撞 特点4:不论什么顺序插入,结构都一样 特点5:和更新有关,局部变化 缺点1:浪费存储 Patricia tree/trie 压缩过的trie结构 好处:树的长度缩短,占的内存变小 键值分布比较稀疏的时候,压缩trie结构比较好 Merkle patricia tree 和普通的结构的区别是,里面的内容是哈希指针 用处1:可以防止篡改 用处2:可以查账户余额 用处3:可以证明non membership 所在的分支进行查询 以太坊是modified MPT结构 每个合约账户的存储都是一个小的MPT 为什么数据中要保留历史记录? 第一,为了audit 第二,临时性的分叉是常态,出现之后roll back,undo当前的交易,尤其是复杂的智能合约,必须保持历史状态才能回滚。 parenthash前一个区块的块头的哈希值 unclehash Root 状态树的根哈希值 txhash交易数的哈希值 receipthash收据数的哈希值 可以有多个叔父区块,uncles 是个数组,叔父区块会在后面的内容详细说明。 视频课程原文链接 https://www.bilibili.com/video/BV1Vt411X7JF?spm_id_from=333.337.search-card.all.click&vd_source=6807dc8dcddb18fe6db9d949c12b670c ## Publication Information - [Minna Yu](https://paragraph.com/@minna-yu/): Publication homepage - [All Posts](https://paragraph.com/@minna-yu/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@minna-yu): Subscribe to updates - [Twitter](https://twitter.com/Captai_addicted): Follow on Twitter