区块链技术与应用【肖臻老师】笔记整理之------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是新账户,那么就需要一直往回找直到创世区块

代码:

  • 创建交易树

区块链技术与应用【肖臻老师】笔记整理之------17-ETH-交易树和收据树_第1张图片

  • 创建收据树

区块链技术与应用【肖臻老师】笔记整理之------17-ETH-交易树和收据树_第2张图片

  • 创建叔区块

区块链技术与应用【肖臻老师】笔记整理之------17-ETH-交易树和收据树_第3张图片

  • DeriveSha函数

区块链技术与应用【肖臻老师】笔记整理之------17-ETH-交易树和收据树_第4张图片

  • trie的结构:MPT

区块链技术与应用【肖臻老师】笔记整理之------17-ETH-交易树和收据树_第5张图片

  • recript的结构

区块链技术与应用【肖臻老师】笔记整理之------17-ETH-交易树和收据树_第6张图片

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

  • CreateBloom、LogsBloom、bloom9的代码实现

区块链技术与应用【肖臻老师】笔记整理之------17-ETH-交易树和收据树_第7张图片

你可能感兴趣的:(区块链,以太坊,区块链)