区块链学习三——比特币的数据结构

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

区块链学习三——比特币的数据结构

文章内容来源于北京大学肖臻老师《区块链技术与应用》公开课


一、哈希指针(hash pointers)

普通的指针存储的是结构体在内存中的起始地址
哈希指针除了存储起始地址还存储该结构体的哈希值
根据哈希值可以检测出该结构体是否被篡改。

二、区块链

由一个一个区块组成的链表
Q:区块链使用的链表与普通链表的区别
A:区块链使用的链表使用哈希指针代替了普通的指针
区块链学习三——比特币的数据结构

系统中产生的第一个区块:创世纪区块 genesis block
系统中最近产生的区块:most recent
每个区块都有一个哈希指针
取哈希值是将整个区块的内容合在一起取得哈希(包括哈希指针)
只需记住最后一个哈希值即可检测前面得区块是否被篡改(多米诺骨牌、牵一发而动全身)
因此节点只需保存最近的节点,需要前面得区块可以问别人要,通过计算哈希值即可检测前面的区块是否是正确的。

三、Merkle tree

根节点也可取哈希值叫做根哈希
知道根哈希可以检测出整棵树节点是否被篡改(效率更高)每个节点的改变会导致根节点发生改变
最下面的子节点相当于是交易
区块链学习三——比特币的数据结构
这个数跟二叉树很像
最上面深颜色的方块代表区块,tx即最下面的一行代表交易,H()哈希值
每个区块都包含块头block header (有根哈希值、块头没有具体的交易数据的)和块身block body(块身含有交易数据)
区块包含的所有交易组成的merkle tree的根哈希值存在区块的块头

1.Merkle tree的作用:Merkle Proof

全节点:保存整个区块链的内容,有块头block header 和块身block body(块身含有交易数据)
轻节点:只保存块头block header
Q(Merkle Proof):如何向轻节点证明交易已经写入区块链中 (轻节点没有保存交易列表,只有根哈希值block header)上图黄色的方块包含在Merkle tree。
A:轻节点向全节点发出请求。全节点把图中红色的H() 哈希值发给轻节点。轻节点在本地计算标绿的哈希值 H(),由绿色的哈希值和红色的哈希值可以计算出上一层节点的绿色的哈希值;再由刚才计算出绿色的哈希值与该层红色的哈希值;计算出再上一层的绿色哈希值,再由绿色的哈希值与红色的哈希值即可计算出根节点的哈希值,与轻节点的哈希值比较即可得到是否包含交易信息。
只验证交易数据所在的到根节点的一条分支即可,根哈希值不变,即交易都不会被篡改。人为制造哈希碰撞可以篡改 难度太大了collision resistence

Merkle Proof(Proof of membership、Proof of inclusion):向轻节点证明交易已经写入区块链中。有n条交易的话时间复杂度为log(n)

2.Proof of non-membership

Q:如何证明Proof of non-membership
A:直接将一棵树发给轻节点,把整个交易都发给轻节点。时间复杂度为O(n)
优化:把交易的哈希值按照顺序进行排序,其他步骤跟merkle proof 过程类似。时间复杂度为log(n)。代价是要先排序。sorted merkle tree。
比特币中不要求排序 不要求Proof of non-membership

四、总结

区块链与Merkle tree都需要使用哈希指针来构造。没有环的链表可以使用哈希指针,有环的不可使用哈希指针。文章来源地址https://www.toymoban.com/news/detail-476435.html

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

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

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

相关文章

  • 比特币的7重网络效应

    号外: 教链内参12.22《ETH抄底者自称收到神的启示》 文 | Trace Mayer. The Seven Network Effects of Bitcoin. 2015.6.29. 比特币的7重网络效应如下: 第1重:投机 比特币是一种新颖的、以加密技术为支撑的资产类别,具有升值潜力和高波动性,非常适合风险承受能力强的投机者。HODL! 第2重

    2024年02月04日
    浏览(43)
  • 比特币的微妙和魅力

    到那时他也会明白,他最好的做法是否认比特币对其上级的威胁,并悄悄地成为它心甘情愿的奴隶。 文 | Daniel Krawisz. 原标题: Bitcoin\\\'s Shroud of Subtlety and Allure . 2014/6/29. * * * 对比特币的攻击 对比特币的成功攻击意味着对比特币价值的攻击。很可能存在一个可以被利用的bug能够

    2024年02月02日
    浏览(53)
  • 探索比特币的世界:Bitcoin Ruby 框架

    如果你对加密货币感兴趣,并希望在开发中使用比特币,那么 Bitcoin Ruby 是一个值得考虑的框架。它是一个用于处理比特币交易、区块以及其他相关功能的纯 Ruby 库。 Bitcoin Ruby 可以帮助你在 Ruby 环境中构建与比特币相关的应用程序。它可以用来: 处理比特币交易 创建和验证

    2024年03月26日
    浏览(40)
  • 当年知乎上那个被劝买比特币的学生后来怎么样了

    从2011年到2024年,比特币从3美元一度蹿升至最高点时的7.4万美元,如果那个大三学生将6000元全部买了比特币,此时早已是千万身家。 区块链欧意平台:by3.top 区块链bi安平台:by4.top 错过比特币的知乎女孩称很后悔当初没有听长铗的建议买比特币。在接受专访时,长铗也表示

    2024年04月14日
    浏览(30)
  • 区块链的数据结构(一)——区块、链

            区块(block)由区块头(block header)和交易列表(transaction list,tx list)组成,block之间通过block header的hash连接成了一个链表结构。但这个链表不同于普通链表。 1. block header 比特币的block header: 以太坊的block header: hashPrevBlock / ParentHash ,上一个block header的hash h

    2024年02月13日
    浏览(33)
  • 区块链数据结构

    这笔交易参照的规则, 4 字节, Little-endian 交易输入列表的数量,1-9 字节 下面开始构建一个或多个交易输入  交易输出列表的数量,1-9 字节 下面开始构建一个或多个交易输出  

    2024年02月15日
    浏览(34)
  • 区块链的数据结构和数据存储

    区块链主要分三种,本质上是一种块状存储的链,与寻常的链表不同,链条的每一个节点是根据场景衍生的区块,一般用分布式存储数据,防篡改可溯源: 公链 联盟链 私链 上述三种区块链是基于不同场景诞生的不同业务结构,因此其核心的数据结构和数据存储方式略有不同

    2024年02月02日
    浏览(35)
  • 数据结构课程设计1: 区块链

    1.任务: [问题描述] 使用链表设计一个保存信息的系统,该系统拥有类似区块链的设计以防止信息被轻易篡改。 该题目使用一个链表。信息保存在链表的每一个节点中,每个节点需要包含该节点的编号、信息和校验码。其中: + 每个节点的编号按照顺序递增,从0开始。 + 节

    2023年04月16日
    浏览(107)
  • 区块链中基础数据结构

    1个输入:发起人A的地址 2个输出:给B转1个币   A还剩1个币  区块链是有多个区块组成的链表,每个区块包含块头和块体, 块头中包含1. 上一个区块的哈希指针 2. 块体的根哈希 3. 时间戳 块体中包含1. 哈希树 叶子结点记录详细交易记录 非叶子结点记录哈希地址。  首先A用

    2024年02月13日
    浏览(32)
  • 【区块链】复习九之以太坊数据结构

    比特币是采用基于交易的账本模式 ,优点有:隐私保护比较好;缺点有:没有显示地记录账户余额,交易不方便(要一次性花出去) 以太坊是基于账户的账本模式 。 优点 :显示地记录账户余额 交易更加方便 对双花攻击(支付方不诚实)有着天然的防御 缺点 :易遭受重放

    2023年04月25日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包