【原创】什么是IPFS(练手用)

引言:

号称可以替代HTTP协议的IPFS技术究竟几何?本文尽量以简单通俗的语言进行描述(练手用)

一、IPFS定义

IPFS全称InterPlanetary File System(星际文件系统),是由Protocol Lab(协议实验室)开发的一项基于P2P网络的,旨在解决传统HTTP协议导致的网络集中化与数据不稳定问题的新型网络协议。

想要知道IPFS的优势,首先我们要了解HTTP协议存在哪些劣势:

二、HTTP的短处

NeXTCube PC

距离世界上第一台HTTP协议的服务器NeXT开机运行已有数十年,如今这台服务器静静躺在博物馆中,主机上的一张纸条格外醒目——不要关机!诚如纸条所言,HTTP协议中的服务器不能”关机“,关机即意味着其他电脑无法访问此服务器上的数据,也意味着未保存数据的丢失,表现在用户端上,即是大家常见的”404Not Found“。简单来说,HTTP协议存在着一下3问题:

 1. HTTP高度中心化,使用成本高。想要通过HTTP协议下载文件,用户必须向中心化的服务器发送请求。简单的例子便是,用户在成都点开某视频网站观看视频,由于网站只有一个服务器,同一时间观看人数过多,导致视频观看卡顿,哪怕网站服务器就在家门口。如果想解决卡顿,传统的方法是花钱架设更多更好的服务器,这无疑是巨大的成本。

2. HTTP中的文件经常被删除。不论是出于审查需要,还是出于储存成本,基于HTTP协议构建的服务器几乎无法永久储存文件,十年前的网页,多数已经无法打开,即使打开其中的图片也无法加载,其原因便是网站服务器出于经济压力或者行政压力删除文件。

3. 基于HTTP的互联网高度依赖根服务器。现在全球共有13台IPv4根服务器,9个在美国,2个在欧洲,1个在日本,根服务器管理着全球互联网的域名与地址。一方面,根服务器可以通过限制访问与拒绝服务令某些网页或某些用户无法使用互联网;另一方面,根服务器被攻击也意味着互联网的剧烈波动,甚至导致全球互联网无法正常工作。根服务器实际上代表着以”自由“为代表的互联网走向了”集中“。

上述3个问题令HTTP协议及构建在协议之上的互联网存在巨大的隐患,虽然出于经济与政治的平衡,整个互联网仍然安然无恙的运行中,但一旦平衡被打破,互联网也将脆弱不堪,如伊朗曾因攻击导致全国断网,令国内动荡的加剧。以一种新型的协议改进或取代HTTP刻不容缓。在这种背景下,IPFS诞生了。

想要知道IPFS的优势,首先要明白IPFS是如何工作的。

三、IPFS的工作原理与优势IPFS分片

IPFS储存原理示意图,新文件与已有文件只有Hash7的结果不同,故新文件只储存Hash7部分

1、每一份储存在IPFS上的文件都将被分片,如果分片中的文件与网络中已有文件的哈希值相同,那么该部分将不再上传;分片的文件将以数个备份储存在整个IPFS网络中,防止单一分片因网络原因无法下载。最终,用户下载的文件也是通过下载各个分片完成下载。.

2、IPFS为每一份储存在其网络上的文件和分片赋予一个独立的、不重复的哈希值(哈希值的含义将在以后的文章详细讲述),通过此哈希值,在整个网络内寻找此文件,不同于HTTP是基于网络域名来寻找文件,这种方式避免了服务器关闭导致的文件下载失败情况。

3、 储存的文件若发生更改,每一次变更的历史纪录都将保存以便回溯;同时储存的哈希值可以通过域名系统IPNS映射为域名方便查询。

4、如需下载文件,首先找到这个文件所属的哈希表,根据表上的各个分片哈希进行下载,最后组合即可完成。

通过上述4个方式,IPFS完成了文件的储存、查询、下载,可以同传统HTTP协议一般进行服务器的假设与运行,而基于IPFS的互联网,将能通过以下途径解决传统HTTP的缺点:

IPFS的优势

 1、下载速度快,不依赖于主干服务器与中心化网络。由于下载文件是基于分片的哈希值同时下载多个分片,故下载速度同P2P下载(如迅雷)一般迅速;而基于文件寻址也令下载不经过某个中心服务器,可以从物理距离与网络距离最近的节点下载,大大减少延迟。

2、储存空间价廉丰富。一方面,IPFS网络利用Filecoin激励层促使矿工们租赁自己的硬盘与带宽,利用人性的逐利行为,促使矿工不断发掘更低成本的挖矿方式;另一方面,通过文件分片的哈希值剔除冗余文件,相比传统云储存项目,大大优化了网络的储存能力。以上两点共同降低了用户使用与储存成本。

3、安全。当中心化的网络节点受到大量访问请求时极易宕机(即ddos攻击),而提高抗DDOS攻击能力需要花费大量的成本。在IPFS网络中,由于所有节点都是平等的,资源储存在多个节点中,即使数个节点宕机其余节点仍能负担起整个网络的需求。

 4、隐私而开放。隐私上,IPFS基于P2P网络构建,数据交流不经过中心化机构监管,文件储存以哈希和用户私钥加密,有效避免了文件因监管或利益因素而被第三方删除。而开放的分布式网络,文件的交换记录可以被查询,IPFS的复制证明甚至可以知道上传的文件是否被他人所复制,同时激励层Filecoin也使用户上传的文件可以用以交换,促进资源流动。

IPFS网络,不同于其他已有的云储存项目亚马逊云、storj、maidsafe等,IPFS是一个底层架构,同IPNS(域名系统),IPLD(寻址系统),Filecoin(激励层),以及libp2p与Multiformats等,共同构建了一幅对等是网络的蓝图。基于此蓝图,我们可以构建个人的隐私云盘而不用担心封禁;制作不会404的网页;用作虚拟机的根文件系统;构建加密通讯平台……IPFS能做到这些,是因为传统计算机的系统由三个方面组成:“输出”、“处理”、“储存”,而IPFS从储存角度入手,改变现有的中心化储存格局,提升整体效率。

四、IPFS的未来担忧

然而,我们从辩证法中会学到,所有的事物不会是一成不变的美好,IPFS同理。我们会经常接触到IPFS优良的一面,但我们也要了解到IPFS的局限性,以及它未来的不可控性。

1、来自中心化机构的压力。IPFS系统杜绝了中心化结构的审查与监管,将权力下放到各个节点,这样的情景在近代有类似的情形——不论是法国大革命还是十月革命,本质都是将上层权力下放,解放底层人民的生产力。然而,改革的阻力也是非常巨大的,没人愿意放弃自己手里的蛋糕,因此IPFS在发展过程中一定会遭遇中心化机构施加的压力,甚至会有直接的对抗。另外,我们无法肯定IPFS所处的时代是欧文新和谐公社的空想社会主义阶段,还是列宁十月革命阶段,只能让时间来证明一切。

2、节点质量的参差不齐。所有P2P网络都需要面对一个问题:如何在节点作恶或失效情况下维持运转,即我们常说的拜占庭将军问题。中心化机构中因中心有绝对权力可以进行调度以解决此问题,而IPFS网络中为了缓解此问题提出了时空证明、复制证明,并以节点失信即罚没押金行为进行处罚。然而网络早期不乏有节点使用家用硬盘而非企业硬盘进行储存,极易导致数据丢失,一方面影响网络稳定性,一方面降低用户使用体验。并且经济惩罚在面对某些力量(如自然、行政)时不一定具备优势。如何平衡节点与用户间的天平,IPFS还有一段路要走。

3、网络中心化问题。同比特币的发展一般,效率与公平始终是此消彼长之势。矿工们为了挖矿的效率,最终一定会自发联合形成联盟甚至合并为几个节点;用户与开发者为了网络稳定性与隐私性,更希望网络维持一定的去中心化程度。这一论点同样适用于IPFS网络,比特币尚有core开发者与比特大陆矿霸以及数个小矿工联盟和开发者联盟及用户的竞争,IPFS网络能否发展出类似比特币的群雄割据局面,甚或优于比特币形成更公平的去中心化结构,我们无从得知。储存文件的中心化会重蹈HTTP的覆辙,我们只能希望IPFS作为HTTP的颠覆者,不会成为第二个HTTP。

五、总结

IPFS协议令网络的自由与独立精神再次辉耀,在可见的未来,IPFS与HTTP共存并非空想,至于前者能否取代后者,我们无法定夺。但我相信IPFS的潜力,去中心化已成世界的趋势,未来已经来临,只是尚未流行。

参考文献:

  • IPFS——它能取代HTTP协议? 苏江同学 简书 https://www.jianshu.com/p/ddccae89a49a
  • 什么是IPFS? 飞向未来 微信公众号:IPFS指南(ipfs_guide)
  • 什么是IPFS?为什么说它将取代HTTP?张灏楠 微信公众号:IPFSFAN(ipfsfan)
  • IPFS – Content Addressed, Versioned, P2P File System (DRAFT 3),  Juan Benet, https://github.com/ipfs/papers/raw/master/ipfs-cap2pfs/ipfs-p2p-file-system.pdf

【搬运】区块DAG的范式入门

概要:

与大众的普遍观点相反,将 DAG(有向无环图)用作分布式账本并不会消除工作量证明式的挖矿,也不会消除区块和交易手续费。它的目的是利用 DAG 的结构特性帮助解决区块链的孤块率问题。DAG 解决这个问题并且改进可扩展性的能力取决于为了处理交易一致性而额外实现的规则,以及其它设计上所作的选择。

Directed acyclic graphs 有向无环图

DAG 并不是一个新概念或是技术,也不是一种共识机制;它纯粹是起源于几个世纪前的一种数学结构。在技术上,DAG 是一种包含有向边但不含环(即没有一条可以从一个顶点出发然后又回到它自己的路径)的图。

字节雪球

字节雪球Byteball的DAG结构

在分布式账本的环境中,区块 DAG 一种有特殊含义的 DAG。在这种 DAG 中,顶点代表区块,边代表区块对它们父辈的引用。显然,在区块 DAG 中,区块可能有多个父辈,而不是只有一个;下文会对此进行详细描述。首先,让我们回顾一下孤块率问题。

区块链的孤块率问题

有许多因素制约着区块链的可扩展性,包括处理速度、磁盘 I/O、RAM、带宽,以及新节点的同步(即新节点刚加入网络时将整条区块链下载同步到自己本地的过程)。虽说可以通过改善硬件和技术来突破这些限制,但一个最主要的瓶颈是在协议层面:孤块率。孤块是指由于不可避免的网络延迟而在最长链以外创建的区块。

加快区块创建速度或者增大区块大小会提高孤块率,即在一个新区块传播遍网络之前,很可能会有其它新的不引用它的区块被创建出来(即广义的“分叉”)。孤块率增大会导致安全性降低,这是公认的。如果有越多的诚实区块因为自然分叉的原因导致自己不在最长链中,那么这条链就越不安全。^1 (注:这里的自然分叉是指由于协议本身的特性和网络延迟导致的分叉,而非攻击导致的分叉。在最长链规则下,分叉越多,攻击者为了使自己成为最长链而需要的算力就越小,因此最长链就越不安全。比如在有三条分叉的情况下,攻击者只需超过全网三分之一的算力即可攻占最长链。因此从协议本身的角度来讲,自然分叉越少越好。)

区块链协议一般会规定一个最大区块大小和一个常数的出块率从而应对网络延时并且将孤块的数量降到最低。这种对交易吞吐量和等待时间下限的人工限制(在比特币的情况下,这个限制是每秒3至7个交易和数十分钟的确认时间)对区块链来说是一副苦药丸——它阻止了链上扩容,但保证了自然分叉和孤块极少出现,因此主链是安全的。然而 DAG 可以通过其它方式处理孤块问题。

区块 DAG 范式

DAG 结构有机地吸收了分叉这一概念,所以有必要考虑 DAG 是否可以比链式结构的区块链做得更好。于是,以中本聪的工作量证明为基础,为了生成一个区块 DAG,我们需要对挖矿协议做出一个改变:区块可以引用多个父辈,而非一个单一的父亲。一种经典的扩展账本的方式是让区块引用图中(产生区块的挖矿者在本地能看到的)的所有末端,而非依照中本聪的原始协议只引用最长链的末端。和在区块链中一样,区块会被立即发布。

然而,和区块链不同的是,区块链在构建时会一直维护着一致性(链中的每个区块添加的交易都与链中的父辈一致),而区块 DAG 包含了来自不同“分叉”的区块,所以可能包含许多冲突交易。因此,DAG 或是区块 DAG 本身并不能被认为是一个“解决方案”或是“新方法”或是“新协议”。区块 DAG 只是一个用来设计共识协议的框架,而基于它设计的协议与链式协议相比可能(也可能不)具有同等的安全性和更高的扩容性。^2因此,我们需要一种方法来恢复一致性;换句话说,区块 DAG 系统需要用新的共识协议来取代中本聪的最长链共识。

通过排序达成共识

如果一个分布式系统对系统中所有事件的顺序达成共识,我们就可以很容易地将这个共识扩展到状态的共识——只需要简单地按照达成共识的顺序遍历所有交易,并且接受那些与已经被接受的交易一致的交易。这种方法使网络在构建区块链的过程中就一直维护着一致性。我们现在要做的就是为系统中的所有事件,也就是 DAG 中的所有区块,定义一个排序协议。所有节点都会遵从这个协议从而在区块顺序上最终达成共识。

DAG 的自然拓扑本身就已经为区块引入了偏序排序:若在 DAG 中有一条路径是区块 X引用区块 Y,即可证明区块 Y 是在区块 X 之前被创建的,因此在全局排序中应该排在 X 前面,反之亦然。因此,我们只需要为并行创建的区块(相互之间没有路径相连的区块)所组成的集定义一种顺序。这种范式起源于耶路撒冷希伯来大学开发的基于区块 DAG 的协议(InclusiveSPECTRE,和 PHANTOM);这些协议分别定义了自己的算法,每个算法都对 DAG 中的区块进行排序,并按顺序遍历 DAG,消除与已经被遍历过的交易相冲突的交易。

区块 DAG 的优势

1. 确认时间可以以秒计算,至少是在有可见的双花和冲突交易时

2. 交易吞吐量可以变得很大,只受限于网络条件和终端能力;这样衍生出的好处是手续费会降低

3. 因为每天可以创建大约 100,000 个区块,所以矿工加入矿池的动机也会变弱,这进一步促成了挖矿去中心化

4. 规避了孤块的风险,从而带来很多额外好处(比如与第二层兼容)(注:第二层是指侧链或链下的解决方案,即在主链之上,新建一层辅助的平台和协议,比如闪电网络。)

5. 通过奖励所有区块,消除链上和链下区块的差别,从而消除自私的挖矿行为

区块 DAG vs. 无区块 DAG

市场上几乎每种基于 DAG 结构的加密货币(IOTA、字节雪球、Nano等等)都偏离了中本聪的区块链范式。这种偏离不仅体现在使用 DAG 结构上,还体现在经济学层面的设计上:有的将挖矿委托给用户,有的完全去除了工作量证明挖矿,许多货币没有交易手续费,并且实际上都没有区块——它们将一个个交易直接连在一起。虽然这些设计决策可以用在 DAG 系统中,但它们的特性和 DAG 完全无关。实际上,这些项目可能只用到了 DAG 特性的很小一部分。这些 DAG 系统的兴起很大程度上影响了社区对 DAG 的看法。一方面,狂热支持派将 DAG 技术吹捧为“区块链3.0”;另一方面,怀疑论者对其不屑一顾。可是几乎所有人赞扬或批评的都是现存 DAG 协议在经济层面的设计决策,而这和 DAG 结构根本毫无关系。

比如,在最近的一个问答中,著名比特币专家 Andreas Antonopoulos 将 DAG 描述为和工作量证明相对的“另一种共识机制”。“如果你没有将工作量证明挖矿去中心化,你其实并不需要区块。” Antonopoulos 说道,“你只需要直接将交易连起来,这就是有向无环图的基础。”(点击查看 Andreas Antonopoulos 的问答视频

但是上文已经解释过,DAG 并不是要取代工作量证明或区块。DAG 只是一种数学结构。只是这种数学结构恰好被一些偏离了中本聪的工作量证明系统的项目所使用。与此相反,区块 DAG 是要将 DAG 应用在基于中本聪的系统中(并且特别要强调的是,区块 DAG 使用工作量证明),只是将数据结构和共识层重新设计了一遍。比特流(BitTorrent)和 Chia 的创始人布拉姆·科恩(Bram Cohen)在推特上发表的尖锐评论更接近本质:

有向无环图(DAG)是一种数据结构,而不是一种工作量证明。早在2005年它就被用在 Git 中。它的起源则更是久远。DAG 并不是什么新奇的、引人注目的,或是让人兴奋的东西。

——布拉姆·科恩,2018年1月31日中午12点

的确,DAG 和区块链的不同纯粹只是在结构上,并且区块链也不是什么新奇的、引人注目的,或是让人兴奋的东西。中本聪系统的新颖之处是在它的全局设计上:工作量证明挖矿、区块、交易,以及一个在缺乏信任的系统和需要依靠物质激励的参与环境中达成共识的协议。像 SPECTRE 和 PHANTOM 这样的区块 DAG 系统比中本聪的革新设计更为通用和创新的地方在于:它们独特的共识协议对 DAG 的排序是不可翻转的,因此避免了孤块带来的安全性和扩容性之间的取舍问题。

脚注:

^1 该论述的证明可参考 [a][b][c]

^2 比如,如果一个 DAG 协议对交易进行排序时将最长链里的交易全部排在其余交易的前面,那它的安全性与扩容性的折衷关系就和区块链一样。

本文搬运自DAGFans.org 如有侵权请联系:mylifeform@qq.com,我们将会在24H内删除。