[转帖]MerkleDAG全面解析 一文读懂什么是默克尔有向无环图
MerkleDAG作为IPFS的核心数据结构,它融合了Merkle Tree和DAG的优点,今天阿信带大家一起来探究什么是MerkleDAG,拆分解说Merkle Tree、DAG有向无环图、MerkleDAG在IPFS中的应用。
MerkleDAG树形结构图
Merkle Tree
Merkle Tree是由美国计算机学家Merkle于1979年申请的专利。 Merkle Tree通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。
1 那么,hash是什么
• Hash是一个把任意长度的数据映射成固定长度数据的函数
• 输入数据的改变会得出不同的hash结果
2 Hash List
点对点网络传输中,文件拆分,拆分后的小的数据块的hash组合成了hash list。 在传输过程中,如文件损坏了,只要重新下载损坏部分的数据块即可。
3 Merkle Tree
• Merkle Tree大多数是二叉树,也可以多叉树;
• 叶子节点的value是数据集合的单元数据或者单元数据HASH;
• 非叶子节点的value是根据它下面所有的叶子节点值,然后按照Hash算法计算而得出的。
• 层层计算而形成的树形结构
DAG有向无环图
1 DAG起源
• 2013年,以色列希伯来学者在bitcointalik提出GHOST协议,引入DAG概念,作为比特币的交易处理能力扩容解决方案 • 随后,NXT社区提出用DAG的拓扑结构来存储区块 • 2015年9月,Sergio Demian Lerner发表了 《DagCoin: a cryptocurrency without blocks》。交易发起后,直接广播全网,跳过打包区块阶段。 • 2016年7月,IOTA横空出世,随后ByteBall也闪亮登场
2 DAG介绍
DAG 英文全称为:directed acyclic graph。 有向无环图,有方向无环路。
假设当你发布新交易时,那么你的单元会主动同时链接到前面两个有效单元之中,DAG 中的每个新单元,验证并确认其父单元,以及父单元的父单元,慢慢可达创世单元,并将其父单元的哈希包含到自己的单元里面。 随着时间递增,所有交易单元相互连接,形成图状结构,如若要更改数据,那就不仅仅是几个单元数据的问题了,而是整个拓扑图的数据更改。DAG这个模式相比来说,要进行的复杂度更高,更难以被更改。
区块链链式数据结构
DAG的拓扑数据结构
1和2号是创世单元;第3个单元产生时,只需要确认1号和2号的交易;第4个单元产生时,只需要确认2号和3号,以此类推。
区块链的基础是分布式账本,而分布式账本的基础是分布式网络; 分布式账本是不是一定要是区块链呢? 不一定,它还可以是DAG,也就是有向无环图,DAG不是区块链,当然你非要把它看成一条链也没毛病,但它是一条没有区块的链!
MerkleDAG

1 MerkleDAG功能
Merkle DAG拥有如下的功能:
• 内容寻址:使用多重哈希来唯一识别一个数据块的内容
• 防篡改:可以方便的检查哈希值来确认数据是否被篡改
• 去重:由于内容相同的数据块哈希是相同的,可以很容去掉重复的数据,节省存储空间
2 MerkleDAG树形结构构建过程
在IPFS网络中,存储文件时,首先会将文件切片,切割成256KB大小的文件。之后循环调用(MerkleDAG.Add)方法构建文件MerkleDAG。 文件hash值创建流程: 1:将切片之后的文件进行sha-256运算 2:将运算结果选取0~31位 3:将选取结果根据base58编码,运算结果前追加Qm 即为最后结果作为文件的46位hash值 根据IPFS底层代码计算,Merkle DAG为多叉树结构,最多为174叉树。
3 DAGService维护
在源代码之中通常使用DAGService维护MerkleDAG,为MerkleDAG提供删除和增加的权限,源代码如下:
- 官网:http://ipfsforce.com
- 公众号:IPFS原力区
- 币快报社群:IPFS原力区
- 微博:http://weibo.com/ipfsforce
IPFS原力区
IPFS原力区是全球第一大IPFS价值生态社区,总部位于上海,聚集了众多技术大咖和IPFS爱好者;IPFS原力区秉持:价值,共建,共赢,荣耀的文化理念;提供全面、精细、优质的IPFS咨询和技术支持,将生态中的爱好者转化为IPFS支持者和参与者。 未来,IPFS原力区做好价值文化基因传播、紧盯人工智能,量子计算,大数据等前沿科技,把IPFS区块链技术随时架设在最新的技术基础之上,推动IPFS生态的健康发展。返回搜狐,查看更多
[转帖]MerkleDAG全面解析 一文读懂什么是默克尔有向无环图的更多相关文章
- [转帖]一文读懂 HTTP/2
一文读懂 HTTP/2 http://support.upyun.com/hc/kb/article/1048799/ 又小拍 • 发表于:2017年05月18日 15:34:45 • 更新于:201 ...
- [转帖]从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路
从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路 http://www.52im.net/thread-1709-1-2.html 本文原作者阮一峰,作者博客:r ...
- 一文读懂,硬核 Apache DolphinScheduler3.0 源码解析
点亮 ️ Star · 照亮开源之路 https://github.com/apache/dolphinscheduler 本文目录 1 DolphinScheduler的设计与策略 1.1 分布 ...
- 一文读懂HTTP/2及HTTP/3特性
摘要: 学习 HTTP/2 与 HTTP/3. 前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何 ...
- 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路
本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...
- kubernetes基础——一文读懂k8s
容器 容器与虚拟机对比图(左边为容器.右边为虚拟机) 容器技术是虚拟化技术的一种,以Docker为例,Docker利用Linux的LXC(LinuX Containers)技术.CGroup(Co ...
- 一文读懂神经网络训练中的Batch Size,Epoch,Iteration
一文读懂神经网络训练中的Batch Size,Epoch,Iteration 作为在各种神经网络训练时都无法避免的几个名词,本文将全面解析他们的含义和关系. 1. Batch Size 释义:批大小, ...
- 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现
一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...
- 一文读懂高性能网络编程中的I/O模型
1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...
随机推荐
- 安装 Autoconf, Automake & Libtool
今天在使用sudo apt-get install命令安装autoconf和automake时,出现了问题,说是不能sudo apt-get install安装这些软件似乎不是最新的.由此,我通过搜索 ...
- /bin/ls: Permission denied
[root@test_node1 ~]# crontab -lno crontab for root[root@test_node1 ~]# cd /home/[root@test_node1 hom ...
- Windows10安装vmware和centos7
1. 下载vmware安装包 地址(vmware版本:vmware workstation 14):http://xzc.197746.com/vmware-workstation-full1413. ...
- Django Rest Framework源码剖析(五)-----解析器
一.简介 解析器顾名思义就是对请求体进行解析.为什么要有解析器?原因很简单,当后台和前端进行交互的时候数据类型不一定都是表单数据或者json,当然也有其他类型的数据格式,比如xml,所以需要解析这类数 ...
- 20155321 《网络攻防》 Exp7 网络欺诈防范
20155321 <网络攻防> Exp7 网络欺诈防范 实验内容 简单应用SET工具建立冒名网站 因为钓鱼网站是在本机的http服务下使用,因此需要将SET工具的访问端口改为http默认的 ...
- CLR回收非托管资源
一.非托管资源 在<垃圾回收算法之引用计数算法>.<垃圾回收算法之引用跟踪算法>和<垃圾回收算法之引用跟踪算法>这3篇文章中,我们介绍了垃圾回收的一些基本概念和原理 ...
- AngularJS+bootstrap-switch 实现开关控件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Luogu P1983 车站分级
(一周没写过随笔了) 这道题有坑! 看到题目,发现这么明显(??)的要求顺序,还有什么想法,拓扑! 将每条路范围内等级大于等于它的点(不能重复(坑点1))和它连一条边,注意起点终点都要有(坑点2),然 ...
- python 回溯法 子集树模板 系列 —— 14、最长公共子序列(LCS)
问题 输入 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) 输出 输出最长的子序列,如果有多个,随意输出1个. 输入示例 belong cnblogs 输出示例 blog ...
- python 回溯法 子集树模板 系列 —— 3、0-1背包问题
问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大? 分析 显然,放入背包的物品,是N个物品的所有子集的其 ...