区块链技术与应用2——BTC-数据结构

news2024/10/3 0:30:51

文章目录

    • 比特币中的数据结构
      • 1. 区块链(block chain)
      • 2. 默克尔树(Merkle tree)
    • 3.哈希指针的问题

比特币中的数据结构

在这里插入图片描述

1. 区块链(block chain)

哈希指针:

(1)保存数值的位置
(2)保存数值的哈希值

区块链:一个使用哈希指针的链表
在这里插入图片描述

genesis block:创世块(最开始创建的块)
most recent block:最近创建的块
tamper-evident log:篡改证明记录

每一个当前区块都保存了上一个区块所有内容的哈希值与位置,形成了一个哈希指针,保存在当前区块中,所有区块利用哈希指针形成了区块链。最后一个区块的哈希指针保存在系统内部

当区块链中某一个区块(图中红色区块)的内容遭到篡改,那么这个区块后面的所有区块(图中红色区块右边的区块)中的哈希指针都要修改。因此只需要通过对比最后一个区块的哈希值是否被修改就能够察觉整个区块链上的区块是否遭到了篡改。

有了这个性质,比特币上的某些节点无需保存所有的区块,有的可能只保存了离自己最近的几千个区块。如果要用到更靠前的区块,那么可以向其他人询问,但如何保证询问到的区块是可靠的呢?只需要对比保存的区块的最前面一个区块内保存的的哈希值别人给的区块的哈希值是否一致即可。

2. 默克尔树(Merkle tree)

默克尔树:一个使用哈希指针的二叉树。树中包含数据块(交易记录)和哈希指针。
在这里插入图片描述

区块的结构:

(1)block header:保存了root hash
(2)block body:保存交易记录数据信息

Merkle tree的用途:向轻节点证明某个记录被写入到了区块链。proof of membership或proof of inclusion

比特币中有两种节点(区块):
轻节点:只保存block header
全节点:既有block header,又有block body

Merkle proof:
在这里插入图片描述
图中圈起来的节点就是轻节点。
a. 首先需要向某个全节点请求一个Merkle proof路径,并请求路径上需要的哈希值(图中红色H)
b. 然后计算需要证明的记录的哈希值,然后通过给定的路径一步一步计算哈希值,直到计算到根哈希值(root hash)
c. 因为轻节点中是保存了block header的,而block header中保存的是root hash,因此只需要对比计算出来的root hash是否与保存的root hash一致即可。

Merkle tree的第二个用途:proof of non-membership,证明某个交易不在某个轻节点中。

使用sorted Merkle tree:对交易记录tx的哈希值进行排序,如果计算出待证明tx的哈希值不在这些值里面,而在某两个tx哈希值之间,那么按照Merkle proof的路径计算这两个tx的哈希值,一直算到root hash,看是否被篡改,如果没有被篡改,则证明待证明tx不在该轻节点中。

比特币中没有用到sorted Merkle tree,这是因为比特币中不需要proof of non-membership。

3.哈希指针的问题

只要是该数据结构不存在环,那么就可以使用哈希指针,如果存在环,就会存在循环依赖的问题。
在这里插入图片描述

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

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

相关文章

基于 Python 实时图像获取及处理软件图像获取;图像处理;人脸识别设计 计算机毕设 附完整代码+论文 +报告

界面结果:图像获取;图像处理;人脸识别 程序结构设计 图形用户界面设计与程序结构设计是互为表里的。或者说,程序结构设计是软件设计最本质、最核心的内容。徒有界面而内部逻辑结构混乱的软件一无是处。 Windows 操作系统是一款图形化的操作系统,相比于早期的计算机使用的命…

XXL-JOB 任务调度平台实践

XXL-JOB 任务调度平台实践一、调度中心(服务端)1、从gitbub 获取项目源码:[https://github.com/xuxueli/xxl-job](https://github.com/xuxueli/xxl-job)2、从源码中得到SQL脚本创建和初始化数据库3、Maven 编译打包 xxl-job-admin 并部署为调度中心4、启动运行 xxl-…

Linux 编译器 gcc/g++

本文已收录至《Linux知识与编程》专栏! 作者:ARMCSKGT 演示环境:CentOS 7 目录 前言 正文 gcc/g常用命令 自定义可执行程序名命令-o 预处理指令-E 编译指令-S 汇编指令-c 链接指令gcc 命令巧记口诀 链接库 动态库-动态链接 静态库…

双11大型互动游戏“喵果总动员” 质量保障方案总结

推荐语:互动游戏是一个系统化工程,在笔者的“喵果总动员”质量方案中,可以看到为保障用户体验,我们在各个难点的解决方案, 例如:用线上压测能力支持业务及时调整各服务容量、通过强化学习覆盖游戏行业的测试…

设计师一定要知道这几个网站,解决你80%的设计素材。

本期推荐一波设计师必备的设计素材网站,设计党赶紧马住!能解决你日常设计中80%的素材。 1、菜鸟图库 菜鸟图库-免费设计素材下载 这是一个为新手设计师提供免费素材的设计网站,站内有超多平面模板、海报、UI设计、电商设计等相关素材&#x…

数据与C(浮点数)

目录 一.基本概念 二.声明和初始化 三.浮点数上溢和下溢 浮点数在数据类型上一共就两个,一个是float,另一个是double。但两个唯一的区别就在于double精度方面是float的两倍 一.基本概念 首先介绍浮点数的三种书写形式 第一种 数字 :103…

K近邻算法和KD树详细介绍及其原理详解

相关文章 K近邻算法和KD树详细介绍及其原理详解 文章目录相关文章前言一、K近邻算法二、KD树总结前言 K近邻算法一般是我们学习机器学习的入门算法,本篇文章详细介绍了K近邻算法,并对其原理进行了说明。同时,为了优化K近邻算法查找最近K个邻…

Spring工厂模式

解决方案1:工厂模式 可以使用抽象工厂模式,让StudentDao、StudentService的实现在在工厂中生成,而工厂可以根据配置 文件的指定类型来创建不同的对象,而且工厂本身一般是不变的。从而降低了对可以变的业务逻辑类的 依赖,接近的软…

字节青训前端笔记 | 数据可视化基础

本课程主要内容可以分为三个章节: 数据可视化的基本概念可视化设计的基本原则面向前端的可视化工具 本手册可以作为学生学习数据可视化的“学习指南”,按照手册所列内容,结合扩展资料进行系统的学习和实践。本课程没有讨论更为前沿的可视化…

推荐5款干净又实用的软件

我们在使用电脑的时候,总是会用到一些好用的软件,今天分享这5款干净又实用的软件,实在是太好用了,我不允许你不知道。 1.桌面工具——火柴 火柴是一款集快速搜索,程序启动、本地文件查找、网站直达、网络搜索等多种功…

OSACN-Net:使用深度学习和Gabor心电图信号谱图进行睡眠呼吸暂停分类

这篇文章在之前读过一次,其主要的思路就是利用Gabor变换,将心电信号转变为光谱图进行识别研究,总体来讲,不同于其他的利用心电信号分类的算法,该论文将心电信号转换为光谱图,在此基础上,分类问题…

java面试题(二十)中间件redis

1.1 Redis可以用来做什么? 参考答案 Redis最常用来做缓存,是实现分布式缓存的首先中间件;Redis可以作为数据库,实现诸如点赞、关注、排行等对性能要求极高的互联网需求;Redis可以作为计算工具,能用很小的…

基于微信小程序 java高校后勤报修系统 Springboot校园报修管理系统

1绪论 5 1.1项目研究的背景 5 1.2开发意义 5 1.3项目研究内容 5 2开发技术介绍 6 2.1 B/S架构 6 2.2Java技术 6 2.3MySQL 介绍 7 2.4MySQL环境配置 7 2.5SpringBoot技术 8 3系统分析 9 3.1可行性分析 9 3.1.1技术可行性 9 3.1.2经济可行性 9 3.1.3操作可行性 9 3.2网站性能需求…

跟开发打了半个月后,我终于get报bug的正确姿势了

在测试人员提需求的时候,大家经常会看到,测试员和开发一言不合就上BUG。然后开发一下就炸了,屡试不爽,招招致命。 曾经看到有个段子这么写道: 不要对程序员说,你的代码有BUG。他的第一反应是:…

C语言学习笔记-强制类型转换

强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型…

《Redis实战篇》六、秒杀优化

6、秒杀优化 6.0 压力测试 目的:测试1000个用户抢购优惠券时秒杀功能的并发性能~ ①数据库中创建1000用户 这里推荐使用开源工具:https://www.sqlfather.com/ ,导入以下配置即可一键生成模拟数据 {"dbName":"hmdp",…

Java中的Set集合

Set不能存储重复元素,元素无序(指的是不按照添加的顺序,List集合是按照添加顺序存储的)hashSet注:源码底层是hashMap实现的,因为hashMap是双列的,其中键是不能重复的,而hashSet是单列…

使用f-string格式化构建字符串

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 字符串的格式化输出(f-string) print(f字符串{变量}字符串) [太阳]选择题 对于以下python代码最后输出的结果是? name "小明" print("【显示】f输出…

全新视角!带你一文读懂ChatGPT!

最了解你的人不是你的朋友,而是你的敌人。 ——《东邪西毒》 目录 什么是ChatGPT? ChatGPT为什么会突然爆红网络? ChatGPT能帮助我们做什么? 获取源码?私信?关注?点赞?收藏&…

记录--千万别让 console.log 上生产!用 Performance 和 Memory 告诉你为什么

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 很多前端都喜欢用 console.log 调试,先不谈调试效率怎么样,首先 console.log 有个致命的问题:会导致内存泄漏。 为什么这么说呢? 用 Performance 和 Mem…