美文网首页磨链(mochain)社区分享我爱编程
磨链(mochain)社区-4.9分享-IPFS简介

磨链(mochain)社区-4.9分享-IPFS简介

作者: 磨链社区 | 来源:发表于2018-04-09 18:37 被阅读17次

    群内分享

    1.干货 | 2018年3月以太坊的扩展现状 

    2.待字闺中分享-十分钟讲清楚IOTA和DAG 

    3. 零知识证明、并行零知识证明和非交互式零知识证明汇总 

    4.关于区块链,你绝不能忽视的4个安全问题和5招应对方法! 

    5.社区成员-陈明艳分享-【第六期】区块链每周资讯播报

    社区内目前工作:

    磨链社区-目前计划 

    1.登链科技合作。 

    坐标:珠海 

    岗位:DApp 开发工程师(可实习) 

    工作内容: 

    1. 主要负责智能合约及DApp前后端开发; 

    招聘要求: 

    1. 扎实的数据结构、数据库及算法基础; 

    2. 英语阅读能力良好,至少CET-4以上; 

    3. 至少熟悉一门主流语言:如Python/PHP/Java/JS/Go/C/C++ ; 

    4. 熟悉Linux 或 Mac 平台及熟悉Git加分 

    待遇:面谈 

    联系人:熊丽兵 xlb@niuwasoft.com 

    同时招募远程兼职,共同参与项目开发。 

    有意向的联系我下。这个不是一个学习计划,是实际做项目,有小题目测试,有意向联系我。

    2.《磨链入门区块链》共同参与写一些东西,目录大纲完善中,一个长期项目。 

    招募条件: 

    1.需要一定的区块链基础。 

    2.对上述任何一方面有较为深入理解。 

    3.每周能保证一定的空余时间来折腾。 

    4.了解github相关 

    5.人员进行筛选,时间周期比较长。 

    有意向联系我。

    3.磨链在线课程 

    对自己擅长方面有一定的沉淀,愿意开设在线课程,会考虑和一些专业培训机构合作,要求有一定的一线经验,实实在在分享课程。有兴趣的联系我。有偿工作。

    磨链(mochain)计划各学习小组动态

    磨链计划相关

    IPFS简介

    原文链接:http://mochain.info/wordpress/index.php/2018/03/12/qian_xi_ipfs_de_cun_chu_yu_du_qu/ 

    作者-磨链社区-陈德君

    IPFS简介

    本篇文章主要想通过纯理论的方式分析IPFS的原理,尽量不使用命令和代码。关于IPFS的诞生以及取代HTTP的可能性分析,已经有太多大神写过文章了,这里就不再赘述了。感兴趣的前往这里了解http://ipfser.org、以及IPFS白皮书。 

    一、 什么是IPFS

    IPFS, 星际文件系统 ( InterPlanetary File System )。2014年开始由Protocol Labs (协议实验室)在开源社区的帮助下发展。其最初由Juan Benet设计。是一个旨在创建持久且分布式存储和共享文件的网络传输协议。

    是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。1

    内容可寻址:通过文件内容生成唯一哈希值来标识文件,而不是通过文件保存位置来标识。相同内容的文件在系统中只会存在一份,节约存储空间

    版本化:可追溯文件修改历史

    点对点超媒体:P2P 保存各种各样类型的数据

    可以把 IPFS 想象成所有文件数据是在同一个 BitTorrent 群并且通过同一个 Git 仓库存取。

    二、 IPFS的存储与读取

    接下来先基础地介绍下IPFS是怎么进行存储和读取的。IPFS文件的存储和读取与BitTorrent上传下载原理相似。

    IPFS采用的索引结构是DHT(分布式哈希表),数据结构是Merkle DAG(Merkle 有向无环图)。

    2.1 单文件存储

    研究过文件系统的人都知道索引和扇区这两个概念,如:NTFS一个扇区通常是4K,真正的文件数据都是保存在扇区里面的,找到这些扇区的方式就是建立索引(确切的说是高效的索引),IPFS也是一个文件系统,不同的是,IPFS是没有存储上限的,且不存在空间回收的功能。IPFS存储文件时,如图(没天赋,略丑),会经历以下几个步骤:

    1. 把单个文件拆分成若干个256KB大小的块( block,这个就可以理解成扇区 );

    2. 逐块(block)计算block hash,hashn = hash ( blockn );

    3. 把所有的block hash拼凑成一个数组,再计算一次hash,便得到了文件最终的hash,hash ( file ) = hash ( hash1……n ),并将这个 hash(file) 和block hash数组“捆绑”起来,组成一个对象,把这个对象当做一个索引结构;

    4. 把block、索引结构全部上传给IPFS节点(这里先不介绍细节),文件便同步到了IPFS网络了;

    5. 把 Hash(file)打印出来,读的时候用;

    PS: 这里可以看出IPFS计算文件得到的hash,其实和我们平时计算hash的方式不一样,而且最终的结果也不一样!

    这里还漏掉了一个小文件的处理逻辑,和NTFS等文件系统类似,小文件(小于 1KB) 的文件,IPFS会把数据内容直接和Hash(索引)放在一起上传给IPFS节点,不会再额外的占用一个block的大小。

    现在,已经把文件的原始数据和文件的索引(即hash)上传到IPFS网络了。前面已经讲过,IPFS是不支持空间回收的,文件一旦同步到IPFS,将永久的存在。看起来这样会招来一个严重的后果就是,如果频繁的编辑大文件,每编辑一次就要重新同步,岂不是会过度浪费空间!?举个例子:

    本地有一个1G的大文件File1,已经同步到IPFS了,后面在这个文件File1后面追加了1K的内容,现在需要重新同步这个文件,算下来需要花费的空间应该是:1G+1G+1K;

    然而,事实并非如此。IPFS在储存数据的时候,同一份数据只存储一次,文件是分块(block)存储的,hash相同的block,只会存储一次,也就说,前面1G的内容没有发生改变,其实IPFS并不会为这些数据分配新的空间,只会为最后1K的数据分配一个新的block,再重新上传hash,实际占用的空间是: 1G + 1K ;

    不同的文件有很多数据是存在重复的,如不同语言字幕的电影,影音部分相同的,只有字幕部分不一样,当两个不同国家的人都在上传同一部电影的时候,这些文件在分块(block)的时候,很有可能有大部分block的hash是一致的,这些block在IPFS上也只会存储一份,这样一来就可能会有很多文件的索引指向同一个block,这里就构成了前面提到的一个数据结构——Merkle DAG(Merkle 有向无环图)。下面盗个图,形象的说明下DAG是个什么东东。

    因为所有的索引上都保存了hash,所以Merkle DAG具有以下特点(从白皮书上扒下来的):

    1. 内容可寻址:所有内容都是被多重hash校验和来唯一识别的,包括links。

    2. 无法篡改:所有的内容都用它的校验和来验证。如果数据被篡改或损坏,IPFS会检测到。

    3. 重复数据删除:重复内容并只存储一次。

    2.2 文件树存储

    IPFS支持目录结构,存储目录的方式很简单:

    先把目录下所有的文件同步到IPFS网络中去,为所有的文件hash建立一个别名,这个别名其实就是本地文件名,把hash和别名“捆绑”在一起组建成一个名为 IPFSLink 的对象;

    把该目录下所有的 IPFSLink 对象组成一个数组,对该数组计算一个目录hash,并将数组和目录hash拼成一个结构体,同步到IPFS网络;

    如果上层还有目录结构,则为目录hash建立一个别名(就是目录名),把目录hash和别名“捆绑”在一起组建成一个 IPFSLink 的对象,重复从步骤2开始执行;

    把目录hash打印出来,读取的时候用;

    由上可以看出,对于IPFS而言,存储目录和文件其实是一样的处理方式,IPFS甚至根本没有关心节点想要存储的是一个目录还是一个文件。

    2.3 单文件读取

    IPFS取文件的方式,就比较简单了,就是存储方式的一个逆推过程:

    根据hash搜索该hash的索引结构,即找到该文件hash 的 block hash数组(这一步由IPFS网络完成,是旷工该干的事情),下载下来;

    此时已经得到了 block 的索引,根据block hash,搜索block所在的节点位置,下载下来;

    本地拼装block:根据block hash数组的顺序,把文件拼凑好。 

    block的下载是IPFS的核心,这中间涉及到很多复杂的技术细节,因为个人能力有限,这里没有展开讨论,只是先一笔带过。希望不会误导新入门的读者,以为IPFS就只干了这么点事情!

    2.4 文件树读取

    目录的读取也是目录存储过程的逆推:

    根据hash搜索该hash的索引结构,找到该目录的 IPFSLink 对象数组,即目录下的子列表;

    遍历数组,如果IPFSLink对象是文件,则取出文件的hash下载该文件;

    如果IPFSLink对象是目录,取出目录hash,重新从步骤1开始执行

    三、 IPFS的未来

    总的来说,IPFS具备很多良好的特性,如:自带高可用属性,不会宕机(除非全球停电或者断网)、抗DOS、防篡改……不需要购买昂贵的防火墙设备来做这些事情。其他的优点请自行去 ipfser.org get!

    http://ipfser.org/2017/12/06/a4/

    磨链(mochain)学习小组清单

    PS:想加入学习小组,请加磨链组织者微信(jackyjin09)。欢迎每一位区块链技术爱好者加入磨链,一块琢磨区块链技术

    关于磨链和相关合作

    磨链”---取磨炼之意,旨在普及区块链技术,磨炼技术,更好投身区块链行业。有兴趣一块琢磨区块链技术,联系笔者微信(jackyjin09)。 

    磨链社区是一个纯粹的技术社区,欢迎相关技术合作,在不违反原则的前提下,积极参与合作。 

    你可以在这里找到我们: 

    磨链社区公众号: 

    1. 磨链社区:http://mochain.info 

    2. Github : https://github.com/mochain 

    3. Gitter 聊天: https://gitter.im/mochain 

    4. 知识星球: https://t.zsxq.com/M3BMVZN 

    5. 知乎:https://www.zhihu.com/people/mochain 

    (持续更新中)

    相关文章

      网友评论

        本文标题:磨链(mochain)社区-4.9分享-IPFS简介

        本文链接:https://www.haomeiwen.com/subject/xuzihftx.html