【数据结构】Merkle tree学习

Amazon Dynamo论文解读 - Merkle Tree的使用 Merkle Tree是Dynamo论文中用到的一个算法,读这篇论文前,我并不知道这个算法,所以找了相关资料了解了解,以便我对论文有更进一步的了解。     什么是Merkle Tree    Merkle Tree,是一种树(数据结构中所说的树),网上大都称为Merkle Hash Tree,这是因为 它所构造的Merkle Tree的所有节点都是Hash值。Merkle Tree具有 阅读详情

描述

学习比特币的数据结构看到的,原来以为是一种刚出来的数据结构,阅读了一些文档后才发现这个数据结构是蛮经典的。比如在下小电影的时候也会用到这个东西。

学习

hash

用到这个首先要先知道hash,关于hash的原理和生成我不清楚,这个太底层了。一般可以理解是某一些特定的算法可以为某个文件生成指定长度的唯一字符串,而这个字符串可以代表这个文件。如果两个文件的hash值一致,可以认为这两个文件是一样的。

比如有这么一个场景,要从网站下载某一个文件,网络传输不太稳定,那么可以通过检查hash的方式进行判断。网站的文件处提供了一个MD5加密的hash值,下载下来的文件也进行MD5的加密,如果hash值一样,说明两个文件是一样的,可以放心使用。如果不一样,说明在传输过程中丢包了,文件不完整,或者是中途有人拦截篡改了文件,都会导致文件的无法使用。

应用场景

P2P下载

P2P下载就是点对点下载,不一定是从服务器中获取资源,而是从别的用户处获取到资源进行传输。这就会出现下载的用户越多,这个资源的下载速度越快。因为其中会有算法从较近的用户处获取。

P2P下载一个文件,它会从多个用户处获取到这个文件的一部分数据,然后同时进行下载,这样可以加快速度。这样有一个问题需要解决,怎么知道各个部分的数据都是对的。这时就需要Merkle tree。

P2P下载示意
图中A分成了B和C两个部分,在分的时候算出B和C的hash值,传输结束检查接收到的数据的hash值是否一致,一致说明传输的包是对的。接下来就是要进行数据合并。A的hash值可以通过B+C的hash值相加(字符串的相加就是拼接,如 “g7jd” + “6qi8” = “g7jd7qi8”)再进行hash计算得到hash值,然后再进行比较,可以得到数据是否一致。文件的包可以无限分,Merkle tree也可以通过这样的计算进行处理。

bitcoin

比特币的区块中保存交易记录就是通过这样的处理方式。
比特币结构示意
这里的处理方法是先把实际的交易信息如转账人、收钱人、转账金额等交易信息进行hash加密计算,然后得到交易的hash值。然后将相邻的两个交易hash值进行相加,然后再进行hash加密计算得到下一级的hash值。如此这般向上,最终得到一个根节点hash,这个就是区块的所有交易信息汇总。

实现

这个数据结构说到底还是一种树的实现,只要熟悉树结构,实现还是蛮简单的,但是这个页面有限,我就不写了。

数据结构与算法-默克尔树(Merkle tree) 哈希树(hash tree;Merkle tree)又称为默克尔树,因为概念是由拉尔夫·查尔斯·默克尔1979 年提出并申请专利。Merkle 树是一种首先在计算机科学领域实现的数据结构。每个叶节点均以数据块的哈希作为标签,而除了叶节点以外的节点则以其子节点标签的加密哈希作为标签 ,如下图所示。 阅读详情

相关推荐

Merkle Patricia Tree (MPT) 以太坊merkle技术分析

一 传统merkle树缺陷我的这篇博客merkle tree 分析 详细解释了merkle树的原理和作用,然而传统的merkle树有他的局限性 以下对Vitalik blog原文的翻译可以很好的阐述 传统merkle树的一个特别的限制是,它们虽然可以证明包含此交易,但无法证明任何当前的状态(例如:数字资产的持有,名称注册,金融合约的状态等)。你现在拥有了多少个比特币?一个比特币轻客户端,可以使

zslomo的博客 1万+

默克尔树(Merkle Tree)总结

目录 为什么要有默克尔树 简介 Merkle Tree的特点 图解 创建树 检索-文件夹比较 检索-防伪 更新 插入删除 应用 数字签名 P2P网络 可信计算 区块链-简单验证支付 为什么要有默克尔树 Hash是一个把任意长度的数据映射成固定长度数据的函数[2]。例如,对于数据完整性校验,最简单的方法是对整个数据做Hash运算得到固定长度的Hash值,然后把得到的H...

今天吃了吗的博客 1万+

以太坊 Merkle Patricia Tree详解

Merkle Patricia Tree简称MPT树,提供了一个基于加密学的,自校验防篡改的数据结构,采用[key,value]键值对来储存数据,在以太坊范围内,限定键值的类型只能是字符串。MPT树插入、删除、查找操作的时间复杂度均为O(log(n)),但相对于红黑树来说,MPT更好理解和编码。MPT树结合了基数树(Radix Tree)、Merkle Tree、Patricia Tree的优点。...

gaowebber的博客 2212

Merkle Tree学习

Merkle Tree学习 - 风之舞555 - 博客园

m0_57126939的博客 115

浅析Merkle Tree——分布式系统数据校验的基石

什么是Merkle Tree Merkle Tree是一种基于哈希的数据结构。Merkle Tree是一种树状数据结构,该树中的每一个叶子结点都是一个数据块,而每一个非叶子结点都是其子结点组合的哈希。普遍性况下Merkle Tree是二叉树,也就是说Merkle Tree中的每一个结点有两个子结点。当然,Merkle Tree可以是多叉树,例如Ethereum平台所采用的。简单起见,本文我们仅讨...

正西风落叶下长安 2292

区块链-默克尔树(Merkle Tree)

Merkle Tree 也被成为 Hash Tree,见名思意,这种树其实就是用来存储 hash 值的一种树。关于hash我们在之前的文章已经说过了,对于一个输入,都有一个唯一的长度的固定的输出,且以我们目前的科技状况,无法找到两个不同的输入使得输出一样。 简单来说就是 y = H(x), y’ = H(x’) 我们无法找到 x != x’, 但 y = y’ 从以上这张图,我可以...

卖鱼的小白菜的专栏 4565

Merkle Tree(默克尔树)

(首先声明部分内容来自网络,加上自己的理解,希望与各位多多交流学习) 1 Merkle Tree概念 Merkle Tree也称作Hash Tree,是存储Hash值得一种树。它的组成分成两类,一类是叶子节点,叶子节点是数据块;另一类是非叶子节点,它们是起串联作用的Hash 对于Merkle Tree的理解,必须了解三样东西:1,.Hash 2.Hash List 3.Merkle Tree

u012369140的专栏 3521

区块链基础学习:Python实现Merkle Tree和Merkle Root

我们从底部开始查询节点,按照从左到右的顺序分组成对,然后使用hash_nodes()方法来计算每个节点的哈希值,并将其添加到当前层级的列表。接下来,我们将实现一个计算Merkle根的方法。在本文中,我们将使用Python编写一个简单的Merkle Tree和Merkle Root实现,并进行简明扼要的讲解。上面的输出结果展示了一个Merkle Tree的完整结构,从底部到顶部,总共有4层,每一层都由两个节点哈希值组成。我们可以看到,最后输出结果仅包含Merkle根的哈希值,这是我们需要的结果。

Meta_C的博客 387

每日学习一个数据结构-默克尔树(Merkle Tree)

默克尔树(Merkle Tree),也称为哈希树,是一种二叉树结构,广泛应用于数据验证和完整性检查。它在区块链技术中尤为常见,但也有其他应用场景。默克尔树通过层次化的哈希结构,提供了高效、安全的数据完整性验证机制。它在区块链、分布式系统、网络安全等多个领域都有广泛的应用。理解默克尔树的工作原理和应用场景,有助于在实际开发中选择合适的工具和技术。希望这些解释对你有所帮助!如果有任何具体的问题或需要进一步的解释,请随时提问。

wendao76的专栏 3636

数字信号完整性分析:眼图原理与应用指南

眼图是数字信号完整性分析中的核心工具,通过将数字信号在时间域上多次叠加形成类似人眼的图形,直观反映信号质量。其原理基于时钟恢复和波形叠加,能有效展示信号的统计特性,包括上升/下降时间、过冲/下冲等关键参数。在高速数字电路设计中,眼图分析对于评估信号完整性、调试抖动问题至关重要,广泛应用于DDR接口、高速串行链路等场景。通过合理设置示波器参数和采用均衡技术,工程师可以优化眼图表现,提升系统可靠性。本文结合DDR4内存等实际案例,详解眼图的测量方法与常见问题解决方案。

weixin_35459464的博客 342

用友U8其中一个账套提示演示期已到期-修复方法

【事件始末】 一朋友求助,反馈使用的用友U8,很多年了! 突然发现其中账套2021年的一个账套打不开,提示演示期限已到期! 但是其他账套完全正常,可以打开,没有任何问题。 不管是还原老旧备份,还是重装软件问题依旧,无法自己解决。 客户查询报表结算账期,情况比较紧急,于是求助我们。 经过多次反复琢磨和烟酒,终于于晚上23点59分给弄了出来,也总是圆满解决问题了。 【问题分析】 该用户打的是 U82X免狗补丁,估计是该补丁文件设置了 最大有效期,补丁到期了导致的。 也有可能是程序...

u010431289的博客 2万+

学习笔记《区块链技术与应用》第一天 数据结构

最近开始学习 北京大学肖臻老师《区块链技术与应用》公开课好久没有做学习笔记了,一直找不到学习的方向,想去学习AI感觉自己又不合适,多年工作方向一直是coder,对偏理论的东西知之甚少,更多的是项目化的内容。因此选择区块链技术作为下一个阶段的学习方向,也希望经过学习能找到岗位即时增加收入也是对自己学习成果的检测。

切克闹的博客 366

新手小白入门编程第2讲 JAVA编程环境搭建 JDK与环境变量、Eclipse

1 JDK 1.1 JDK概述 JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。 JDK是整个java开发的核心,它包含了: JAVA开发工具(jdk\bin) 基础开发库(jdk\jre\lib\rt.jar) 基础开发库的源码(jdk\src.zip) 1.2 JDK下载与安装 本次使用的是JDK1.8,详细安装步骤可以参见”JDK培优安装手册”. 注意事项: 同时安装多个JDK时需要使用执行环境变量来确认使用的是哪个jdk 安装时选择默认选项安装到默认

程序媛泡泡的博客 4万+

Merkle Patricia Tree 详解

1. 前言 1.1 概述 Merkle Patricia Tree(又称为Merkle Patricia Trie)是一种经过改良的、融合了默克尔树和前缀树两种树结构优点的数据结构,是以太坊中用来组织管理账户数据、生成交易集合哈希的重要数据结构。 MPT树有以下几个作用: 存储任意长度的key-value键值对数据; 提供了一种快速计算所维护数据集哈希标识的机制; 提供了快速状态回滚的...

跨链技术践行者 1万+

数仓项目6.0(一)

数据同步工具种类繁多,大致可分为两类,一类是以DataX、Sqoop为代表的基于Select查询的离线、批量同步工具,另一类是以Maxwell、Canal为代表的基于数据库数据变更日志(例如MySQL的binlog,其会实时记录所有的insert、update以及delete操作)的实时流式同步工具。DataX的使用,用户只需根据数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行如下命令提交数据同步任务即可。

qq_58551342的博客 2847

光伏发电系统模拟及其发电预测开源python工具pvlib

本文介绍光伏发电系统模拟及其发电预测开源python工具pvlib,以及举例介绍获取辐照度方法、光伏发电预测思路。

肖永威的专栏 1万+

Merkle Tree

在分布式系统、P2P应用中或者是区块链中,会经常使用一种数据结构Merkle tree(默克尔树),这里我们将详细讨论一下这个常用数据结构。 Merkle tree Merkle树看起来非常像二叉树,其叶子节点上的值通常为数据块的哈希值,而非叶子节点上的值,所以有时候Merkle tree也表示为Hash tree,如下图所示: 在构造Merkle树时,首先要对数据块计算哈希值,通常,选用SHA-256等哈希算法。但如果仅仅防止数据不是蓄意的损坏或篡改,可以改用一些安全性低但效率高的校验和算法,如CRC。

小白的博客 774

目标检测YOLO实战应用案例100讲-基于激光雷达点云的三维目标检测算法研究

近几年来,在计算机视觉领域,利用深度学习卷积神经网络技术来实现各种任务的算法越来越多。毫米波雷达、相机、激光雷达、超声波雷达等车载传感器生产成本的降低,汽车的自动驾驶技术得到了飞速发展,在我们的日常生活中经常能看到该技术辅助汽车驾驶员进行行车。和非自动驾驶汽车相比,自动驾驶汽车存在诸多优点,如进一步减少交通事故,保障人身安全;提供安全合理的路线,避免交通拥堵;采用清洁无污染的电能作为汽车新能源,从而降低大气污染等。现如今,自动驾驶技术已经逐渐深入到各个领域并发挥着关键的作用。

qq_36130719的博客 3730

Merkle tree算法

1.Merkle Tree原理 Merkle Tree是Dynamo中用来在多个节点之间同步数据集合一致性的算法,Merkle Tree是基于数据Hash构建的一个树。它具有以下几个特点: (1)数据结构是一个树,可以是二叉树,也可以是多叉树。 (2)Merkle  Tree的叶子节点的值是自己制定的,可以是数据集合的单元数据或者单元数据的hash。 (3)Merkle  Tree非叶子节

小小八卦姐的专栏 1831

深入理解 DDR5 Bank Group 与并行调度机制

Bank Group架构和并行调度机制,是DDR5性能跃升的核心秘密!理解它们才能写出高效调度程序,设计出性能强劲又稳定的DDR5系统。🎯记住:Bank Group不是简单的分组,而是高速并行的“魔法钥匙”,巧用它,你的DDR5设计将爆发惊人性能!

weixin_43199439的博客 310

机器学习项目实战案例数据集

本专栏整理了《机器学习项目实战案例》,内包含了各种不同的机器学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 3633

数据结构之Merkle树

Merkle树(Merkle Tree),也称为哈希树(Hash Tree),是一种二叉树或多叉树结构,其中每个叶子节点存储数据块的哈希值,而非叶子节点存储其子节点哈希值的组合哈希。这种数据结构由美国计算机科学家Ralph Merkle在1979年提出,并在1987年获得专利。 Merkle树的核心价值在于能够高效、安全地验证大型数据结构中特定数据的存在性和完整性,而无需传输或存储整个数据集。 以下是关键要点: 核心价值 高效验证:O(log N)的验证复杂度 数据完整性:任何篡改都能被检测 可扩展性:适用

d3y1`5 81_09 822

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

以太坊的状态树 Merkle Patricia Tree

Merkle Patricia Tree Merkle树 https://www.cnblogs.com/fengzhiwu/p/5524324.html Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。Merkle Tree的主要作用是当我拿到Top Hash的时候,这个hash值代表了整颗树的信息摘要,当树里面任何一个数据发生了变动,都会导致T

ngany的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

分布式数据同步之Merkle Tree

这两天在看Dynamo数据库的数据同步机制,涉及到了一种数据结

gbjj123的专栏 2923

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

merkle tree

test

hi! 1695

以太坊Eth2 deposit merkle tree

1. 引言 相关代码有: https://github.com/celo-org/optics-monorepo/blob/main/solidity/optics-core/libs/Merkle.sol(Solidity) https://github.com/zcash/incrementalmerkletree(Rust) 参考资料 [1] Ethereum 2.0 Deposit Merkle Tree [2] Formal Verification of Ethereum 2.0 Depos

mutourend2010@gmail.com 1998
上一篇: 【T-IO】t-io 的学习笔记
下一篇: 【springboot】spring boot配置总结
ColdFireMan
博客等级 码龄10年 27粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值