区块链技术与应用肖臻老师笔记整理之------17-ETH-交易树和收据树

Posted 云灬沙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链技术与应用肖臻老师笔记整理之------17-ETH-交易树和收据树相关的知识,希望对你有一定的参考价值。

每次发布交易的时候,区块里面的交易会组织成一棵交易树,也是一棵Merkle Tree

每个交易执行完会生成一个收据,记录交易的相关信息,交易树与收据树上面的节点是一一对应的。

增加收据树主要是因为以太坊的智能合约比较复杂,便于我们快速查找

从数据结构上讲,交易树和收据树都是MPT

交易树和收据树只把当前区块里的交易包含进去,状态数要把所有账户的状态包含进去

交易树和收据树有什么用呢?

  1. 提供Merkle Proof

  2. 所有与某个智能合约有关的交易,所有众筹事件。需要高效的查询效率,怎么办呢?

    • 引入了bloom filter数据结构

    • bloom filter:A Bloom filter is a data structure designed to tell you, rapidly and memory-efficiently, whether an element is present in a set. The price paid for this efficiency is that a Bloom filter is a probabilistic data structure: it tells us that the element either definitely is not in the set or may be in the set.

    • 生成一个简单的digest,它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难(或者说不支持删除操作)。可能会出现哈希碰撞

    • 每个交易完成之后会生成一个收据,这个收据里面就包含了bloom filter,记录这个交易的类型,地址等其他信息,发布的块头里面也有一个Bloom filter,是交易里所有bloom filter的一个并集。

    • 所以先去查找块头里面的信息,之后再去交易收据树里面的bloom filter进行查询,也可能都没有flase positive,好处是可以快速过滤掉大部分信息。

以太坊的运行过程可以看作是一个交易驱动的状态机。transcation driven state machine

状态树可不可以只存储与本次交易有关的账户状态的信息,这样会缩减很大的空间?

  • 想要查找某个账户的状态就不方便了,比如A->B的交易,可能不包含A的交易,那么就可能需要一直往回找,从后往前扫描很多个区块

  • 如果B是新账户,那么就需要一直往回找直到创世区块

代码:

  • 创建交易树

在这里插入图片描述

  • 创建收据树

在这里插入图片描述

  • 创建叔区块

在这里插入图片描述

  • DeriveSha函数

在这里插入图片描述

  • trie的结构:MPT

在这里插入图片描述

  • recript的结构

在这里插入图片描述

bloom filter就是根据logs产生出来的

  • CreateBloom、LogsBloom、bloom9的代码实现

在这里插入图片描述

以上是关于区块链技术与应用肖臻老师笔记整理之------17-ETH-交易树和收据树的主要内容,如果未能解决你的问题,请参考以下文章

区块链技术与应用肖臻老师笔记整理之------24-ETH-反思

区块链技术与应用肖臻老师笔记整理之------25-ETH-美链

区块链技术与应用肖臻老师笔记整理之------22-ETH-智能合约

区块链技术与应用肖臻老师笔记整理之------22-ETH-智能合约

区块链技术与应用肖臻老师笔记整理之------15-ETH-账户

区块链技术与应用肖臻老师笔记整理之------20-ETH-难度调整