主页 > imtoken钱包苹果版下载官网 > 区块链学习笔记-以太坊Part1(ETH状态树、交易树、收据树、GHOST、PO

区块链学习笔记-以太坊Part1(ETH状态树、交易树、收据树、GHOST、PO

本文内容是对北京大学肖震教授主讲的《区块链技术与应用》公开课的总结。 文中图片取自肖老师公开课视频。

目录

帐户类型

基于账户的账本以太坊,明确反映账户余额

帐户类型:

External account(普通账户)外部拥有的账户,由公钥和私钥控制,包括balance和nonce

Contract account 智能合约账户,不能发起交易,内容包括代码,存储

账户地址:160bits(20字节)40个十六进制数,通过公钥哈希,取前160bits得到

ETH 状态树

帕特里夏树压缩前缀树:

与Trie树相比,Patricia树的高度有效降低,内存访问次数减少。 路径压缩适用于键值分布稀疏的情况,此时压缩效果较好。

在这里插入图片描述

默克尔帕特里夏树:

将 Patricia 树指针替换为哈希指针。

功能:防篡改,查询余额

以太坊使用修改后的 MPT

在这里插入图片描述

每出现一个新区块,全节点都必须创建一个新的MPT,但新MPT与旧MPT中的大部分节点共享。 保留历史状态而不是直接改变的原因:以太坊容易出现分叉以太坊状态树,需要保留历史状态用于回滚。 换句话说,为了支持回滚,必须保留历史状态。

ETH交易树、收据树

交易树(MPT)和收据树(MPT)的节点之间是一一对应的。

收据树可以快速查询智能合约的执行结果。

交易号和回执树只组织当前区块中的交易,而状态树需要包括系统中所有账户的状态。

每个区块之间的交易树和收据树是相互独立的。

Bloom filter,高效地发现一个元素是否在一个大的集合中。 对大集合的每个值进行哈希处理,映射成一个向量,得到大集合的摘要摘要向量。 在检查一个元素是否在里面的时候,因为可能存在哈希冲突,与另一个元素有相同的映射,所以会出现误报,即该元素可能不在里面,但认为在里面。 但是它不会出现在里面,而是检测不到。 这叫做假阳性,即可能是假阳性,但不会是假阴性。 但是简单的布隆过滤器不支持删除操作。

在以太坊中,每笔交易执行后都会形成一张收据,收据中包含一个布隆过滤器,用于记录交易的类型、地址等信息。 在发布的区块的区块头中有一个通用的布隆过滤器,它是本区块中所有交易的布隆过滤器的并集。

使用示例:如果想查找过去一段时间内与某个智能合约相关的交易,首先查看哪个区块的头部包含了该交易的布隆过滤器,如果有,则去所有交易的收据树这个块检查布隆过滤器。 好处:可以快速过滤掉大量不相关的块。

在这里插入图片描述

块状结构

标题结构

在这里插入图片描述

块结构:

在这里插入图片描述

以太幽灵

没有成为最长合法链的节点是叔块,仍然可以获得奖励,包含叔块的最长合法链也会额外获得1/32 * 3的奖励。一个区块最多可以包含两个叔块。 这种机制可以鼓励分叉发生后及时合并。

在这里插入图片描述

叔块必须与当前块有七代内的共同祖先才能成为叔块。 七代之后就不再被认可了。 叔块的奖励也逐渐降低到 2/8。 并且只有分叉所在链条的第一个区块有奖励,后面的区块没有奖励。 鼓励尽早合并临时分叉。

在这里插入图片描述

主链只检查叔块是否合法生成,即挖矿难度是否正常,从而确认是否是叔块,但不执行叔块中的交易,也不检查其合法性其中的交易。

ETH挖矿算法

Pow -> Pos Proof of stake 改造以太坊状态树,由于课程发布时间较晚,所以讲座内容为POW。

难度调整

在这里插入图片描述

在这里插入图片描述

难度炸弹:

在这里插入图片描述

在这里插入图片描述