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

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

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

文章目录

    • 区块链学习三——比特币的数据结构
  • 一、哈希指针(hash pointers)
  • 二、区块链
  • 三、Merkle tree
    • 1.Merkle tree的作用:Merkle Proof
    • 2.Proof of non-membership
  • 四、总结


一、哈希指针(hash pointers)

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

二、区块链

由一个一个区块组成的链表
Q:区块链使用的链表与普通链表的区别
A:区块链使用的链表使用哈希指针代替了普通的指针
区块链表

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

三、Merkle tree

根节点也可取哈希值叫做根哈希
知道根哈希可以检测出整棵树节点是否被篡改(效率更高)每个节点的改变会导致根节点发生改变
最下面的子节点相当于是交易
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都需要使用哈希指针来构造。没有环的链表可以使用哈希指针,有环的不可使用哈希指针。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/26841.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【图】单源最短路径

最短路径 图上的最短路径:两顶点之间经过的边数最少的路径; 网上的最短路径:两顶点之间经过的边上权值之和最少的路径(源点->终点)。 a星算法、迪杰斯特拉算法、佛洛依德算法。 迪杰斯特拉算法 单源最短路径按…

java SSM 互助旅游管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM 互助旅游管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采…

【C++ 基础篇:21】:friend 友元四连问:什么是友元?友元类?友元函数?什么时候用友元?

本系列 C 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C的三大特性等&#…

运筹说 第25期 | 对偶理论经典例题讲解

对偶理论是研究线性规划中原始问题与对偶问题之间关系的理论,主要研究经济学中的相互确定关系,涉及到经济学的诸多方面。产出与成本的对偶、效用与支出的对偶,是经济学中典型的对偶关系。 对偶理论中最有力的武器是影子价格,影子…

android

1.(单选题4.0分)在使用输入框EditText控件时,当其文本内容为空的时候,做出一些提示,那么使用的属性是 () 。 A. android:background B.android:inputType C. android:hint D.android:text 我的答案:C正确答案:C 4.0分 2.(单选题,4.0分)下列哪…

锐捷AC的部署实例

进行锐捷AC部署时,遇到了一些问题,遂记录下来,如若大家在项目过程中遇到类似问题可以对照解决。 写在前面(锐捷AC的基础配置) ac-controller //配置AC的capwap源地址信息,国家码等…

基于JavaWeb的保护动物管理系统设计与实现

摘要:随着全球一些稀有物种、野生动物日益稀少,保护动物已经成为全球多个国家开始重视并投入大量物力着手解决的重要课题。动物是大自然的产物,自然界是由许多复杂的生态系统构成的。有一种植物消失了,以这种植物为食的昆虫就会消…

电脑通过VNC连接树莓派

0. 实验准备 VNC软件 VNC Viewer 或者 MobaXterm(安装包点击即可下载) 可以使用SSH登录进去或者有屏幕的树莓派 一台可以使用的电脑 树莓派和电脑连接在同一个局域网下 0.5 树莓派的公共操作 打开树莓派的 VNC 功能 有屏幕的 打开 VNC 功能&#xff…

《Apollo 智能驾驶进阶课程》四、感知

1. 感知概貌 2. 传感器和标定 激光雷达:主动式,发射功率限制 Camera: 被动式,受到光照影响大 Radar : 多普勒效率 相对速度 超声波: 感知距离有限,倒车时使用。 … 最后设备还在研发过程中。 PnP问题,解决标定。 IC…

BEVFormer组件分析

BEVFormerEncoder中的get_reference_points staticmethoddef get_reference_points(H, W, Z8, num_points_in_pillar4, dim3d, bs1, devicecuda, dtypetorch.float):"""Get the reference points used in SCA and TSA.Args:H, W: spatial shape of bev.Z: hight…

【IMX6ULL驱动开发学习】02.IMX6ULL烧写Linux系统

由于我买的是正点原子的IMX6ULL阿尔法开发板,但是我是看韦东山老师视频学习的驱动 所以这里我烧录的方法是按照韦东山老师的课程来的 这里给出烧写Linux系统用到的工具 链接:https://pan.baidu.com/s/1bD-xxn3K8xQAVkJSaJmTzQ 提取码:af6w …

Keysight是德MSOS604A高清晰度示波器1 GH

Keysight是德MSOS604A S系列示波器配备 6 GHz 存储器、15 英寸 XGA 电容触摸屏和 10 位模数转换器。主要特性与技术指标 1 GHz带宽和平坦的频率响应确保高信号保真度 20 GSa/s 最大采样率 10 位模数转换器(ADC)保证高垂直分辨率 低噪声前端&#xff…

EDA数字钟(三)

文章目录 前言一、设计内容二、模块结构三、代码编写1、顶层模块Digclk2、状态控制模块Ctrl3、按键消抖模块Filter4、计时模块Time5、闹钟模块Alarm6、显示模块Display7、数码管驱动模块Smg 四、测试文件五、波形仿真总结 前言 再次编写数字钟Verilog程序,使其符合…

Mysql的事务

MySQL中的事务是一组数据库操作,这些操作被视为单个逻辑单元并且被当做原子操作执行,这意味着它们要么全部成功,要么全部失败,没有中间状态。事务通常用于确保数据库中的数据完整性和一致性。 在MySQL中,事务可以使用以…

玩转css逐帧动画,努力成为更优质的Ikun~

🎉 一、前言 css3的animation想必大家都知道吧,那 steps 逐帧动画你知道吗?对于我来说,实际工作及练习中也很少用到这种跳跃式变化的动画,而它start和end的解释又比较“不说人话”,以前用到steps动画的时候…

Linux - 第23节 - Linux高级IO(一)

目录 1.IO的基本概念 2.钓鱼五人组 3.五种IO模型 3.1.阻塞IO 3.2.非阻塞IO 3.3.信号驱动IO 3.4.IO多路转接 3.5.异步IO 4.高级IO重要概念 4.1.同步通信 VS 异步通信 4.2.阻塞 VS 非阻塞 5.其他高级IO 6.阻塞IO 7.非阻塞IO 7.1.fcntl函数介绍 7.2.fcntl函数的使…

MobPush 推送查询API

IP绑定 工作台可以绑定服务器IP地址,未绑定之前所有IP均可进行REST API的调用,绑定后进仅绑定的IP才有调用权限。 设备信息查询接口 根据RegistrationId查询设备信息 接口地址 http://api.push.mob.com/device-v3/getById/{registrationId} 请求方式…

三种编码方式(费诺曼编码,霍夫曼编码,哈夫曼树编码)的简单解释和介绍

一. 费诺曼(Fano)编码是一种前缀编码,其基本原理是将出现频率较高的符号用短的编码表示,而出现频率较低的符号则用长的编码表示。通过这种方式进行编码,可以达到更好的压缩效果。 费诺曼编码的具体过程如下: 将要编码的符号按照…

一个小时入门 Android Compose 动画

0. 前言 前段时间对于Android中的Compose动画做了系统性的学习,相关文章发布在 Compose 动画 专栏里。系统性学完Compose动画后,又对此做了系统性的回顾,抽取其比较重要的部分,希望能帮助大家快速入门Compose动画,所…

ChatGPT新突破:打造自己的智能机器人控制系统

💖 作者简介:大家好,我是Zeeland,全栈领域优质创作者。📝 CSDN主页:Zeeland🔥📣 我的博客:Zeeland📚 Github主页: Undertone0809 (Zeeland) (github.com)&…