Merkle树介绍

article/2025/10/4 22:52:51

默克尔树(Merkle树)又叫哈希树,是区块链数据存储运用到的一个重要的技术算法。
简单来说,哈希树(默克尔树)中,每个节点都标有一个数据块的加密哈希值。哈希树可以用来验证任何一种在计算机中和计算机之间存储、处理和传输的数据。它们可以确保在点对点网络中数据传输的速度不受影响,数据跨越自由的通过任意媒介,且没有损坏,也没有改变。
区块链并非一个独立的个体,而是许多区块组合而成,这些区块会通过哈希值的帮助连接在一起,我们知道每一个区块都会拥有数据的交换,可以是一个,也可以是100多个,那么如果我们想要找出区块本身的哈希值,我们该怎么做呢?是把整个区块组合起来形成一个哈希值呢?还是要找到每个交易的哈希值?现在如果你想找到每个交易的哈希值,你必须存储所有的哈希值,这样一个区块就不会只有1个哈希值,而是有100个哈希值,但是这不是我们想要的结果。我们更希望只得到一个哈希值。其中一个实现的方法就是借助默克尔树。

在这里插入图片描述

乍一看默克尔树会觉得它十分杂乱,但实际上它的结构非常简单。每一棵树都会有一个根,一组枝条,然后叶子从枝条的底部长出。
那么要如何建立这棵树呢?让我们想象一下,在一个区块中,我们有8个数据交换,我们开始收集每个交易的哈希值,那么对于8个数据交换,我们将会有8个哈希值。现在,我们要做的是就找到第一个和第二个的值,然后是第三个和第四个,以此类推,直到最终得到这样的图表:
在这里插入图片描述

一旦我们有了所有的集体哈希,我们就可以再次将它们组合起来,如下图:
在这里插入图片描述

最后在完成上述步骤后,我们将回到树的根部,最终的默克尔树则会入下图所示:

在这里插入图片描述

最后我们会将所有的图表进行整理,得到1到8的哈希值,然后给整个区块和里面所有的交易标记上一个整体的哈希值。
在这个例子中,我们可以看到最后得到的值是一个偶数,但是如果是一个奇数会是怎么样呢?我们只需重复交易,如[e,f,e,f]分支中所示的那样。
在这里插入图片描述

最后,当我们在根部将所有这些数值组合在一起时,我们将得到默克尔树的根部,只有1个区块的哈希值。这在设计区块链时,是非常有用的,因为不需要存储和处理所有区块的哈希值,只需要将每个区块进行单独处理和存储,比必须处理每个区块内存储的100个哈希值要高效得多。
技术交流请加微信:
在这里插入图片描述

本文借鉴于https://zhuanlan.zhihu.com/p/385615350


http://chatgpt.dhexx.cn/article/Ynp1MFNL.shtml

相关文章

Merkle Tree(默克尔树)算法解析

Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。[1] 1、Hash Hash是一个把任意长…

js中的var是什么意思

js中的var是定义变量的意思,使用和不使用var都能定义变量,但是两个变量的作用域不同。 (1)在函数中和函数外分别用var定义一个变量a,函数外的变量a是全局变量,函数内的变量a是局部变量,所以在函…

python中的var是什么什么的缩写_var是什么意思

展开全部 VAR是英文Video Assistant Referee的缩写,也被称作“视频助理裁判”,由现役裁判员担任,他的职责是通过回放视频向裁e5a48de588b63231313335323631343130323136353331333366303733判员提供信息,协助裁判员纠正改变比赛走…

var 作用域||变量

平常我们在使用js 的时候一般使用var来声明变量,相比于C语言Java当中的声明变量要简单一些,但是简单肯定也会有简单的不好之处。 一般来讲,在函数内部(local variable)中,js初始化变量加var的为局部变量不加…

第一讲:var的使用

目录 使用var声明变量 不使用var,直接给变量赋值 变量的作用域 全局变量和局部变量的混用 变量提升 总结 javascript中,使用var声明变量,看似简单易学,其实不然。 在我接触的许多编程语言中,如c, c#, vb, java, p…

let与var的区别

前端小白刚学习JavaScript接触到变量的时候可能会有点懵,那就是什么时候该用let,什么时候该用var,这里给大家一个最简单,最明了的答案,看完就能明白。 首先,let是拥有块级作用域的,什么是块级作…

val和var的区别

美图欣赏: 一.背景 学习过程中,会有很多小的并且容易混淆知识点,因此会把它记录下来。 二.val(value)和var(variable)的区别 基本语法: var|val 变量名 : 变量类型 变量值1.使用var或者val定义一个变量。 使用var(variable)声…

var

在函数中&#xff0c;使用var声明的变量&#xff0c;为局部变量&#xff0c;只能在函数内部访问。 不使用var声明的变量&#xff0c;为全局变量&#xff0c;在函数外边也能访问。 没有var的情况 <script type"text/javascript">a 10;function demo() {console…

VaR如何计算?VaR计算方法

VaR方法提出的背景 传统的ALM(Asset-Liability Management,资产负债管理)过于依赖报表分析&#xff0c;缺乏时效性&#xff1b;利用方差及β系数来衡量风险太过于抽象&#xff0c;不直观&#xff0c;而且反映的只是市场&#xff08;或资产&#xff09;的波动幅度&#xff1b;而…

Matlab画线实例图

1 plot画线 直线&#xff1b; 设置线宽和颜色&#xff1b; 黄色&#xff0c;8像素宽&#xff1b; 直线&#xff0c;黄色&#xff1b; 2 line 画线 画的是坐标(1,3)到(2,4)的一条线&#xff1b; 设置线型和颜色&#xff1b; 3 数学曲线 另一个&#xff1b;

matlab 绘制三维空间直线

绘制三维空间直线 clc,clear; x-2:0.1:2; y(-17*x9)/9; z(-7*x7)/9; plot3(x,y,z,m); grid on

Matlab图像线条绘制

1.线型 定义符---:-.线型实线&#xff08;缺省值&#xff09;划线点线点划线 2.线条宽度 指定线条的宽度&#xff0c;取整为整数&#xff08;单位为像素&#xff09;。 3.线条颜色 定义符r(red)g(green)b(blue)c(cyan)颜色红色绿色蓝色青色 定义符m(magenta)y(yellow)k(bla…

matlab绘制垂线(x轴或y轴)

使用line函数就可以绘制垂线 1、绘制垂直于x轴的垂线 line([xvalue xvalue],[y1 y2])&#xff1b; 比如绘制x5 y取值为[0,10]&#xff1b; line([5 5],[0 10]); 2、绘制垂直于y轴的垂线 line([x1 x2], [yvalue yvalue])&#xff1b; 比如绘制y5 x取值为[0,10]&#xff…

由两点坐标如何画出直线 matlab

由两点坐标如何画出直线 方法1&#xff1a;利用直线方程 斜率加截距 方法2&#xff1a;数据拟合 1 %由两点坐标得数据拟合直线与画线 2 x [1,2];3 y [5,8];4 k ((8-2)/(5-1));% 由两点坐标得到直线斜率5 line k*x0.5;% 直线方程6 7 xy 1:10;% 定义画线的 x 长度8 line1 …

matplotlib画直线

使用matplotlib画两条直线&#xff1a; Code : from matplotlib.lines import Line2D import matplotlib.pyplot as pltfigure, ax plt.subplots() # 设置x&#xff0c;y值域 ax.set_xlim(left0, right20) ax.set_ylim(bottom0, top10) # 两条line的数据 line1 [(1, 1), (5…

Matlab点画线

这个作图和python还是有点区别的&#xff0c;似乎对命令输入的顺序还有要求。 t[1190.2 1153.14 1071.56 1069.22 1063.18 ]; w10:10:50; % scatter(w,t,sz,r,filled); plot(w,t,o--,linewidth,2) hold on t1[1073.02 1057.81 1129.7 1028.18 1015.6 ]; plot(w,t1,*--,linewid…

用MATLAB一直画直线竟然得到了简单的禅绕画,论一直画直线的人有多无聊

之前看过一个视频&#xff0c;有个人把纸面分割成一个一个三角后一直画直线&#xff0c;慢慢的图纸上的图案变得复杂了起来&#xff0c;大概是像下面这样&#xff1a; 上面这个图便是我用matlab模拟的效果&#xff0c;过程很简单&#xff0c;就是用了泊松云盘采点构建三角网格&…

matlab画图线形

线型说明-实线–虚线:点线-.点划线 标记说明o圆圈加号*星号.点x叉号s方形d菱形^上三角v下三角>右三角<左三角p五角形h六角形 颜色说明y黄色m品红色c青蓝色r红色g绿色b蓝色w白色k黑色 plot(x,y1,‘g’,x,y2,‘b–o’,x,y3,‘c*’) 循环设置线形 linestyle{--,-,:,-o,…

matlab画平行坐标轴的直线

想要在普通图形的基础上添加平行于坐标轴的直线 clc clear xmin 2000 xmax 2120 ymin 0 ymax 16 x[2020 2040 2060 2080 2100 2110]; y[1.3 2 3.5 5.8 10 14.8]; xxlinspace(2012,2110); yyspline(x,y,xx); plot(xx,yy,-c,LineWidth,3) axis([xmin xmax ymin ymax]) grid o…

matlab中的画线函数line()

line()函数可以在画布中画一些辅助线。 line([起点横坐标&#xff0c;终点横坐标],[起点纵坐标&#xff0c;终点纵坐标])&#xff0c; line([1,2],[3,4])将画出&#xff08;1,3&#xff09;到(2,4)的一条直线&#xff0c;而不是(1,2)到(3,4)。 举个栗子&#xff1a; subplot…