请选择 进入手机版 | 继续访问电脑版

Hi,Tokens

 找回密码
 立即注册
查看: 590|回复: 2

IPFS 文章汇编

  [复制链接]

30

主题

76

帖子

267

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
267
发表于 2018-4-13 09:51:08 | 显示全部楼层 |阅读模式
IPFS是什么?为什么说它将取代HTTP?
虚拟货币资讯 2015-10-01 19:43 发布在 区块链 19 65693
今年年初Internet Archive发布了对分布式Web方案的征集,新的Web将会变得速度更快,安全性更高,更可靠,并且更加持久。对此我们感到兴奋不已,同时也将立刻踏上探索Web未来的旅途。
通过和Protocol Labs合作,Neocities成为了在生产中使用IPFS的最主要力量。目前Neocities的所有网站都可以通过世界上任意一个IPFS结点浏览和归档,即使Neocities关闭或撤下了某个站点,该站点也仍然可以被有效访问。支撑Neocities网站的IPFS结点越多,这些网站的可靠性越强(冗余度越高),对我们的集中依赖也就越少。
那么什么是IPFS呢?让我们来看一下它的README的内容:

IPFS(The InterPlanetary File System)是一种点到点的分布式文件系统,它连接的计算设备都拥有相同的文件管理模式。从某种意义上来说这个概念跟Web的最初理念很类似,但是实际上IPFS更像是互相转发Git目标的单个Bittorrent用户群。IPFS具备成为internet子系统的素质,通过合理配置可以完备甚至替代HTTP。这听起来已经有些不可思议,但其实它可以做到更多。
IPFS的开发目前处于alpha试验阶段,还没能替代现存的网站存储系统。就像其它复杂的新技术一样,我们有很多改进要做。但IPFS不是空想,它一直在实际运行着,你可以试着在自己的电脑上配置IPFS,为Neocities网站的访问用户提供服务,你的加入或许会延续某个网站的寿命。

尽管IPFS的开发还不十分成熟,但我仍然要表达一个大胆的观点:IPFS会取代HTTP(和其他一些组件一起)。虽然取代HTTP听起来很荒谬,但是我们应当看到HTTP已经很破旧了,继续长期甚至永远地使用HTTP才是更荒谬的事。所以我们应当应用当今计算机技术,着力解决分布式带来的诸多问题,为Web服务设计更好的协议。
1、HTTP的缺陷
HTTP(超文本传输协议)是全世界统一的全局信息格式协议,它的制定为分发和显示信息提供了规范。HTTP将发布信息的成本降到了最低,扰乱了经济、政治、文化管理机构对信息(音乐、思想、视频、新闻、游戏等等)传播的控制。然而通过使获取信息的渠道更加平等、过程更为容易,HTTP实际上使我们的文化产业更加蓬勃有生机,很难想象没有了它生活将会变得怎样。
HTTP堪称史上最伟大的发明之一,我永远爱它。但是由于在可分布性和可持久性方面的缺失,它多次在我们面前崩溃,因此难以成为人类知识总和的永久载体。HTTP分发内容的方式在根本上是有缺陷的,尽管经历了性能调优、CA证书SSL以及其它一些手段,也都没能改善。HTTP/2的改进在一定程度上缓解了缺陷,但是保守的升级并不能根本地解决问题,反而突显了HTTP的老旧。因此我们要采用一种新的基础协议代替HTTP来治理网络环境,提供更好的Web服务。我非常希望IPFS能成为那个替代者。
HTTP是脆弱的
上图是Tim Berners-Lee在CERN的NeXT电脑,是世界上第一台HTTP协议的Web服务器。主机箱上贴着一张醒目的纸条,上面写着“这是一台服务器,不要关机!”不能关机是因为其他几台Web服务器正和它保持着连接,依赖于它运转。一旦这台电脑关机或无响应,连接就会中断,站点间的联系会被打破,访问的内容也随之消失不见。这就是HTTP最大的问题所在,它的腐蚀性。Tim的NeXT电脑现存于一家博物馆,是最早被淘汰的Web服务器之一。
下图是使用Web时常见的场景:
即使没有读过HTTP协议的具体内容,大多数人也都了解404错误意味着什么。它是HTTP协议的错误码,表明网页不在服务器的指定位置。能够见到404错误说明你还有一定的运气,因为有些时候服务器连这样的信息也不会显示。更可怕的是除非Internet Archive做了备份,否则要访问的网页可能永远也找不到,就这样丢失了。通常一个网页诞生的时间越早,回应404错误的可能就越大。就像一个冷血的数字墓碑,埋葬了当时的认知、美感或者愚昧。
90年代以后建立的网站中,我最喜欢的是Mosh to Yanni,不过今天的它只能作为一个反面的例子出现,告诉我们HTTP在维持网站间的连接方面是有多么的不足。Mosh to Yanni主页的静态内容仍然可以加载,浏览器的渲染也运行得很正常,但是站外的和动态服务的内容已经全都不可访问。
出现这种状况的原因其实非常简单,就是集中管理的Web服务器不可避免的会关机。而关机的原因则有很多,或是域名的所有者变更,或是计算机崩溃却没有备份。若是取消集中管理,让网站的拥有者自己搭建HTTP服务器,情况也不会好转,甚至可能更糟。
与Mosh to Yanni相似的例子多得数不清,许多有用的信息就这样从人间蒸发。即使丢失的内容是荒谬的废话或是过时的言论,那也是我们人类经历过的历史,不该这么轻易的丢掉。
HTTP趋于超中心化
为了避免数据被不断侵蚀的状况,人们开始依赖于使用管理更完善的大型中心服务器,通过制作大量冗余备份来获得可靠性。这一方案在短期内是十分有效的,然而却在长期运转中滋生了新的一系列问题。
90年代易拉爱,在John Perry Barlow的网络空间独立宣言倡导下,线上国度不断繁荣,用信息的手段影响并推动世界。然而与此同时,政府和公司等组织也开始通过HTTP的漏洞进行渗透,窥探和监控网民的生活,阻碍他们获取对自身不利的信息。
当初人们想要建立的是非中心化的Web,可是如今使用的Web却越来越集中于少数一些服务器中心。造成的后果是,类似美国国家安全局这样的机构只要截取这些服务器中心的通信信息,就可以得到大部分用户的数据。对于政府来说,只要在边境路由上设置内容审查,就可以阻断访问中心服务器的连接。同时网络通信遭遇DDoS攻击的风险也大大增加。
相反分布式的Web可以减少管理部门的干涉,恢复人们的网络自由,同时也会减少单点故障带来的风险。
HTTP的效率不高
截止到我写这句话的是时间为止,江南style的视频已经有超过2,344,327,696次观看,姑且认为视频的大小都是117MB,那么仅视频文件就产生了274.3PB的网络流量。假设每1GB的成本(包括网络带宽和服务器存储)是1美分,则总共的花费将是2,742,860美元。
实际情况下花费可能还要高,因为网络带宽的价格是0.12美元起,亚洲用户则是0.2美元左右。对于谷歌这样的大公司来说钱可能不是太大的问题,不过对于一些中小小公司这就是个天文数字。我在Neocities做的工作有相当一部分是针对昂贵的带宽,通过一些技术手段减少基础设施运作的成本。
虽然HTTP降低了发布信息的成本,但它仍然需要大量金钱来运转,而且花费越来越多。在没有达到一定规模的情况下,集中由数据中心向外传播信息是非常昂贵的。若是我们能把同一ISP网络下的个人电脑都变成CDN内容提供者,从而取代数据中心,像江南style这样很火的视频就可以在ISP网络内部传播,就不需要接入到internet主干网,从而可以降低大量成本。IPFS就具备这样的功能,后面还会说到。
HTTP造成了Internet主干网被过度依赖
由于Web内容是超中心化的,数据中心的运作十分依赖Internet主干网络。除了会受到政府的审查和屏蔽之外,可靠性问题也大量存在。尽管已经采用了冗余备份的手段,可是一旦主干网崩溃,或是路由表错乱,依然会造成严重的后果。
几个月我就有过一次亲身体验,一辆小汽车撞坏了我们使用的上行光纤,整个Neocities的网络都瞬间变慢了。此外我还听说过一些类似的事情,比如有猎人射穿了东俄勒冈数据中心的光纤,抢修的工程师不得不坐着履带雪地车踩着滑雪板前去维修。就在我写这篇文章的时候,旧金山湾刚刚发生了一起复杂的网络攻击。
我想说的是Internet主干网是不完全可靠的,一方面它很容易遭受攻击,另一方面一旦重要的线路瘫痪,大量的网络服务都会受到影响。
2、IPFS的解决方案
上面我们主要讨论了HTTP存在的问题(超中心化),下面我们说说IPFS如何解决这些问题。IPFS从根本上改变了查找的方式,这是它最重要的特征。使用HTTP我们查找的是位置,而使用IPFS我们查找的是内容。
举个例子:服务器上运行着一个文件https://neocities.org/img/neocitieslogo.svg,遵照HTTP协议浏览器首先会查找服务器的位置(IP地址),随后向服务器索要文件的路径。这种体系下文件的位置取决于服务器管理者,而用户只能寄希望于文件没有被移动,并且服务器没有关闭。
IPFS的做法则是不再关心中心服务器的位置,也不考虑文件的名字和路径,只关注文件中可能出现的内容。我把刚才的文件neocitieslogo.svg放到IPFS节点,它会得到一个新名字QmXGTaGWTT1uUtfSb2sBAvArMEVLK4rQEcQg5bv7wwdzwU,是一个由文件内容计算出的加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。
当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。虽然早期的分布式哈希表曾遭受过女巫攻击,但是已经有一些新的方案来实现,我相信这个问题可以解决。
IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络(CDM)的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有最重要的——静态网站。
IPFS文件还可以抽象成特殊的IPFS目录,从而标注一个可读的文件名(透明的映射到IPFS哈希),在访问的时候会像HTTP一样获取一个目录索引。在IPFS上建立网站的流程和过去一样,而且把网站加入到IPFS节点的指令只需要一条指令:ipfs add -r yoursitedirectory。网页间的连接不再需要人去维护,IPFS自带的查找可以解决。
关联数据到IPFS
IPFS不会要求每一个节点都存储所有的内容,节点的所有者可以自由选择想要维持的数据。这就像是书签一样,在备份了自己的网站之外,自愿的为其他的关注的内容提供服务,不同的是这个书签不会像以前一样最终变得失效。
IPFS节点间的拷贝、存储和网站支援都很容易,只需要使用一条指令以及网站的哈希,例如:ipfs pin add -r QmcKi2ae3uGb1kBg1yBpsuwoVqfmcByNdMiZ2pukxyLWD8,剩下的IPFS会搞定。
如果IPFS得以普及,节点数达到一定规模,即使每个节点只存放一点点内容,所累计的空间、带宽和可靠性也远超HTTP能提供的。随之而来,分布式Web会变成地球上最快、最可靠、最大的数据仓库,人类知识也就再也不会湮灭,亚历山大图书馆永远不会倒塌。
IPNS
IPFS哈希只能用来表示不可变数据,因为一旦数据改变,哈希值也会改变。从某种意义上来说,这是保持数据持续性的好的设计。但是我们也需要一种方法来标记最新更新网站的哈希,这个方法我们称作IPNS。
IPFS哈希是网站通过哈希公钥生成的,相对的IPNS使用私钥来标记IPFS哈希的引用。如果以前用过比特币你应该很熟悉这种模式,比特币地址就是一种公钥哈希。在Neocities的IPFS节点上,我标记了Penelope(我们网站的吉祥物)的镜像,可以使用IPNS公钥来加载:QmTodvhq9CUS9hH8rirt4YmihxJKZ5tYez8PtDmpWrVMKP。
由于IPNS功能还没有完成,如果上面的链接不能工作也请不要灰心。IPNS公钥指向的位置是可变的,公钥的值则是保持不变的。随着IPNS的引入,网站升级的问题可以顺利解决。
可读可变寻址
由于IPFS/IPNS的哈希值都是很长和难记的字符串,所以IPFS兼容了现存的域名系统(DNS),可以通过可读的链接访问IPFS/IPNS内容。使用方法是在nameserver上创建一个文本记录,插入网站的哈希值(如果手上有一个命令行终端,试一下这个:dig TXT ipfs.git.sexy)。访问http://ipfs.io/ipns/ipfs.git.sexy/可以观察到效果。
接下来IPFS还打算支持Namecoin。Namecoin从理论上完全实现了分布式Web的去中心化,整体的运行中不再需要中心化的授权。支持了Namecoin的IPFS不再需要ICANN、中心服务器,不受政治干涉,也无需授权证书。这听起来难以置信,但却是今天可以实现的技术。
IPFS-HTTP网关:新旧Web之间的桥梁
IPFS在实现上加装了HTTP网关,使得现有的浏览器也可以访问IPFS,我在上文中举过例子。所以无需等待,现在就可以开始使用IPFS作为存储、分布和搭建网站的设施。
如何使用IPFS
现有的IPFS实现是实验性的,Neocities会在网站更新的时候发布新的IPFS哈希,新的哈希会指向最新版本的网站,通过IPFS-HTTP网关可以直接访问。由于IPFS哈希是随着更新改变的,我们可以自动的获得旧版本网站的历史档案,这些内容也会被提供出来。
IPNS加入后如何使用
如果项目长期地进展顺利,我们会用IPFS支撑所有的网站,并且为每个站点制作IPNS哈希,用户可以独立的发布内容,不再需要联系我们。假如我们做到了设想的情景,即使Neocities不存在了,用户还是可以正常更新他们的网站,意味着用户对中心服务器的依赖永远解除,把世界上网站都笼络到旗下的计划完全打破。这听起来太棒了!真是太棒了!
不过现在说这些有点为时过早也毫无意义,在IPFS能取代HTTP之前还有很多的实际工作要做。目前最紧迫的任务不是畅想未来,而是要脚踏实地接受Internet Archive的挑战——实现分布式Web。


本帖被以下淘专辑推荐:

回复

使用道具 举报

30

主题

76

帖子

267

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
267
 楼主| 发表于 2018-4-13 11:41:34 | 显示全部楼层
戴嘉乐:详解IPFS的本质、技术架构以及应用
本文是IPFS应用实践者戴嘉乐的分享内容 。戴嘉乐是前百度高级研发工程师,ipfser.org&巴比特专栏作者。戴嘉乐去年8月参与了FileCoin的众筹,从而了解到IPFS技术,独立开发了两款基于IPFS的开源应用,一个是与IPFS有关的wiki系统,另一个是IPFS相关的地理位置检索系统。

IPFS是什么?
IPFS的中文名是星际文件系统,由Juan Benet在2014年5月份发起。Juan Benet的个人经历很传奇,他毕业于斯坦福大学,在创建IPFS项目之前,他创办的第一家公司被雅虎收购。2015年,他创建的IPFS在YCombinator孵化竞赛中拿到了巨额的投资,同时成立了协议实验室。这个实验室团队由14位核心开发者以及社区中上百位代码贡献者组成的。
IPFS本质上是一种内容可寻址、版本化、点对点超媒体的分布式存储、传输协议,目标是补充甚至取代过去20年里使用的超文本媒体传输协议(HTTP),希望构建更快、更安全、更自由的互联网时代。
我们每天上网使用APP刷朋友圈、微博都在使用HTTP协议,它基于TCP/IP的计算机应用层面,从服务器传输超文本数据到本地浏览器,本地浏览器或APP渲染后呈现给用户。基于这样的网络环境构成了CS或BS架构,最后注入BAT这样大型网络提供商。
互联网平台所提供的网络服务大致经过了三种模式的迭代历程:
第一个模式属于集中化,例如早期的12306因为没法分散去做,只有一个中心服务群,所有买票的流量直接搭载在这个服务群上,承载的压力非常大。
第二个模式属于分散集群,类似于O2O百团大战时各个网站需要建立不同区域下的服务群,它们背后的IDC机房,会让同样的服务在一个局域内分散,这就减轻了中心服务器的压力。
前两种模式容易产生一些弊端:在第一种模式里,服务高度依赖中心网络。大公司或者创业公司无法承受宕机,运维有一个KPI指数叫SLA,稳定性没有到99.9%的话,基本不合格。SLA需要消耗特别大的成本,大公司需要雇一批运维专家或专业人士,去保障系统的稳定性。在第二种模式里,存储数据有丢失的风险。大家经常开玩笑的电缆被挖断,员工删库跑路,都是隐患。
同时,这两种模式的带宽成本相对高很多,会造成一定带宽资源的浪费。比如《中国有嘻哈》第一期海选的视频播放量有10亿次,假设视频文件大小是1GB,播放整个视频需要消耗1000PB的带宽量。如果按照0.001美元1GB带宽成本,爱奇艺光一期节目需要支付一百万美金给ISP(互联网服务提供商)。
IPFS有希望成为第三种模式。IPFS想打造一个点对点的网络拓扑,相当于颠覆HTTP所代表的分布关系,它具有内容可寻址的特点,通过文件内容生成唯一的哈希标识,一定程度上节约了空间开销的成本。
HTTP协议使用的域名寻址,最终会映射到最底层,找到某个域名所对应的IP地址下的某个主机,以及某个文件目录的某个文件。它不关心是否存在相同的文件,但内容寻址会通过唯一的标识去访问,并且提前检验这个标识是否已经被存储过。如果被存储过,直接从其它节点读取它,不需要重复存储,一定意义上节约了空间。
举个具体场景的例子。假设我想要看《环太平洋》这部电影,小明之前下载过这部电影,他启动了IPFS节点,将这个视频文件加入了IPFS网络。他会得到一个哈希指纹b,同时发布到公共网关,得到了一个/IPFS/b的路径名。
他把哈希指纹和路径名都告诉我,我要做的事情是启动一个本地节点,对该网关发一个寻址PIN的请求,IPFS自动索引分布式哈希表的哈希值,找到指纹b所对应的节点列表。
大的视频通常不会都存在一个节点,可能分片存在其它一些子节点上,IPFS把这些节点列表全部并行抓取,最后由本地的manager拼成完整的文件。并行的速度远远大于直接下载完整文件的速度,我很快就能在本地化的浏览器上看到电影,还可以继续分享给其他人。

IPFS的架构
IPFS至少有八层子协议栈,从上至下为身份、网络、路由、交换、对象、文件、命名、应用,每个协议栈各司其职,又互相搭配。
身份层和路由层可以一起解释。对等节点身份信息的生成以及路由规则是通过Kademlia协议生成制定,KAD协议实质是构建了一个分布式松散Hash表,简称DHT,每个加入这个DHT网络的人都要生成自己的身份信息,然后才能通过这个身份信息去负责存储这个网络里的资源信息和其他成员的联系信息。如同微信名片分享,在无法通过直接搜索微信号的情况下,如果你要找一个人,可以通过有这个人联系方式的朋友分享名片来建立联系。
网络层比较核心,使用的LibP2P可以支持任意传输层协议。NAT技术能让内网中的设备共用同一个外网IP,我们都体验过的家庭路由器就是这个原理。
交换层,是类似迅雷这样的BT工具。迅雷其实是模拟了P2P网络,并创建中心服务器,当服务器登记用户请求资源时,让请求同样资源的用户形成一个小集群swarm,在这里分享数据。这种方式有弊端,一位服务器是由迅雷统一维护,如果出现了故障、宕机时,下载操作无法进行。
中心化服务还可以限制一些下载请求,人们发明了一种更聪明的方式就是Bittorrent,让每一个种子节点所要存储的数据,通过哈希表存储在里面,BT工具相对不太受监管,服务更加稳定。
IPFS团队把BitTorrent进行了创新,叫作Bitswap,它增加了信用和帐单体系来激励节点去分享,我推断FileCoin有很大概率是基于Bitswap,用户在Bitswap里增加数据会增加信用分,分享得越多信用分越高。如果用户只去检索数据而不存数据,信用分会越来越低,其它节点会在嵌入连接时优先选择信用分高的。
这一设计可以解决女巫攻击,信用分不可能靠机器刷去提高,一直刷检索请求,信用分越刷越低。请求次数和存储量的变量之间有一个比较精妙的算法,类似一个抛物线,前期可以容忍很多东西,达到一定次数后不再信任。
对象层和文件层适合结合来谈,它们管理的是IPFS上80%的数据结构,大部分数据对象都是以MerkleDag的结构存在,这为内容寻址和去重提供了便利。文件层是一个新的数据结构,和DAG并列,采用Git一样的数据结构来支持版本快照。
命名层具有自我验证的特性(当其他用户获取该对象时,使用指纹公钥进行验签,即验证所用的公钥是否与NodeId匹配,这验证了用户发布对象的真实性,同时也获取到了可变状态),并且加入了IPNS这个巧妙的设计来使得加密后的DAG对象名可定义,增强可阅读性。
最后是应用层,IPFS核心价值就在于上面运行的应用程序,我们可以利用它类似CDN的功能,在成本很低的带宽下,去获得想要的数据,从而提升整个应用程序的效率。
新的技术取代老的技术,无非就两点:第一,能提高系统效率;第二,能够降低系统成本。IPFS把这两点都做到了。
我整理了一个IPFS族谱关系图,同时也是一个纵向数据流图。刚才所说的八层协议,其实每一层的实现都绑定在对应的模块下,进行了一个直观的图表设计。
IPFS的团队在开发时,采用高度模块集成化的方式,像搭积木一样去开发整个项目。协议实验室团队2015年创立,到17年的时间里都在做IPLD、LibP2P、Multiformats这三个模块的开发,它们服务于IPFS底层。
Mutiformats是一系列hash加密算法和自描述方式(从值上就可以知道值是如何生成)的集合,它具有SHA1\SHA256 \SHA512\Blake3B等6种主流的加密方式,用以加密和描述nodeID以及指纹数据的生成。
LibP2P是IPFS核心中的核心,面对各式各样的传输层协议以及复杂的网络设备,它可以帮助开发者迅速建立一个可用P2P网络层,快速且节约成本,这也是为什么IPFS技术被众多区块链项目青睐的缘由
IPLD其实是一个转换中间件,将现有的异构数据结构统一成一种格式,方便不同系统之间的数据交换和互操作。现在IPLD支持的数据结构,是比特币、以太坊的区块数据,也支持IPFS和IPLD。这也是IPFS为什么受到区块链系统欢迎的原因之二,它的IPLD中间件可以把不同的区块结构统一成一个标准进行传递,为开发者提供了成功性比较高的标准,不用担心性能、稳定和bug。
IPFS应用了这几个模块的功能,集成为一种容器化的应用程序,运行在独立节点上,以Web服务的形式,供大家使用访问。
最后是Filecoin, 作为去年7月才宣布的项目,它的开发进度至今保密。Filecoin把这些应用的数据价值化,通过类似比特币的激励政策和经济模型,让更多的人去创建节点,去让更多的人使用IPFS。
我更希望大家把IPFS和FileCoin分开来看,如果IPFS玩得好,可以创建很多FileCoin项目出来,它本身的价值和意义没有IPFS这么大。

IPFS的应用意义
第一,可以为内容创作带来一定的自由。Akasha是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。
同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。
第二,可以降低存储和带宽成本。我之前也举过爱奇艺的例子,而做视频比较成功的项目叫「Dtube」。它是一个搭建在Steemit上的去中心化视频播放平台,其用户上传的视频文件都经过IPFS协议进行存储,具有唯一标识。相较于传统视频网站,它降低了同资源冗余程度,同时大大节约了海量用户在播放视频时所产生的带宽成本。
第三个,可以与区块链完美结合。区块链的本质是分布式账本,本身的瓶颈之一就是账本的存储能力,目前大部分公链的最大问题是没法存储大量的超媒体数据在自己的链上。比特币至今全部的区块数据也才30-40G左右,以太坊这样可编程的区块链项目也只能执行和存储小段合约代码,DApp想发展成超级App,受到了极大的限制。
运用IPFS技术解决存储瓶颈是目前来看的过渡方案,最典型的应用就是EOS。EOS引以为傲的是可以支持百万级别TPS的并发量,其中除了DPOS共识机制的功劳之外,还归功于其底层存储设计是采取IPFS来解决大型数据的传输效率。
EOS将自己打包好的区块数据通过IPLD进行异构处理,统一成一种便于内容寻址的数据结构类型,并挂载到IPFS的link上,让IPFS网络承担存储和P2P检索的逻辑,而不消耗EOS区块链系统本身太多的计算资源。
第四,可以为传统应用提供分布式缓存方案。 IPFS-GEO 是我自己之前写的,它是一个为传统LBS应用提供分布式缓存的项目,可以将地理位置坐标数据通过GeoHash算法转化成一维字符串,并将与之相关联的具有检索价值的数据存入IPFS网络,由IPFS网络标识唯一性,并分布在各个邻近节点上。
当检索请求到来时,系统先通过字符串近似度范围比较,缩小检索范围,加快检索效率,通过NodeID从附近节点拿到超媒体数据,达到类似分布式缓存的效果,大大提高了LBS应用整个检索动作的效率。

IPFS的明星应用
OpenBazaar是IPFS上的一个明星应用,我给它取了一个中文名叫开放集市,前一段时间刚拿到比特大陆500万美元的投资。
在之前的1.0版本,OpenBazaar被称之为黑市,那时没有应用IPFS,利用ZeroMQ来实现P2P交易,一定程度也绕过了中心化的检查,把交易的手续费作为红利给到用户。同时它整合了比特币作为支付渠道,轰动一时,用户数量在短时间内迅速提升。
开放集市在2.0版本发布之后,考虑到法律等因素,官方加入了一层审查机制,同时支持了比特币之外的BCH等数字货币,并且整合和重构IPFS,取代了之前的ZeroMQ。
现在,众多开放集市上的商店在没有用户上线的情况下,也可以在主机上就被运行。以前必须同时登陆才可以交易,现在利用IPFS相当于实现了离线店铺。这同时意味着,访问你的店铺的人越多,店铺数据被复制越多,有利于优质的店铺宣传和推广,这是一定意义上的价值回归。
我把它称为明星项目,不光因为它是基于IPFS而且做得不错,还因为它对IPFS全部的重构,它把IPFS所有的源码、协议和各种配套设施都重新开,不仅重构了IPFS的分支,改了协议名,同时也更改了协议头,一定意义上把OB的网络和主的IPFS网络隔离开。
OpenBazaar希望有更集中化的控制,想建立自己的矿场和机房来保证服务的稳定,在去中心和中心化之间选择了一个中间点。我觉得目前大部分的传统应用和公司,也可以这样去考虑。完全去中心化不太可能,所以可以取其精华、去其糟粕。
【IPFS + 区块链 系列】 入门篇 – IPFS环境配置目录
  • 1. IPFS简介
  • 2. IPFS本地环境安装
    • 2.1 下载ipfs压缩包
    • 2.2 安装
  • 3. 项目配置
    • 3.1 创建ipfs节点
    • 3.2 修改节点默认存储空间
    • 3.3 查看节点id
    • 3.4 启动节点服务器
    • 3.5 跨域资源共享CORS配置
    • 3.6 验证
  • 4. 下篇预告
1. IPFS简介
IPFS(InterPlanetary File System)是一个点对点的分布式超媒体分发协议,它整合了过去几年最好的分布式系统思路,为所有人提供全球统一的可寻址空间,包括Git、自证明文件系统SFS、BitTorrent和DHT,同时也被认为是最有可能取代HTTP的新一代互联网协议。
IPFS用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。
IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有静态网站。
IPFS提供了一个友好的WEB访问接口,用户可通过http://ipfs.io/hash 获取IPFS网络中的内容,也许在不久的将来,IPFS协议将会彻底替代传统的HTTP协议。

2. IPFS本地环境安装2.1 下载ipfs压缩包
2.2 安装liyuechunownloads yuechunli$ pwd/Users/liyuechun/Downloadsliyuechunownloads yuechunli$ lsgo-ipfs_v0.4.10_darwin-amd64.tar.gzliyuechunownloads yuechunli$ tar xvfz go-ipfs_v0.4.10_darwin-amd64.tar.gz x go-ipfs/build-logx go-ipfs/install.shx go-ipfs/ipfsx go-ipfs/LICENSEx go-ipfs/README.mdliyuechunownloads yuechunli$ lsgo-ipfs                                        go-ipfs_v0.4.10_darwin-amd64.tar.gzliyuechunownloads yuechunli$ cd go-ipfsliyuechun:go-ipfs yuechunli$ lsLICENSE                README.md        build-log        install.sh        ipfsliyuechun:go-ipfs yuechunli$ mv ipfs /usr/local/bin/ipfs
tar xvfz go-ipfs_v0.4.10_darwin-amd64.tar.gz文件解压。
mv ipfs /usr/local/bin/ipfs,将已解压的文件夹中的ipfs文件移动到/usr/local/bin/文件夹中。

3. 项目配置3.1 创建ipfs节点
为了运行项目,我们需要通过ipfs init在本地计算机建立一个IPFS节点。
localhost:.ipfs yuechunli$ cd ~/.ipfs-bash: cd: /Users/liyuechun/.ipfs: No such file or directorylocalhost:.ipfs yuechunli$ ipfs initinitializing IPFS node at /Users/liyuechun/.ipfsgenerating 2048-bit RSA keypair...donepeer identity: QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MPto get started, enter:        ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/readmelocalhost:.ipfs yuechunli$ cd ~/.ipfslocalhost:.ipfs yuechunli$ lsblocks                datastore        versionconfig                keystorelocalhost:.ipfs yuechunli$ open ./localhost:.ipfs yuechunli$
3.2 修改节点默认存储空间
执行完ipfs init命令后,会在根目录生成一个.ipfs的文件夹存储节点数据。.ipfs节点默认存储空间为10个G。
如果你自己想修改节点默认存储空间,可打开终端执行下面的命令。
localhost:.ipfs yuechunli$ export EDITOR=/usr/bin/vimlocalhost:.ipfs yuechunli$ ipfs config edit
执行完ipfs config edit命令后会打开一个文件,在这个文件中找到下图中春哥「微信:liyc1215」绘制红线的位置,将10GB修改成你自己想要的存储空间。修改完毕,保存退出。(PS:输入i可以开始编辑,编译完毕后按esc键,再输入:,再次输入wq保存并且退出)。
3.3 查看节点idlocalhost:.ipfs yuechunli$ ipfs id {        "ID": "QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP",        "ublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDqJlLivZerwIYTI5K8pEzbRnmNti3rObvpa17AixKpgTPnWAvPmZr1SLBzYUjpy3coymLHkNldcEZixnWTIihKIF1pVhxJG2MzFg8vHnG7uF8vxyYE4wOZ6V4rTauYbGau1Tj/TSjzI9oKOoezitTn6ggD3p2Y6Y1/FWGRfAvG7UUBFXSMtwVkwM/F0aaP2k8vHgsZDeYLY8UCpq67dC+AgbVNieLrX/tht6D7iTYS5Ch5dMIpwxMdRLkrNx8k9CVFgvnILhdTJL4QfdNA4L5FnWJy3axhj6bRdVkBpcdgn2WAHxYW6FwkB/eFSKxwNCKsO2/C52mUNNMouN2XlObTAgMBAAE=",        "Addresses": null,        "AgentVersion": "go-ipfs/0.4.10/",        "rotocolVersion": "ipfs/0.1.0"}localhost:.ipfs yuechunli$
QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP为你的节点ID每个节点都会有一个唯一的ID。
3.4 启动节点服务器localhost:.ipfs yuechunli$ ipfs daemonInitializing daemon...Adjusting current ulimit to 2048...Successfully raised file descriptor limit to 2048.Swarm listening on /ip4/111.196.241.208/tcp/7723Swarm listening on /ip4/127.0.0.1/tcp/4001Swarm listening on /ip4/192.168.0.107/tcp/4001Swarm listening on /ip6/::1/tcp/4001API server listening on /ip4/127.0.0.1/tcp/5001Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080Daemon is ready
3.5 跨域资源共享CORS配置
为了后续的开发方便,我们还需要对跨域资源共享( CORS )进行配置,ctrl- c退出ipfs,然后按照下面的步骤进行跨域配置。
  • ctrl- c退出ipfs
  • ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["UT", "GET", "OST", "OPTIONS"]'
  • ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
3.6 验证
  • 启动服务器
$ ipfs daemon
  • 新建终端执行下面的命令
ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
localhost:~ yuechunli$ ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readmeHello and Welcome to IPFS!██╗██████╗ ███████╗███████╗██║██╔══██╗██╔════╝██╔════╝██║██████╔╝█████╗  ███████╗██║██╔═══╝ ██╔══╝  ╚════██║██║██║     ██║     ███████║╚═╝╚═╝     ╚═╝     ╚══════╝If you're seeing this, you have successfully installedIPFS and are now interfacing with the ipfs merkledag! -------------------------------------------------------| Warning:                                              ||   This is alpha software. Use at your own discretion! ||   Much is missing or lacking polish. There are bugs.  ||   Not yet secure. Read the security notes for more.   | -------------------------------------------------------Check out some of the other files in this directory:  ./about  ./help  ./quick-start     <-- usage examples  ./readme          <-- this file  ./security-noteslocalhost:~ yuechunli$
  • 浏览器输入下面的网址
打开http://localhost:5001/webui会看到一个漂亮的UI界面。




  • 带你进入IPFS世界(二):FileCoin入门指南 [复制链接]4109982017-12-19 12:03:37

    简单的生活_nPm | 水手 | 只看楼主






    【带你进入IPFS世界】这将是一个系列的文章,在这个系列的第一篇文章,刚哥为大家介绍了filecoin的众售细则,算是对这个项目的一个热身吧。在接下来的篇幅里,我会带领大家进入真正的进入IPFS的技术世界,让各位读者了解IPFS这个项目到底能干什么,解决了什么样的行业痛点,剖析它的底层设计,它具有什么样的能力成为佼佼者。作为一个价值投资者,想要在未来几年里获取百倍甚至千倍的收益,这是您的一门必修课。而能持住币的最大的因素,莫过于对它知根知底。如果你是搞技术的,那我们一起搭上这趟列车前行;如果你是不懂技术的小白,那也没有关系,我会尝试用最通俗易懂的语言来带您入门。
    一、什么是FileCoin
    filecoin是分布式网络存储系统IPFS的代币,它的底层是由区块链技术所驱动的。过去的十年是互联网的黄金时代,我们每天使用的各种app、各大新闻门户,各种视频网站这一切都是建立在底层的通信协议的基础上的。标准的OSI参考模型分为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
    物理层和数据链路层是基础设施层,为整个互联网提供了地基,它定义了信号怎么让网卡所接收到并识别。
    网络层和传输层(也叫TCP/IP层),相比物理层和数据链路层更为高级,它的核心是定义了信息跨节点(从A点到B点,如何寻址)传输的标准和规范,它是在公网传输数据的底层基础。
    会话层、表示层、应用层其实可以合称为应用层,在这个层里使得当今互联网生态如此繁荣的角色莫过于http,通过这种简单的超文本传输协议,使得信息方便的、低成本的在全世界进行传输,而web浏览器正是http协议的一个展示窗口或者是载体,它起的是承上(用户)启下(http协议)的作用。
    通过上面的描述大家对互联网的底层协议相信稍稍有一些了解了,但是以上的协议都是建立在中心化的基础上的。比如http服务,如果你是一个网站主,你就必须要搭建一个web服务器,然后你的所有程序都是跑在这个服务器上的。当然现在有了负载均衡、多节点的云主机,但本质上还是一个中心化的B/S架构,即服务器/浏览器架构。技术有着自己本身的进化历程,随着云计算和大数据的兴起,分布式系统成为了当今比较流行的架构,在企业级应用的大数据方面有Hadoop,spark, HDFS这些著名的产品。除了企业级的应用外,另外一个分布式系统大规模应用的标志就是比特币的出现,对于比特币的本质其实就是一个分布式的系统,最主要的作用是记账,而记账本身就是金融领域的核心职能,所以比特币自带金融属性,驱动这个系统运转的是这个系统上的代币。那么FileCoin的核心也是一个分布式系统,它和比特币的区别是它是一个去中心化的分布式的存储系统。
    FileCoin是IPFS上的一个代币,IPFS是一个点对点的传输网络,每个文件在这个网络上都有一个唯一的hash指纹。通过filecoin这种代币来激励拥有闲置硬盘的用户,能够将硬盘贡献出来,成为IPFS网络上的一名矿工,来以此获得filecoin代币作为回报。在共识算法上,filecoin采用的是proof-of-replication(复制量证明),后续的文章会详细介绍复制量证明这种全新的共识机制。它带来的结果是矿工拥有的硬盘容量越大,那么获取的filecoin的报酬就越多。


    二、FileCoin挖矿

    上面说了,FileCoin是通过将闲置硬盘参与到挖矿中来,它的底层是区块链。那么在ipfs上挖矿主要需要做以下几件事情:
    文件存储
    处理交易
    文件检索请求服务

    矿工挖矿获取收益主要体现在两个方面:一、需要不断的证明他在复制用户的数据、打包交易;二、打包区块,这和Bitcoin、以太坊类似。
    在速度方面也有考量,谁能快速分发内容给用户,谁便能获取更高的收益。比如当有用户要求检索文件时,最快交付给用户的矿工将获取挖矿奖励收益。所以拥有带宽、拥有SSD而不是传统的机械硬盘的矿工将具有一定的优势。
    另外,拥有硬盘容量将在共识机制上扮演比较重要的角色,而不是像比特币,算力扮演着重要的角色,创建有价值的存储服务和网络是挖矿的目的和结果。
    在数据的存储方面采用的是擦除编码(Erasure coding)和信息扩散算法(Infomation Dispersal Algorithms),这使得在断电的情况下,矿工具有自我恢复的能力,大家可以理解为是一种容错机制。
    简单总结挖矿的几点核心为:
    硬盘容量和挖矿回报成正比
    分发相应能力和挖矿回报成正比
    存储即算力
    具有自我恢复的能力

    Filecoin的一个全节点,包含了区块、和数据存储两大部分,而区块里主要记录以下信息:
    分配表
    订单信息
    交易信息
    存储部分里只要是存储的来自客户加密后的文件数据。



    三、复制量证明

    每一个文件的拷贝在存储时都要经过复制量证明来进行加密校验和定期检查,原始文件经过加密后,产生出一个唯一的文件副本以及一个私钥。


    关于工作量证明的知识后续会专门写文字来介绍。

    四、文件的生命周期

    PUT阶段:由客户端发起文件存储请求,并以filecoin为单位出价,同时系统会撮合矿工和用户的订单,一旦撮合成功,交易便存储在区块链上。
    SEND阶段:上一步订单撮合完成后,客户端发送要存储的文件给矿工,矿工接收到这个文件将它让放入到数据单元里,同时加密文件数据,并且验证之后发送到链上。
    管理阶段:矿工不断以复制证明的方式和规则来证明他们在工作,客户端支付的金额是分期付款进行的,随着出块,线性像前推进给矿工进行支付。
    GET文件:客户请求文件并支付filecoin到检索市场之后,相应速度最快的矿工拿到这个文件的分发权。

    五、filecoin市场

    filecoin的价格将由存储市场的供需关系所决定,比如存储文件的需求旺盛,而矿工有限,则价格上涨。如果矿工多,而存储文件的需求少,则价格下跌的可能性就比较大。

    而市场分为两大类,一个是存储市场;一个是检索市场。其实也就是输入和输出(I/O)。存储市场是把文件输入进去,存储起来,检索市场是把客户的文件找出来。接下来我们看看两大市场的职能和特点分别是什么。

    存储市场:
    在链上撮合客户和矿工之间的订单
    给出全球市场的报价,以及优化
    使存储供应商们(矿工)进行竞争记账,选出最优的矿工来为客户服务。
    矿工的硬盘容量和收益成正比

    检索市场:
    在链下进行订单的撮合
    使用支付通道
    请求的延迟最小化
    容量小但是带宽高的矿工有可能获得较好的回报
    自动优化某个区域的Hubs
    hub可以是不同的节点


    六、filecoin生态
        构成filecoin生态的成员主要由普通的用户(具有存储需求的)、矿工(存储空间提供者)以及合作方,投资者等构成。




    随着云盘服务商的纷纷停摆,我们看到,中心化的云存储是多么的不靠谱。去中心化的存储是一个非常大的市场,也是刚需,如果能够很好的解决带宽的问题,它的价值将是巨大的,但同时这是一个新项目,还有很长的路要走,而且还有sia这样的竞争对手,IPFS怎么走出自己的一条道路,我们拭目以待,等产品正式上线。而作为投资者,请不要盲目投资,对项目有深入的了解之后再下手也不迟。













Filecoin:一种去中心化的存储网络
作者:Protocol Labs
【原文链接:Paper
【ETH打赏地址:0xc65085cE0e9890383b4cbD4028d1C14d6ce56F9c】
【译者:郭世清 toxotguo@gmail.com,仅代表译者观点,不代表所任职公司观点,版权归译者所有,未经许可,禁止转载】
摘要

当前互联网正处于一场革命中:集中式专有服务正在被去中心化开放服务所代替;信任式参与被可验证式计算所代替;脆弱的位置寻址被弹性的内容寻址所代替;低效率的整体式服务被点对点算法市场所代替;比特币、以太坊和其他的区块链网络已经证明了去中心化交易账本的有效性。这些公共账本处理复杂的智能合约应用程序和交易价值数百亿美金的加密资产。这些系统的参与者们形成去中心化的、没有中心管理机构或者可信任党派的网络提供了有用的支付服务,这是广泛互联网开放服务的第一个实例。IPFS通过分散的网页自身已经证明了内容寻址的有效性,它提供了全球点对点网络数十亿文件使用。它解放了孤岛数据,网络分区存活,离线工作,审查制度路线,产生了持久的数字信息。

Filecoin是一个去中心化存储网络,它让云存储变成一个算法市场。这个市场运行在有着本地协议令牌(也叫做Filecoin)的区块链。区块链中的旷工可以通过为客户提供存储来获取Filecoin,相反的,客户可以通过花费Filecoin来雇佣旷工来存储或分发数据。和比特币一样,Filecoin的旷工们为了巨大的奖励而竞争式挖区块,但Filecoin的挖矿效率是与存储活跃度成比例的,这直接为客户提供了有用的服务(不像比特币的挖矿仅是为了维护区块链的共识)。这种方式给旷工们创造了强大的激励,激励他们尽可能多的聚集存储器并且把它们出租给客户们。Filecoin协议将这些聚集的资源编织成世界上任何人都能依赖的自我修复的存储网络。该网络通过复制和分散内容实现鲁棒性,同时自动检测和修复副本失败。客户可以选择复制参数来防范不同的威胁模型。该协议的云存储网络还提供了安全性,因为内容是在客户端端对端加密的,而存储提供者不能访问到解密秘钥。Filecoin的成果作为可以为任何数据提供存储基础架构的IPFS最上面的激励层。它对去中心化数据,构建和运行分布式应用程序,以及实现智能合同都非常有用。

这些工作包括以下几部分内容:

(a)介绍Filecoin网络,概述这个协议以及详细介绍几个组件。

(b)形式化去中心化存储网络(DSN)的计划与内容,然后构建Filecoin作为一个DSN。

(c)介绍一种叫“复制证明”的新型存储证明方案,它允许验证任何数据副本都存储在物理上独立的存储器中。

(d)介绍一种新型的以基于顺序复制和存储作为激励度量的有用工作共识。

(e)形成可验证市场,并构建两个市场,存储市场和检索市场,它们分别管理如何从Filecoin写入和读取数据。

(f)讨论用例,如何连接其他系统以及如何使用这个协议。

注意:Filecoin是一项正在进行的工作。正在进行积极的研究,本文的新版本将会出现在https://filecoin.io

如有意见和建议,请通过research@filecoin.io与我们联系

1 介绍

Filecoin是一种协议令牌,其区块链运行在一种叫“时空证明”的新型证明机制上,其区块被存储数据的矿工所挖。Filecoin协议通过不依赖于单个协调员的独立存储提供商组成的网络提供数据存储服务和数据检索服务。其中:

  • 用户为数据存储和检索支付令牌
  • 存储矿工通过提供存储空间赚取令牌
  • 检索矿工通过提供数据服务赚取令牌

1.1 基本组件

Filecoin协议由四个新型组件组成

  • 去中心化存储网络(Decentralized Storage Network)(DSN):我们提供一个由提供存储和检索服务的独立服务商网络的抽象(在第二节)。接着我们提出了Filecoin协议作为激励,可审计和可验证的DSN构建(在第4节)。
  • 新型的存储证明:我们提出了两种新型存储证明方案(在第三节):(1)“复制证明”(Proof-of-Replication)允许存储提供商证明数据已经被复制到了他自己唯一专用的物理存储设备上了。执行唯一的物理副本使验证者能够检查证明者是否不存在将多个数据副本重复拷贝到同一存储空间。(2)“时空证明”(Proof-of-Spacetime)允许存储提供商证明在指定的时间内存储了某些数据。
  • 可验证市场:我们将存储请求和检索需求作为两个由Filecoin网络操作的去中心化可验证市场的订单进行建模(在第五节)。验证市场确保了当一个服务被正确提供的时候能执行付款。我们介绍了客户和矿工可以分别提交存储和检索订单的存储市场和检索市场。
  • 有效的工作量证明(Proof-of-Work):我们展示了如何基于“时空证明”来构建有效的工作量证明来应用于共识协议。旷工们不需要花费不必要的计算来挖矿,但相反的必须存储数据于网络中。

1.2 协议概述
  • Filecoin协议是构建于区块链和带有原生令牌的去中心化存储网络。客户花费令牌来存储数据和检索数据,而矿工们通过提供存储和检索数据来赚取令牌。
  • Filecoin DSN 分别通过两个可验证市场来处理存储请求和检索请求:存储市场和检索市场。客户和矿工设定所要求服务的价格和提供服务的价格,并将其订单提交到市场。
  • 市场由Filecoin网络来操作,该网络采用了“时空证明”和“复制证明”来确保矿工们正确存储他们承诺存储的数据。
  • 最后,矿工们能参与到区块链新区块的锻造。矿工对下一个区块链的影响与他们在网络中当前存储使用量成正比。

图一是使用了术语定义之后的Filecoin协议草图,伴随着一个例子如图2所示
1.3 论文组织

本文的其余部分安排如下:我们在第二节中介绍了对一个理论上的DNS方案的定义和需求。在第三节中我们定义和介绍我们的“复制证明”和“时空证明”协议,以及Filecoin将其用于加密地验证数据按照订单的要求被持续不断的存储。第四节描述了Filecoin DSN的具体实例,描述了数据结构,协议,以及参与者之间的交互。第5节定义和描述可验证市场的概念,还有存储市场和检索市场的实施。第6节描述了使用“时空证明”协议进行演示,并且评估矿工对网络的贡献,这对扩展区块链块和区块奖励是必要的。第7节简要介绍了Filecoin中的智能合约。在第8节中讨论了未来的工作作为结束。

2 去中心化存储网络的定义

我们介绍了去中心化存储网络(DSN)方案的概念。DSNs聚集了由多个独立存储提供商提供的存储,并且能自我协调的提供存储数据和检索数据服务给客户。这种协调是去中心化的、无需信任的:通过协议的协调与个体参与者能实施验证操作,系统可以获得安全性操作。DSNs可以使用不同的协调策略,包括拜占庭协议,gossip协议或者CRDTs,这取决于系统的需求。在后面,第四节,我们提供Filecoin DSN的的一个构建。

定义 2.1

DSN方案(Π)是由存储提供商和客户运行的协议元组: (Put, Get, Manage)

  • Put(data) → key: 客户端执行Put协议以将数据存储在唯一的标识符秘钥下。
  • Get(key) → data: 客户端执行Get协议来检索当前使用秘钥存储的数据。
  • Manage(): 网络的参与者通过管理协议来协调:控制可用的存储,审核提供商提供的服务并修复可能的故障、
    管理协议由存储提供商来运行,并且经常与客户或者审计网络结合(在管理协议依赖区块链的情况下,我们认为矿工是审计人员,因为他们验证和协调存储提供商)。

DSN方案(Π)必须保证数据的完整性和可恢复性,并且能够容忍在后面章节中所定义的管理和存储故障。

2.1 故障容错2.1.1 管理故障

我们将管理故障定义为管理协议的参与者引起的拜占庭故障。一个DSN方案依赖于它的基础管理协议的故障容错。违反故障容错的管理故障假设可能会影响系统的活跃度和安全性。

例如,考虑一个DSN方案,其中管理协议要求拜占庭容错来审核存储提供商。在这样的协议中,网络收集到来自存储提供商的存储证明,并运行拜占庭容错对这些证明的有效性达成共识。如果在总共n个节点中,拜占庭容错最多容忍f个故障节点。那么我们的DSN可以容忍f<n/2 个故障节点。在违反了这些假设的情况下,审计上就要做出妥协。

2.1.2 存储故障

我们将存储故障定位为拜占庭故障,阻止了客户检索数据。例如存储矿工丢失了他们的数据,检索矿工停止了他们的服务。一个成功的Put操作的定义是(f,m),既是它的输入数据被存储在m个独立的存储提供商(总共有n个)中,并且它可以容忍最多f个拜占庭存储提供商。参数f和m取决于协议的实现。协议设计者可以固定f和m,或者留给用户自己选择。将Put(data) 扩展为Put(data,f,m)。如果有小于f个故障存储提供商,则对存储数据的Get操作是成功的。

例如,考虑一个简单的方案。它的Put协议设计为每个存储提供商存储所有的数据。在这个方案里,m=n,并且f=m-1。但总是f=m-1吗,不一定的,有些方案可能采用可擦除式设计,其中每个存储供应商存储数据的特定部分,这样使得m个存储供应商中的x个需要检索数据,在这种场景下f=m-x。

2.2 属性

我们描述DSN方案所必须的两个属性,然后提出Filecoin DSN所需要的其他属性。

2.2.1 数据完整性

该属性要求没有有限的对手A可以让客户在Get操作结束的时候接受被更改或者伪造的数据。

定义 2.2

一个DSN方案(Π)提供了数据完整性:如果有任意成功的Put操作将数据d设置在键k下,那不存在计算有限的对手A能使得客户在对键k执行Get操作结束的时候接受d‘,其中d' 不等于d。

2.2.2 可恢复性

该属性满足了以下要求:考虑到我们的Π的容错假设,如果有些数据已经成功存储在Π并且存储提供商继续遵循协议,那么客户最终能够检索到数据。

定义2.3

一个DSN方案(Π)提供了可恢复性:如果有任意成功的Put操作将数据d设置在键k下,且存在一个成功的客户Get操作通过对键K执行检索得到数据(这个定义并不保证每次Get操作都能成功,如果每次Get操作最终都能返回数据,那这个方案是公平的)。

2.3 其他属性

DSNs可以提供特定于其应用程序的其他属性。我们定义了Filecoin DSN所需要的三个关键属性:公开可验证性、可审查性和激励兼容性。

定义2.4

一个DSN方案(Π)是公开可验证的:对于每个成功的Put操作,存储网络的供应商可以生成数据当前正在被存储的证明。这个存储证明必须说服任何只知道键但并不能访问键所对应的数据的有效验证者。

定义2.5

一个DSN方案(Π)是可审查的:如果它产生了可验证的操作轨迹,并且在未来能被检查在正确的时间上数据确实被存储了。

定义2.6

一个DSN方案(Π)是激励可兼容的:如果存储提供商由于成功提供了存储数据和检索数据的服务而获得激励,或者因为作弊而得到惩罚。所有存储提供商的优势策略是存储数据。

3 复制证明与时空证明

在Filecoin协议中,存储供应商必须让他们的客户相信,客户所付费的数据已经被他们存储。在实践中,存储供应商将生成"存储证明"(POS)给区块链网络(或客户自己)来验证。

在本节中,我们介绍和概述在Filecoin中所使用的“复制证明”n (PoRep)和“时空证明”(PoSt)实现方案。

3.1 动机

存储证明(POS)方案类似“数据持有性验证”(PDP)[2]和“可恢复性证明”(PoR)[3,4]方案。它允许一个将数据外包给服务器(既证明人P)的用户(既验证者V)可以反复检查服务器是否依然存储数据D。用户可以用比下载数据还高效的方式来验证他外包给服务器的数据的完整性。服务器通过对一组随机数据块进行采样和提交小量数据来生成拥有的概率证明作为给用户的响应协议。

PDP和PoR方案只保证了证明人在响应的时候拥有某些数据。在Filecoin中,我们需要更强大的保障能阻止作恶矿工利用不提供存储却获得奖励的三种类型攻击:女巫攻击(Sybil attack)、外包攻击(outsourcing attacks)、代攻击?(generation attacks)。

  • 女巫攻击:作恶矿工可能通过创建多个女巫身份假装物理存储很多副本(从中获取奖励),但实际上只存储一次。
  • 外包攻击:依赖于可以快速从其他存储提供商获取数据,作恶矿工可能承诺能存储比他们实际物理存储容量更大的数据。
  • 代攻击:作恶矿工可能宣称要存储大量的数据,相反的他们使用小程序有效地生成请求。如果这个小程序小于所宣称要存储的数据,则作恶矿工在Filecoin获取区块奖励的可能性增加了,因为这是和矿工当前使用量成正比的。

3.2 复制证明

“复制证明”(PoRep)是一个新型的存储证明。它允许服务器(既证明人P)说服用户(既验证者V)一些数据D已被复制到它唯一的专用物理存储上了。我们的方案是一种交互式协议。当证明人P:(a)承诺存储某数据D的n个不同的副本(独立物理副本),然后(b)通过响应协议来说服验证者V,P确实已经存储了每个副本。据我们所知PoRep改善了PDP和PoR方案,阻止了女巫攻击、外包攻击、代攻击。

请注意,正式的定义,它的属性描述,和PoRep的深入研究,我们参考了[5]

定义3.1

PoRep方案使得有效的证明人P能说服验证者V,数据D的一个P专用的独立物理副本R已被存储。PoRep协议其特征是多项式时间算法的元组: (Setup, Prove, Verify)

  • PoRep.Setup(1λ, D) → R, SP , SV , 其中SP和SV是P和V的特点方案的设置变量,λ是一个安全参数。PoRep.Setup用来生成副本R,并且给予P和V必要的信息来运行PoRep.Prove 和 PoRep.Verify。一些方案可能要求证明人或者是有互动的第三方去运算PoRep.Setup。
  • PoRep.Prove(SP , R, c) → πc,其中c是验证人V发出的随机验证, πc是证明人产生的可以访问数据D的特定副本R的证明。PoRep.Prove由P(证明人)为V(验证者)运行生成πc。
  • PoRep.Verify(Sv , c, πc) → {0, 1},用来检测证明是否是正确。PoRep.Verify由V运行和说服V相信P已经存储了R。

3.3 时空证明

存储证明方案允许用户请求检查存储提供商当时是否已经存储了外包数据。我们如何使用PoS方案来证明数据在一段时间内都已经被存储了?这个问题的一个自然的答案是要求用户重复(例如每分钟)对存储提供商发送请求。然而每次交互所需要的通信复杂度会成为类似Filecoin这样的系统的瓶颈,因为存储提供商被要求提交他们的证明到区块链网络。

为了回答这个问题,我们介绍了新的证明,“时空证明”,它可以让验证者检查存储提供商是否在一段时间内存储了他/她的外包数据。这对提供商的直接要求是:(1)生成顺序的存储证明(在我们的例子里是“复制证明”)来作为确定时间的一种方法 (2)组成递归执行来生成简单的证明。

定义3.2

*(时空证明)Post方案使得有效的证明人P能够说服一个验证者V相信P在一段时间内已经存储了一些数据D。PoSt其特征是多项式时间算法的元组: (Setup, Prove, Verify)

  • PoSt.Setup(1λ,D)->Sp,Sv,其中SP和SV是P和V的特点方案的设置变量,λ是一个安全参数。PoSt.Setup用来给予P和V必要的信息来运行PoSt.Prove 和 PoSt.Prove。一些方案可能要求证明人或者是有互动的第三方去运算PoSt.Setup。
  • PoSt.Prove(Sp , D, c, t) → πc,其中c是验证人V发出的随机验证, πc是证明人在一段时间内可以访问数据D的的证明。PoSt.Prove由P(证明人)为V(验证者)运行生成πc。
  • PoSt.Verify(Sv , c, t, πc) → {0, 1},用来检测证明是否是正确。PoSt.Verify由V运行和说服V相信P在一段时间内已经存储了R。

3.4 PoRep和PoSt实际应用
    我们感兴趣的是PoRep和PoSt的应用构建,可以应用于现存系统并且不依赖于可信任的第三方或者硬件。我们给出了PoRep的一个构建(请参见基于密封的复制证明[5]),它在Setup过程中需要一个非常慢的顺序计算密封的执行来生成副本。PoRep和PoSt的协议草图在图4给出,Post的底层机制的证明步骤在图3中。
3.4.1 构建加密区块

防碰撞散列 我们使用一个防碰撞的散列函数:CRH : {0, 1}* → {0, 1}O(λ)。我们还使用了一个防碰撞散列函数MerkleCRH,它将字符串分割成多个部分,构造出二叉树并递归应用CRH,然后输出树根。

zk-SNARKs 我们的PoRep和PoSt的实际实现依赖于零知识证明的简洁的非交互式知识论(zk-SNARKs)[6,7,8]。因为zk-SNARKs是简洁的,所以证明很短并且很容易验证。更正式地,让L为NP语言,C为L的决策电路。受信任的一方进行一次设置阶段,产生两个公共密钥:证明密钥pk和验证密钥vk。证明密钥pk使任何(不可信)的证明者都能产生证明证明π,对于她选择的实例x,x∈L。非交互式证明π是零知识和知识证明。任何人都可以使用验证密钥vk验证证明π。特别是zk-SNARK的证明可公开验证:任何人都可以验证π,而不与产生π的证明者进行交互。证明π具有恒定的大小,并且可以在| x |中线性的时间内验证。

可满足电路可靠?的zk-SNARKs是多项式时间算法的元组:(KeyGen, Prove, Verify)

  • KeyGen(1λ,C)→ (pk, vk),输入安全参数λ和电路C,KeyGen产生概率样本pk和vk。这两个键作为公共参数发布,可在Lc上用于证明/验证。
  • Prove(pk, x, w) → π 在输入pk、输入x和NP声明w的见证时,证明人为语句x∈LC输出非交互式证明π。
  • Verify(vk, x, π) → {0, 1} 当输入vk,输入x和证明 π,验证者验证输出1是否满足x ∈ LC。

我们建议感兴趣的读者参看[6,7,8]对zk-SNARK系统的正式介绍和实现。

通常而言这些系统要求KeyGen是由可信任参与方来运行。创新的可扩展计算完整性和隐私(SCIP)系统[9]展示了在假设信任的前提下,一个有希望的方向来避免这个初始化步骤。

3.4.2 密封操作

密封操作的作用是(1)通过要求证明人存储对于他们公钥唯一的数据D的伪随机排列副本成为物理的独立复制,使得提交存储n个副本导致了n个独立的磁盘空间(因此是副本存储大小的n倍)和(2)在PoRep.Setup的时候强制生成副本实质上会花费比预计响应请求更多的时间。有关密封操作的更正式定义,请参见[5]。上述的操作可以用SealτAES−256来实现,并且τ使得SealτAES−256需要花费比诚实的证明验证请求序列多10-100倍的时间。请注意,对τ的选择是重要的,这使得运行SealτBC比证明人随机访问R花费更多时间显得更加明显。

3.4.3 PoRep构建实践

这节描述PoRep协议的构建并已在图4包括了一个简单协议草图。实现和优化的细节略过了。

创建副本 Setup算法通过密封算法生成一个副本并提供证明。证明人生成副本并将输出(不包括R)发送给验证者。

Setup
  • inputs:
    – prover key pair (pkP ,skP )
    – prover SEAL key pkSEAL
    – data D
  • outputs: replica R, Merkle root rt of R, proof πSEAL

证明存储 Prove算法生成副本的存储证明。证明人收到来自验证者的随机挑战,要求在树根为rt的Merkle树R中确认特定的叶子节点Rc。证明人生成关于从树根rt到叶子Rc的路径的知识证明。

Prove
  • inputs:
    – prover Proof-of-Storage key pkPOS
    – replica R
    – random challenge c
  • outputs: a proof πPOS

验证证明 Verify算法检查所给的源数据的哈希和副本的Merkle树根的存储证明的有效性。证明是公开可验证的:分布式系统的节点维护账本和对特定数据感兴趣的可以验证这些证明。

Verify
  • inputs:
    – prover public key, pkP
    – verifier SEAL and POS keys vkSEAL, vkPOS
    – hash of data D, hD
    – Merkle root of replica R, rt
    – random challenge, c
    – tuple of proofs, (πSEAL, πPOS)
  • outputs: bit b, equals 1 if proofs are valid

3.4.4 PoSt构建实践

这节描述Post协议的构建并已在图4中包含了一个简单协议草图。实现和优化的细节略过了。

Setup和Verify算法和上面的PoRep构建是一样的。所以我们这里值描述Prove。

空间和空间的证明 Prove算法为副本生成“时空证明”。证明人接收到来自于验证者的随机挑战,并顺序生成”复制证明“,然后使用证明的输出作为另一个输入做指定t次迭代(见图3)。

Prove
  • inputs:
    – prover PoSt key pkPOST
    – replica R
    – random challenge c
    – time parameter t
  • outputs: a proof πPOST

3.5 在Filecoin的应用

Filecoin协议采用”时空证明“来审核矿工提供的存储。为了在Filecoin中使用PoSt,因为没有指定的验证者,并且我们想要任何网络成员都能够验证,所以我们把方案改成了非交互式。因为我们的验证者是在public-coin模型中运行,所以我们可以从区块链中提取随机性来发出挑战。




回复

使用道具 举报

622

主题

988

帖子

3549

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3549
发表于 2018-4-22 13:48:51 | 显示全部楼层
导语如果要说2018年我最期待的项目,IPFS星际文件系统一定是第一位。IPFS(Filecoin)在2017年8月份创纪录地募集到了2.5亿美金,而这次Token Sale仅仅只出售10%的代币,这意味着IPFS还没正式上线,市值已经达到了25亿美金。今天,就跟随希多一起去看看,IPFS(Filecoin)这个项目到底有什么魔力,让投资人如此的疯狂?
超文本传输协议(Http)有什么问题?

超文本传输协议(Http)是一种用于在不同个体之间传输超媒体信息的应用层协议。Http是当前互联网数据通信的基础。Http由1999年公布至今已经经过了将近20个年头。不得不说Http是20世纪人类最伟大的发明之一,但是随着互联网持续爆炸式地增长,Http协议的弊端也逐渐显露了出来:
1.内容将被永久抹去
我们都见过“404 Page Not Found”这种常见的错误。这表示,你寻找的页面不存在。造成这种错误的原因有两种:
  • 服务器上的文件被永久性地删除了。
  • 服务器被关闭了。

这意味着,你所寻找的网页已经永远的地从互联网中消失了(除非你提前做好了备份)。

2.Http非常昂贵且浪费资源
根据IPFS官方的博客,这个油管上鸟叔的“江南Style”MV到目前为止,已经被全世界播放了30亿次,如果我们假设这个MV的大小为100MB,那么到目前为止,这个MV一共消耗了大约300Petabytes(1P=1,000,000GB)的网络流量,如果按照0.01USD/GB 的价格来算的话,那么谷歌将支付3百万美金给网络服务供应商(ISP)。
3.安全问题
Http协议过于地中心化。为了支撑Http协议,服务器必须24*7小时处于开启状态。对于流量巨大的公司:百度,淘宝,腾讯,他们每年将花费巨额资金用于维护公司的服务器和解决安全隐患例如:DDoS,XSS,CSRF等等。
为了解决以上的问题,接下来,我们要介绍今天的主角:IPFS星际文件系统。
什么是IPFS?

IPFS is a distributed file system thatseeks to connect all computing devices with the same system of files. In someways, this is similar to the original aims of the Web, but IPFS is actuallymore similar to a single bittorrent swarm exchanging git objects. IPFS couldbecome a new major subsystem of the internet. If built right, it couldcomplement or replace HTTP. It could complement or replace even more. It soundscrazy. It is crazy.
IPFS是一个分布式文件系统协议。IPFS协议定义了文件在分布式系统中如何存储,索引,和传输。IPFS的目标是通过一个文件系统将网络中所有的设备连接起来。在某些方面,IPFS和WEB原本的设计很像,但是IPFS更像是一些由节点组成的P2P的Git文件系统。如果IPFS使用得当,IPFS将可以代替HTTP协议。
一句简单的话来概括:IPFS即是一种点对点的超媒体文件存储,索引,交换协议。
IPFS如何运作?

在传统的HTTP协议中,文件资源通过资源标示符(Resource Identifier)来索引,例如百度网站:www.baidu.com. 而在IPFS的文件系统中,文件将根据内容(Content)来进行索引。每个文件将会根据内容来进行哈希映射Hash从而得到一个独特的指纹(fingerprint),在IPFS中的文件将根据这个指纹来进行索引。
IPFS中的文件将会被区块化,并分发到网络中不同的结点上。网络中的每个节点将会存储一部分文件,并维护文件的指纹即fingerprint以方便其他用户读取文件。
在IPFS系统中,IPFS将会采用和Git类似的机制来记录文件的修改,而不是每次修改后,拷贝复制整个文件。并使用梅克尔树(Merkle DAG)来验证文件的完整性
为了激励人们参与到IPFS协议中(经济上的激励),IPFS借鉴了比特币的经济模型,开发出了基于IPFS的货币Filecoin。IPFS网络的参与者将通过2种方式获得Filecoin.
  • Host 为网络提供空闲的存储空间。
  • Retriver 为网络中的节点提供带宽,帮其他用户传输文件。

所以在IPFS中,你拥有两种挖矿的方式。
一句话总结:IPFS就像是一个集成了P2P种子下载器,Git版本控制和比特币的分布式文件系统。
我为什么看好IPFS?

介绍完什么是IPFS,接下来我要聊一聊我对IPFS的看法,为什么我认为IPFS是2018年最受期待的项目,为什么我非常看好IPFS。
1.IPFS拥有非常好的团队
IPFS由一位来自于墨西哥的小伙子JuanBenet于2014年五月发明。Juan Benet毕业于斯坦福,在2015年参与了大名鼎鼎的YCombinator计划(对就是那个Gonetwork被拒绝的计划),并成功地创立了Protocol Lab实验室。到目前为止,ProtocolLab实验室已经拥有上百位代码贡献者和14位核心开发人员。IPFS的开发进度非常好,到目前为止已经发布了27个版本的迭代。
2.IPFS已经被大规模的采用
到目前为止,非常多的项目已经采用了IPFS来进行开发。比如:Akasha,BlockCat, Mana, District0x, ZenCash,BeeToken,TokenClub等等。前段时间闹得沸沸扬扬的以太坊太子ETF,也将采用ETH+IPFS的架构。不可否认,未来还有更多的项目将基于IPFS。
3.人类的历史将永远被记录不再抹去
IPFS没有中心化的服务器,IPFS系统中的所有文件将被永久的记录下来(除非拥有者刻意删除)。因为采用了Git的机制,网络中文件所有的修改记录也将会被最大程度的保留。使用IPFS来进行文件的存储,再也不用担心文件因为一些天灾人祸而被销毁。
4. IPFS将大大地降低公司的运营成本
如果你使用IPFS这种P2P的协议来传送大量的数据,IPFS将可以为你节约大量的带宽,你不再需要向网络服务商(ISP)付大量的费用。不仅如此,IPFS也将给你提供更快的文件传输与更安全的文件存储。
5.与区块链完美结合
区块链目前最大的问题是无法存储大量的数据,因为所有的结点(Node)理论上讲都需要存储所有的数据。使用IPFS协议,你可以仅仅只将IPFS中的链接(Link)和时间戳(Timestamps)写入到不可更改(Immutable)的区块链上,从而达到使用区块链安全储存数据的目的。
6.为世界带来自由
基于IPFS,所有人都可以无拘无束地创造自己的作品。你将不再受制于第三方机构,限制你的只有你的想象力和创造力。内容的创造者将对自己的创作拥有100%的控制权。
7.巨大的成长潜力
国外的云盘DropBox目前估值约在100亿美金左右。美国45家云服务上市企业,总市值近2千亿美元平均市值达16亿美元。而整个云服务市场的份额大约在10000亿美金左右。IPFS众筹如果不破发的话,市值大约为25亿美金。而IPFS要做的事情不是仅仅一个云存储这么简单。IPFS的终极目标是颠覆HTTP协议。IPFS极有可能成为下一个千亿美金级别的项目。
请输入标题

IPFS的众筹,即Filecoin已经在2017年8月底完成。当时在Coinlist上一共募集了2.5亿美金。有四种参与的选项:
  • 6个月不锁仓无优惠
  • 12个月锁仓优惠7.5%
  • 24个月锁仓优惠15%
  • 36个月锁仓优惠20%

最后其成交价格大约为2.5USD/Filecoin。目前,你有两种方式可以成为IPFS的投资者:

1. 去Gate或者LBank购买Filecoin期货(当前价格为140人民币)
2. 等待2018第一季度,IPFS主网上线,利用你闲置的硬盘/带宽成为矿工。
我们的建议是,与其追高购买期货(已经比众筹时候涨了6-7倍),不如未来成为IPFS的矿工,因为众筹只售出了10%的代币而已。70%的Filecoin有待挖掘线性释放。
另外,有不少朋友在后台向我们反馈:最近有不少人利用IPFS挖矿来进行炒作诈骗。目前为止IPFS官方并没有发布任何有关挖矿的信息。所以,请各位小散提高警惕,不要一味地听信别人。我们也会密切地关注IPFS的最新动态,如果有任何消息会在第一时间告诉大家。在未来我们会手把手指导大家如何成为一名专业的IPFS的矿工。请大家持续关注《希多说币》。
如果你还想了解更多关于IPFS的资讯,请访问IPFS中国官方社区:

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Hi,Tokens  |网站地图

GMT+8, 2019-8-22 20:22 , Processed in 0.080468 second(s), 7 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表