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

news2024/11/24 16:48:52

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

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

文章目录

    • 区块链学习三——比特币的数据结构
  • 一、哈希指针(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都需要使用哈希指针来构造。没有环的链表可以使用哈希指针,有环的不可使用哈希指针。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023最新版本Activiti7系列-任务分配

任务分配 1.固定分配 在指派用户任务的审批人时。我们是直接指派的固定账号。但是为了保证流程设计审批的灵活性。我们需要各种不同的分配方式,所以这节我们就详细的来介绍先在Activiti7中我们可以使用的相关的分配方式. 固定分配就是我们前面介绍的,在绘…

vr沉浸式仿真实训展厅中控系统提高课堂纪律

为解决实训教学过程中“看不到、进不去、成本高、危险大”的问题,VR智能中控系统为职业教育及高等教育老师提供一个数字化、沉浸式、集中管控的实训教学工具。 VR智能中控系统通过对VR教学课堂的实时监控、数据的收集和分析,为气象学院的教学提供更多帮助…

STM32 HAL库 使用 USB HID 配置

STM32 HAL库 HID 配置 STM32 CubeMax 配置修改USB描述符修改HID设备PID VID修改HID报告间隔修改USB报告长度发送和接收发送接收 STM32 CubeMax 配置 我这里使用的是HS接口但使用的是内部FS核。 修改USB描述符 在 usbd_custom_hid_if.c 的 CUSTOM_HID_ReportDesc_HS 或 CUSTO…

python基础----08-----json、pyecharts模块介绍以及折线图、地图、柱状图的绘制

一 python变量和json数据的相互转化 json就是 一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互、类似于: 国际通用语言 -英语。 import json if __name__ __main__:# 1. 将python变量转成json(列表->json)# 准备列表,列表内…

css background-position属性

定义 background-position 属性用于设置或获取元素背景图像相对于原点的初始位置。 background-position 基本语法 background-position:背景图片水平位置参数 背景图片垂直位置参数 ; background-position 通常使用水平方向以及垂直方向的组合来定义背…

locust的安装和运行的demo

最近开始学习locust,从最初的安装到运行一个简单的demo。 lcoust官网上有介绍安装和使用:https://docs.locust.io/en/stable/installation.html locust 需要的python环境,首先要安装python。 因为本人已经安装了python以及python…

Spring Boot集成WebSocket Demo,简单明了

如果是初次搭建Spring BootWebSocket项目,不需要太复杂,只需要快速上手,那么你搜到的大部分文章可能都不适合你,我的这篇文章以最精简的方式搭建一个可以运行并通信的Spring BootWebSocket的Demo项目,有了根基之后再进…

记录部署ChatGLM大语言模型过程

1.什么是 ChatGLM: ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB…

融合创新,着眼全局:泛工具行业增长如何顺势而为?

提到工具,你想到的是什么?办公场景中的扫描、传输、会议等工具,还是生活中帮你记录点滴、培养习惯的监督类APP,亦或者是消费支付买买买、旅游出行预订,甚至回家后的智能家居……工具类应用已经渗入我们工作生活的方方面…

数据结构与算法12:图、广度优先、深度优先

目录 【图】 【图的存储方法】 方法1:邻接矩阵 方法2:邻接链表 【图的算法】 广度优先搜索(BFS) 深度优先搜索(DFS) 【图】 在 数据结构与算法09:二叉树 这篇文章中讲述了“树”这种数…

RPC(远程过程调用)与消息队列介绍

文章目录 前言 一、过程调用分类 1.本地调用(Local Procedure Call,简称LPC) 2.远程调用(Remote Procedure Call,简称RPC) 二、API/SDK的区别是什么? 开发过程中,我们经常需要调用别人写的功能 三、WebClient 四、消息服务 目录 前言 一、过程调用分类 1.本…

excel转xmind

有如下excel,我们想把它转为xmind; 一、主流程 先说一下主要的流程: 需要把excel数据复制出来,放到文本编辑器(如notepad)中,比较乱哈,如下: 然后需要调整成如下格式…

JavaSE-04【方法】

JavaSE-04【方法】 第一章 方法 1.1 方法定义的格式详解 1、方法:就是若干语句的功能集合2、生活案例: 爆米花机: 原料:(玉米、糖) 产物:爆米花 3、方法中的两个重要名词 参数:即原料,就是进…

api接口汇总的平台

大麦网是一个在线购票平台,为音乐会、演唱会、话剧、体育比赛等各类娱乐活动提供门票销售服务。通过大麦网,用户可以轻松购买心仪的演出门票,并享受到良好的购票体验。 为了让更多用户了解到大麦网的商品详情,并能够方便地获取相…

网络协议 — IPv6 互联网协议第 6 版

目录 文章目录 目录IPv6IPv6 数据包格式固定报头扩展头部 IPv6 地址格式IPv6 网络的基本组成元素IPv6 的地址分类和寻址模式单播地址全球唯一地址(Global Unique Address)唯一本地地址(Unique Local Unicast Address)链路本地地址…

新手学习eclipse使用

目录 1 工具安装2 安装插件3 创建项目4 启动项目总结 对于新手程序员来说,选择一款趁手的工具还是有必要的。目前IDE比较好使用的是两块IDEA和eclipse,IDEA收费而且每年的费用不低,eclipse免费比较适合使用。 1 工具安装 下载地址&#xff1…

oracle-缩小表空间

刚准备收拾东西准备下班,突然接一个帮忙的事情,11g rac环境数据磁盘组使用率100%了,业务无法使用了,重新开电脑速战速决。 直接登录环境中,计划立刻释放一点点空间出来让业务恢复使用,业务恢复了再考虑增加…

100天精通Golang(基础入门篇)——第4天: Go语言中的变量与常量详解:声明、赋值和使用

🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《I…

Shell脚本攻略:expect脚本免交互

目录 目录 一、理论 1.Here Document 2.expect实现免交互 二、实验 1.实验一 2.实验二 3.实验三 4.问题 一、理论 1.Here Document (1)概念 Here Document也被称为here-document/here-text/heredoc/hereis/here-string/here-script&#xff0c…

MYSQL的卸载、下载、安装、配置一步到位(超详细教程)

MYSQL的卸载、下载、安装、配置一步到位(超详细教程) 一、卸载 1.控制面板卸载 全部卸载 2.卸载数据文件 在安装的时候会有安装地址和数据库地址 找到自己安装数据库的地址,删除MySQL里面的内容 3.删除环境变量 此电脑–>属性–>高级系统设置–>环境变量…