区块链学习笔记(2)BTC数据结构

这篇具有很好参考价值的文章主要介绍了区块链学习笔记(2)BTC数据结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.哈希指针(hash pointers):一般的指针存储的是某个结构体在内存中的地址,哈希指针除了要保存结构体的地址外,还要保存这个结构体的哈希值。
区块链学习笔记(2)BTC数据结构
通过哈希指针,我们不但可以找到结构体在内存中的位置,同时还可以检测出结构体的内容是否遭到了篡改。 因为我们记录了结构体的哈希值。
BTC中的最基本的数据结构就是区块链,即一个个区块组成的链表。
区块链与普通链表的区别:
用哈希指针代替了普通的指针。(Block chain is a linked list using hash pointers.)
如图为一个小型区块链示意图,最前面的区块区块为系统中产生的第一个区块(创世区块),最后一个为最近产生的区块。每个区块都包含指向前一个区块的哈希指针。最后一个区块也有一个hash pointer保存在系统中。
区块链学习笔记(2)BTC数据结构
取哈希的时候是把整个区块中的内容合在一起取哈希(包括前面区块的hash pointer)。如下图所示。
区块链学习笔记(2)BTC数据结构
通过这种数据结构可以实现tamper-evident log。只要记住最后一个哈希值,就可以检测出对区块链任意位置的修改。(多米诺骨牌效应)
BTC中的另一个数据结构是Merkle Tree。与一般的Binary Tree不同,Merkle Tree用哈希指针代替了一般的指针。
区块链学习笔记(2)BTC数据结构

Merkle Tree数据结构的好处是只要记住了root hash,就能检测出对任一根节点的修改。
Merkle Tree可以提供Merkle Proof。
BTC中的节点分为两类,一类是全节点,一类是轻节点。全节点保存整个区块的内容,轻节点(如手机上的BTC钱包)只保存一个Block Header。
如何向一个轻节点证明某个交易写入到区块链?
假设某个轻节点想要验证蓝色的交易是否包含在此Merkle Tree中,该轻节点没有保存此Merkle Tree的具体信息,只保留了根哈希值。则其需要向全节点发出请求,全节点只需向轻节点提供下图红色部分的哈希值,轻节点便可进行验证。
区块链学习笔记(2)BTC数据结构
Merkle Proof的时间复杂度为O(logn)。(Proof of membership/Proof of inclusion)
如何证明某个交易不在这个Merkle Tree上?Proof of non-membership:只能验证整个Merkle Tree,时间复杂度为O(n),如果不对这个叶节点的排列顺序做任何假设的话,没有其他更高效的方法。
如果对叶节点的排列顺序做要求,对交易的内容取哈希后按从小到大排序,则存在效率更高的证明方法。
区块链学习笔记(2)BTC数据结构
即通过验证小于该交易哈希和大于该交易哈希的两个叶子节点的路径上的所有哈希(即上图红色部分),如果完成验证,则证明该交易不在此Merkle Tree上。时间复杂度为O(logn),但是需要提前排序。(Sorted Merkle Tree)
在BTC中不需要做不存在证明,因此BTC中不需要Sorted Merkle Tree。
只要是无环的数据结构,都可以用哈希指针来代替。
区块链学习笔记(2)BTC数据结构
如果有环,会造成循环依赖。如上图所示。
原视频:北京大学肖臻老师《区块链技术与应用》公开课文章来源地址https://www.toymoban.com/news/detail-415184.html

到了这里,关于区块链学习笔记(2)BTC数据结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【BTC】数据结构

    BTC 中对交易数据的存储主要涉及到了两种数据结构,一种是区块链,一种是 Merkle Tree。这两种数据结构组成了 BTC 中完整的区块链结构(如下图所示),共同完成对数据的存储和验证,确保交易的有效性。 所谓的区块链是由一个个区块构成的链,其中,每一个区块包括两个部

    2024年01月15日
    浏览(30)
  • 02-BTC-数据结构

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 二、区块链 三、Merkel tree 总结     今天看了北大肖臻老师《区块链技术与应用》公开课,有很大收获,在此写博客以做笔记,加深印象,若有不当之处,欢迎斧正。 一、比特币中的数据结构

    2024年01月19日
    浏览(39)
  • 2.2比特币(BTC)中的数据结构

    ​ **普通指针存储的是某个结构体在内存中的地址。 假如P是指向一结构体的指针,那么P里面存放的就是该结构体在内存中的起始位置。 而哈希指针除了要存地址之外,还要保存该结构体的哈希值H()。 好处是:从哈希值这个哈希指针,不仅可以 找到该结构体的位置 ,同时还

    2024年02月05日
    浏览(32)
  • 区块链学习三——比特币的数据结构

    文章内容来源于北京大学肖臻老师《区块链技术与应用》公开课 普通的指针存储的是结构体在内存中的起始地址 哈希指针除了存储起始地址还存储该结构体的哈希值 根据哈希值可以检测出该结构体是否被篡改。 由一个一个区块组成的链表 Q:区块链使用的链表与普通链表的

    2024年02月08日
    浏览(34)
  • 数据结构-哈希-哈希表实现

    🚀理想的搜索方法:不经过任何的比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,通过某种函数使元素的存储位置与其关键码之间能够建立起一一映射的关系,那么在查找的时候就能通过此函数快速的找到该元素。 🚀向该结构中插入元素:根据该元素的

    2024年02月10日
    浏览(26)
  • 【数据结构】哈希底层结构

    目录 一、哈希概念 二、哈希实现 1、闭散列 1.1、线性探测 1.2、二次探测 2、开散列 2.1、开散列的概念 2.2、开散列的结构 2.3、开散列的查找 2.4、开散列的插入 2.5、开散列的删除 3、性能分析  顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查

    2024年02月06日
    浏览(35)
  • 「数据结构」哈希表2:实现哈希表

    🎇 个人主页 :Ice_Sugar_7 🎇 所属专栏 :Java数据结构 🎇 欢迎点赞收藏加关注哦! 在讲插入之前需要先了解扩容,因为 插入后载荷因子如果超过阈值,那我们就要扩容,即扩容是插入操作的一部分 扩容后,原先哈希表中的元素的哈希地址会改变。之前会发生哈希冲突的元素

    2024年02月21日
    浏览(30)
  • 【数据结构】哈希表与哈希桶

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》 《数据结构》 《蓝桥杯试题》 《LeetCode刷题笔记》 《实训项目》 《C++》 《Linux》 《算法》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.概念 2.哈希冲突 3.解决哈希冲突 3.1闭散列 3.2开散列(哈希桶) 4.模拟实

    2024年03月21日
    浏览(32)
  • 数据结构-学习笔记

     注意:该文章摘抄之百度,仅当做学习笔记供小白使用,若侵权请联系删除! 什么是数据结构? 数据结构是计算机存储、组织数据的方式。 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 结构包括逻辑结构和物理结构。 数据的逻辑结构包括4种  (1)集

    2024年01月23日
    浏览(44)
  • 数据结构学习笔记(王道)

    PS:本文章部分内容参考自王道考研数据结构笔记 1.1. 数据结构 数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素:数据的基本单位,一个数据元素可由若干数据项组成。 数据项:数据的不可分割的最

    2024年02月03日
    浏览(192)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包