今天带大家来深入探索一下IPFS的核心数据结构Merkle DAG

什么是 Merkle DAG?

Merkle DAG是IPFS系统的核心概念之一,当然Merkle DAG并不是IPFS团队发明的,它来来自于Git数据结构,ipfs团队进行了改造(这一点ipfs团队一直是一个很努力的团队,并不是直接拿来使用,而是在此基础上修改更适合项目的使用)。

Merkle DAG的全称是 Merkle directed acyclic graph(默克有向无环图)。它是在Merkle tree基础上构建的,Merkle tree是由美国计算机学家merkle于1979年申请的专利。Merkle DAG跟Merkle tree很相似,但不完全一样,比如:Merkle DAG不需要进行树的平衡操作,非叶子节点允许包含数据等。

Merkle DAG

Merkle DAG拥有如下的功能:

  • 内容寻址:使用多重哈希来唯一识别一个数据块的内容

  • 防篡改:可以方便的检查哈希值来确认数据是否被篡改

  • 去重:由于内容相同的数据块哈希是相同的,可以很容去掉重复的数据,节省存储空间

IPFS的数据对象格式如下:

type IPFSLink struct {

Name string             // link 的名字

Hash Multihash        // 数据的加密哈希

Size int                    // 数据大小

}

Type IPFSObject struct {

links []IPFSLink        // link数组

data []byte               // 数据内容

}

IPFS让应用可以完全控制对象的数据字段,也就是说应用可以随意定义自己的data类型和结构,甚至可以是一些IPFS系统无法理解的数据结构,灵活度非常的大。

下面以

IPFS: Merkle DAG数据结构的更多相关文章

  1. 什么是IPFS?(三)

    前两篇介绍了IPFS的基本概念, 那么IPFS都可以用来做什么? 如果你认为仅仅是CDN, 永久的web? Are you kidding me ? IPFS可是要 --改变世界的... --变世界的 ...

  2. IPFS - 可快速索引的版本化的点对点文件系统(草稿3)

    摘要 星际文件系统是一种点对点的分布式文件系统, 旨在连接所有有相同的文件系统的计算机设备.在某些方面, IPFS类似于web, 但web 是中心化的,而IPFS是一个单一的Bittorrent 群集 ...

  3. IPFS中文简介

    ipfs是什么? 它是一个协议也是一个网络,已经运行了2年半,并非虚无缥缈的空气. 它像比特币网络一样,并没有发明什么新技术,他只是将很多种技术(P2P网络技术,bt传输技术,Git版本控制,自证明文 ...

  4. Merkle Tree学习

    /*最近在看Ethereum,其中一个重要的概念是Merkle Tree,以前从来没有听说过,所以查了些资料,学习了Merkle Tree的知识,因为接触时间不长,对Merkle Tree的理解也不是 ...

  5. Merkle Tree 概念

    Merkle Tree 概念 来源 https://www.cnblogs.com/fengzhiwu/p/5524324.html /*最近在看Ethereum,其中一个重要的概念是Merkle T ...

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

    Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶节点 ...

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

    Merkle Tree概念  Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶节 ...

  8. 区块链~Merkle Tree(默克尔树)算法解析~转载

    转载~Merkle Tree(默克尔树)算法解析 /*最近在看Ethereum,其中一个重要的概念是Merkle Tree,以前从来没有听说过,所以查了些资料,学习了Merkle Tree的知识,因为 ...

  9. IPFS初窥

    虽然区块链有很多令人兴奋的特性,但是也有其固有的缺点.比如,文件或者长度较长的文本信息就不适合存储在链上.那么如何解决这个缺点呢?一个解决方案就是IPFS(Interplanetary File Sy ...

随机推荐

  1. AGC010 - B: Boxes

    原题链接 题意简述 给出一个由个数构成的环,每次可以选择一个位置并从这个数起顺时针依次对每个数-1,-2,-3,-,-n.问能否将所有数全变为0. 分析 考虑一次操作对环带来了什么影响. (在后加一个 ...

  2. 用感知机(Perceptron)实现逻辑AND功能的Python3代码

    之所以写这篇随笔,是因为参考文章(见文尾)中的的代码是Python2的,放到Python3上无法运行,我花了些时间debug,并记录了调试经过. 参考文章中的代码主要有两处不兼容Python3,一个是 ...

  3. mysql主键,外键,索引

    主键 唯一而非空,只能有一个 作用: 1.唯一的标识一行  2.作为一个可以被外键有效引用的对象  3.保证数据完整性 设计原则: 1. 主键应当是对用户没有意义的.如果用户看到了一个表示多对多关系的 ...

  4. R语言︱文件读入、读出一些方法罗列(批量xlsx文件、数据库、文本txt、文件夹)

    笔者寄语:小规模的读取数据的方法较为简单并且多样,但是,批量读取目前看到有以下几种方法:xlsx包.RODBC包.批量转化成csv后读入. R语言中还有一些其他较为普遍的读入,比如代码包,R文件,工作 ...

  5. CentOS时钟同步服务器

    ①本地时钟服务器需要安装chrony服务,可以通过yum.rpm.源码包安装,chrony支持C/S模式 ②编辑本地时钟服务,使其指向提供标准时间服务器,例如:中国国家授时中心NTP服务器. 修改配置 ...

  6. 复制粘贴之不带插件的jquery

    一.实现点击按钮,复制文本框中的的内容 <script type="text/javascript"> function copyUrl2() { var Url2=d ...

  7. C#图解教程

    初识本书是在知乎,许多网友推荐它作为 C# 入门书籍. 本书的最大特点是插图丰富,许多复杂的概念,一副插图就解释得通透明了. 本书另外一个隐藏特性是作者有着 C/C++ 经验,书中经常提到它们与 C# ...

  8. ASP.NET WebForm 通过 PagedDataSource 实现 Repeater 的分页

    1.效果图&代码说明   1.效果图     2.代码说明 1.翻页按钮         前台两个LinkButton(上一页.下一页),设置不同的CommandName.CommandArg ...

  9. Java中==与equals的区别及理解

    区别: "==" 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致. 如果两个对象的引用相同时(指向同一对象时)," ...

  10. 圆方树简介(UOJ30:CF Round #278 Tourists)

    我写这篇博客的原因 证明我也是学过圆方树的 顺便存存代码 前置技能 双联通分量:点双 然后就没辣 圆方树 建立 新建一个图 定义原图中的所有点为圆点 对于每个点双联通分量(只有两个点的也算) 建立一个 ...