区块链学习笔记2——BTC中的数据结构

学习视频:北京大学肖臻老师《区块链技术与应用》
笔记参考:北京大学肖臻老师《区块链技术与应用》公开课系列笔记——目录导航页

本文主要介绍四种数据结构:Hash pointers、Block chain、Merkle tree、Block

Hash pointers(哈希指针)

哈希指针与普通指针类似,它除了保存地址之外还保存哈希值

Block chain(区块链)


区块链中区块与区块之间通过哈希指针相连,这里哈希指针中的哈希值是对前一个区块的整体取哈希,包括前一个区块的哈希指针,因此区块链如果有一个区块被修改,那么他之后的所有区块都会改变,我们只需要记住最后一个区块的哈希值,就可以判断整个区块链有没有被修改。
用户一般不需要保存区块链中的全部区块,在使用的时候向其他区块要即可,通过哈希值可判断对方给的区块有没有被修改。

Merkle tree

Merkle Tree与二叉树类似,主要是将二叉树中的指针换成了哈希指针


在Merkle tree中,我们只需要记住根节点的哈希值,就可以检测出整棵树的内容有没有被修改。
每个区块所包含的交易都组织成Merkle tree的形式,就是上图中的Data Blocks。

Block(区块)

block包括block header和block body两部分
block header:root hash(Merkle tree的根哈希值)等信息
block body:交易列表

Merkle proof

Markle Tree可以用于提供Markle Proof。关于Markle proof,需要先了解比特币系统中节点。比特币中节点分为轻节点和全节点。全节点保存整个区块的所有内容,而轻节点仅仅保存区块的块头信息。
当需要向轻节点验证它的交易是否被写到区块中时需要用到Merkle proof。


以上图为例,要验证黄色的交易是否被写到区块中,我们首先要请求第三层的红色的哈希值,然后根据黄色的交易求出第三层的绿色哈希值,然后通过这两个已知的哈希值求出第二层的绿色哈希值,再请求第二层的红色哈希值,以此类推最终求得根哈希值,然后与存储在自身结点中的根哈希值比较,若相同则证明交易已经写入到了区块中。

上面的验证是proof of membership 时间复杂度为O(logn)
关于proof of non-membership验证,如果交易是无序的,我们只能证明每个结点都是对的,说明没有该节点,时间复杂度为O(n)
如果交易是按hash值从小到大排序,我们对要检验的交易取hash,判断它应处的位置,然后计算他前后的两个结点的hash,若这两个结点确实相邻(merkle proof),则证明我们要找的结点不存在(若存在则会在这两个结点之间,这两个结点不会相邻),时间复杂度为O(logn)

注意

无环的情况下都可以使用hash pointer代替point
有环时会因为每一个hash point都与它前一个的hash值有关,所以会产生循环依赖,每个hash都定不下来。

区块链学习笔记2——BTC中的数据结构相关推荐

  1. 区块链学习笔记4——BTC实现

    区块链学习笔记4--BTC实现 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 UTXO 区块链是一 ...

  2. 区块链学习笔记一 BTC密码学原理

  3. 区块链学习笔记五 BTC网络

  4. 区块链学习笔记15——ETH状态树

    区块链学习笔记15--ETH状态树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 引入 要实现的功 ...

  5. 区块链学习笔记16——ETH交易树和收据树

    区块链学习笔记16--ETH交易树和收据树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 交易树和 ...

  6. 区块链学习笔记23——ETH反思

    区块链学习笔记23--ETH反思 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 智能合约真的智能吗 ...

  7. 区块链学习笔记19——ETH难度调整

    区块链学习笔记19--ETH难度调整 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 前面学过,比特 ...

  8. 区块链学习笔记21——ETH智能合约

    区块链学习笔记21--ETH智能合约 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 智能合约简介 ...

  9. 区块链学习笔记(三)——从商鞅变法谈“共识机制”

    区块链学习笔记(三)--从商鞅变法谈"共识机制" 前言 一.商鞅变法的故事 总结一下 二.共识机制 1)什么是共识机制 2)要点 总结 前言 区块链健康运行的灵魂是"共识 ...

最新文章

  1. 2021-2027全球与中国奶牛冻精市场现状及未来发展趋势
  2. C++ 笔记(32)— 预处理、文件包含include、宏替换define、条件包含ifndef、define
  3. Kali Linux打开多个终端窗口
  4. ExtAspNet应用技巧(三) - 302与Asp.Net Ajax
  5. Spring Boot中文乱码问题怎么解决(按步骤做)
  6. 【HTML】 HTML基础知识 表单
  7. 从0到1构建美团压测工具
  8. [原创]Xcode 4.6 安装 Boost 1.53.0
  9. linux 跟踪运行的进程,使用 Linux 的 strace 命令跟踪/调试程序的常用选项
  10. IDEA Maven Mybatis generator 自动生成代码
  11. Oracle19c下载安装和配置教程
  12. PPT使用技巧——绘制圆角曲线
  13. Word 用宏命令实现锁定页眉页脚的两种方式
  14. jQuery控制网页字体大小
  15. META-INF、WEB-INF分别是什么?
  16. 操作系统:手把手带你扫盲 操作系统 的那些必知必会!
  17. 《Blender图解教程:新手入门练习》
  18. 火线精英手游服务器维护,4399火线精英7月4日23:00全区停机维护公告
  19. Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
  20. mac 下安装python+selenium+firebox+pycharm+geckodriver

热门文章

  1. Docker 安装 rancher
  2. windows下使用性能计数器遇到的坑
  3. java人脸识别快速搭建_基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
  4. NC开发前后台数据库操作的用法
  5. adb 最大连接_adb工具:
  6. 2022去/水印小程序源码+基于WordPress插件
  7. 【教程】EasyConnect 在 20.04.1-Ubuntu 安装实战
  8. jmeter录制 过滤_jmeter之2种方法录制脚本
  9. git在项目中忽略包node_modules依赖包和git 指令常用汇总
  10. 微博的大V经济学,让自媒体今年赚了117亿