ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-05-17 13:33:47  阅读:245  来源: 互联网

标签:区块 17 收据 filter set ------ 肖臻 bloom 交易


每次发布交易的时候,区块里面的交易会组织成一棵交易树,也是一棵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,收据,filter,set,------,肖臻,bloom,交易
来源: https://blog.csdn.net/qq_38123961/article/details/116928551

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有