编者按:EOS每秒百万的tps如果要实现的话,按照一个交易数据100字节计算,1天的区块数据量为1000000 * 100 * 60 * 60 * 24 = 7.8TB,一年的区块数据量为7.8 * 365 = 2868TB,到了2023年大约需要14340TB的存储空间,这是非常庞大的一个数字,需要花费巨大的成本支出,这还不包括智能合约用户上传的数据,为了解决这个问题,EOS采用了IPFS协议来进行文件的存储。

一、IPFS 简介

IPFS—又称“星际文件系统”,是一个旨在创建持久且分布式存储和共享文件的网络传输协议。它是一种内容可寻址的对等超媒体分发协议。在IPFS网络中的节点将构成一个分布式文件系统。它是一个开放源代码项目,自2014年开始由Protocol Labs (协议实验室)在开源社区的帮助下发展。其最初由Juan Benet设计。
IPFS是点对点的超媒体协议,可以让网络更快、更安全、更开放。它是一个面向全球的、点对点的分布式版本文件系统,试图将所有具有相同文件系统的计算设备连接在一起。简单点说,它是一个点对点的分布式文件系统(和比特币技术一样),通过底层协议,可以让存储在IPFS系统上的文件,在全世界任何一个地方快速获取,且不受防火墙的影响(无需网络代理)。

我们现在所使用的互联网协议被称作——超文本协议HTTP。这种协议具有中心化特性。也就是说,你从互联网上下载文件或者是浏览网页,一次只能从一个数据中心获取你所需要的资料。如果这个数据中心出现故障,或者被限制或是攻击,就会出现文件丢失或者网页无法打开的问题。比如你存在某云盘的资料突然无法下载,或者你想浏览的网页因为某些政策原因无法打开。

而IPFS的目的就是解决这些问题。在某些方面,IPFS类似Web,你一样可以基于IPFS进行互联网地址的链接。但IPFS是去中心化的,它不存在Web的主网故障问题。所以,IPFS在未来的某一天完全取代掉HTTP也并非天方夜谭。

1.1 IPFS与HTTP的区别
HTTP的四大痛点

  • HTTP效率低下,服务器成本昂贵

使用HTTP协议从一台计算机服务器上一次只能下载一个文件,而不是同时从多台计算机中获取文件。通过P2P方式的视频传输可以节省带宽成本的60%。

  • 历史文件被删除

网页的平均使用寿命为100天,大量的网站文件不能得以长期保存。有些重要的文件因操作不当,也有可能永远在互联网消失。

  • 中心化的网络限制了机会

互联网一直是人类进步的催化器,但中心化的网络容易被控制,是对互联网良性发展的的威胁。

  • 网络应用太依赖骨干网

为保证数据的可靠性,我们开发的应用程序太依赖大型的中心服务器,并通过大量的备份来保证数据的安全。

HTTP协议已经用了20年的历史,从HTTP 1.0 到现在的HTTP5,网页的展示越来越美观丰富,但它背后的Browser/Server 模式是从来没变的。

IPFS区别于HTTP痛点的特质

  • 互联网信息永久存储

IPFS像是一个分布式存储网络,任何存储在系统里的资源,包括文字、图片、声音、视频,以及网站代码,通过IPFS进行哈希运算后,都会生成唯一的地址。今后,你只要通过这个地址就可以打开它们。并且这个地址是可以被分享的。

而由于加密算法的保护,该地址具备了不可篡改和删除的特性(在某种意义上,如果破解密码还是有可能被篡改或删除,但概率极低)。所以,一旦数据存储在IPFS中,它就会是永久性的。比如我们经常会遇到的某个资源删除无法访问的问题。

这种情况,在IPFS上就不会发生。即便是把该站点撤销,只要存储该站点信息的网络依然存在,该网页就可以被正常访问。存储站点的分布式网络越多,它的可靠性也就越强。

IPFS存储的一般是公共信息,普通大众都可以获得的。

  • 解决过度冗余问题,实现共享经济

如果你喜欢某部电影,又担心电影资源丢失,通常的做法是,你会把这部电影下载在自己的电脑上。比如电影《阿凡达》,在2016年一年的下载次数就达到了1658万次,总下载数量更是惊人。那么一个无法避免的问题是:同样的一部电影被反复储存,造成了内存资源极大浪费。这就是HTTP协议的弊端。同样的资源备份的次数过多,就会造成过度冗余的问题。

而IPFS的出现可以很好的解决这个问题。IPFS会把存储文件,做一次哈希计算,内容相同的两个文件哈希值相同。所以,用户只需要使用相同的哈希值,就可以访问那个文件,这个哈希值就是文件的地址,这样就可以共享资源了。

基于上面的永久存储特性,你再也不用担心某个电影找不到了,也不用备份,因为全球电脑上只要有那么几个人存储着,你就能拿到它。而不是重复存储几十万份。

  • 同时基于内容寻址,而非基于域名寻址。

IPFS的网络上运行着一条区块链,即用来存储互联网文件的哈希值表,每次有网络访问,即要在链上查询该内容(文件)的地址。

文件(内容)具有存在的唯一性,一个文件加入了IPFS的网络,将基于计算对内容赋予一个唯一加密的哈希值。这将改变我们使用域名访问网络的习惯。

提供文件的历史版本控制器(类似Git),并且让多节点使用保存不同版本的文件。

  • 节点存储激励,代币分成

通过使用代币(FileCoin)的激励作用,让各节点有动力去存储数据。 Filecoin 是一个由加密货币驱动的存储网络。矿工通过为网络提供开放的硬盘空间获得Filecoin,而用户则用 Filecoin 来支付在去中心化网络中储存加密文件的费用。

1.2 IPFS工作原理

  • 每个文件及其中的所有块都被赋予一个称为加密散列的唯一指纹。
  • IPFS通过网络删除重复具有相同哈希值的文件,通过计算是可以判断哪些文件是冗余重复的。并跟踪每个文件的版本历史记录。
  • 每个网络节点只存储它感兴趣的内容,以及一些索引信息,有助于弄清楚谁在存储什么。
  • 查找文件时,你通过文件的哈希值就可以在网络查找到储存改文件的节点,找到想要的文件。
  • 使用称为IPNS(去中心化命名系统),每个文件都可以被协作命名为易读的名字。通过搜索,就能很容易地找到想要查看的文件。

从IPFS的介绍可以看出, IPFS设想的是让所有的网络终端节点不仅仅只充当 Browser或Client的角色,其实人人都可以作为这个网络的运营者,人人都可以是服务器。

1.3 IPFS应用场景

二、IPFS 配置

2.1 IPFS 下载
下载地址:https://dist.ipfs.io/#go-ipfs

2.2 IPFS 安装

ipfs --help //打开命令行,输入,出现Log信息时,表示安装成功

2.3 IPFS本地部署
2.3.1 创建节点
在本地全局目录下新建仓库:

2.3.2 节点配置
cd ~/.ipfs

export EDITOR=/usr/bin/vim

ipfs config edit
执行完ipfs config edit后会打开一个ipfs节点配置文件,可以修改配置参数,后面会演示此文件的修改细节。

2.3.3 节点ID
每个节点都会存在一个唯一标识,查看节点ID方式如下:

ipfs id

2.3.4 启动节点服务器
ipfs daemon

出现了5001端口被占用的情况,这边可以通过对节点配置文件的修改来解决,如下所示:

找到所有配置5001端口的地方
替换成5002端口

再次启动节点,服务成功启动如下所示:

2.3.5 配置CORS跨域资源共享

为了方便后续前端的开发和数据访问,提前对跨域资源共享CORS进行配置,ctrl-c 退出ipfs,然后按照下面的步骤进行跨域配置:

ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST", "OPTIONS"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'

2.3.6 验证
浏览器打开 http://localhost:5002/webui ,出现Web Console 图形化控制台

这里可以看到所有run在主网上的节点信息,和本地节点相关的配置数据。

三、IPFS 项目实践

利用 IPFS 构建一个去中心化、不可篡改的分布式Wiki系统

3.1 新建workplace

考虑到方便后期开源和推广,这边我是托管在github上,大家可以选择自己熟悉的代码托管服务

mkdir workplacecd workplacegit clone git@github.com:daijiale/ipfs-wiki-system.git

3.2 wiki系统搭建

cd workplace/ipfs-wiki-system/wiki-releasell

可以看到如下文件:

wiki-releaseindex.html //markdown模板渲染
navigation.md //导航markdown
index.md //首页markdown

大家可以参考ipfs-wiki Demo,根据自己的需求,通过markdown自定义不同的wiki内容和目录。

3.3 挂载本地节点

记住文件根目录的Hash值:QmV5ZVQxXURKPDcVDW8WjpLCiQYvNzg173XcB6rYFevoXm

3.4 发布到主网

ipfs daemonhttps://ipfs.io/ipfs/QmV5ZVQxXURKPDcVDW8WjpLCiQYvNzg173XcB6rYFevoXm/#!index.md

3.5 发布到IPNS

由于ipfs的hash对应着一个不可变的内容,每次更新网站之后,website的hash都会变,旧的link不能访问到新的内容。

ipfs提供了ipns来解决更新的问题。ipfs允许用户使用一个私有密钥来对哈希附加一个引用,使用一个公共密钥哈希(简称pubkeyhash)表示你的网站的最新版本。

具体操作是:

通过上述方式,就完成了website和一个固定的link的绑定:

QmPS5NRXPCeAUtofKbW7c58Qm4PpM8mPEVJvaooE13LF78

3.6 绑定验证

ipfs name resolve QmPS5NRXPCeAUtofKbW7c58Qm4PpM8mPEVJvaooE13LF78 /ipfs/QmV5ZVQxXURKPDcVDW8WjpLCiQYvNzg173XcB6rYFevoXm

IPNS访问固定节点Hash:

https://ipfs.io/ipns/QmPS5NRXPCeAUtofKbW7c58Qm4PpM8mPEVJvaooE13LF78

验证成功,出现如下效果:

3.7 去中心化验证

以之前发布到主网的节点为第一节点,我们本地再新建一个节点,用以模拟第二节点的身份,打开Web Console:

在第二节点上,我们依然可以通过IPFS HASH查询到第一节点主网上的 ipfs-wiki-system目录文件数据

同时,我们也能看到:控制台显示记录了我们发布至主网数据的区块节点数已经扩散至275个。

也就是说,来自另外全球其他274地方的个体,在自己的”记账本”中记下了你之前发布的数据,哪怕其中个别服务器宕机(天灾人祸,挖断电缆等等),只要有一个节点正常运行,你的数据都不会丢失,真正意义实现了去中心化的服务机制。

四、项目体验

参考文献:http://ipfser.org/2017/12/19/a8/

【问链财经-EOS公开课】 第十九课 EOS存储之IPFS相关推荐

  1. 【问链-Eos公开课】第四课 EOS 的钱包创建、导入私钥

    参考内容:https://bihu.com/article/197654 1.检查wallet_api_plugin 首先,需要nodeos的config.ini中,已经加载了wallet_api_p ...

  2. 【问链-EOS公开课】第十一课 EOS 智能合约相互调用

    EOS中合约之间是可以相互调用的,主要通过inline action完成合约之间的调用. 譬如在掷骰子游戏中,存在两个玩家先下注资金,然后比较骰子大小后决定胜负,赢的那一方将获得所有的下注资金.在eo ...

  3. 【问链-EOS公开课】第七课 EOS 宪法草案与 BP 协议

    宪法草案设计原则: 第一条–不说谎(EOS用户不得因为利益故意伪造或进行误导性陈述,这种行为将是违宪的并且将是可控告的) 第二条–产权(EOS将是一个有产权定义的区块链或社区,在链上或仲裁程序的范围内 ...

  4. 【问链-EOS公开课】第十三课 EOS插件机制深入解析

    插件体系 EOS插件由三层类来实现. 最顶层是抽象类abstract_plugin,定义了插件的基本接口. 中间层是插件模板类plugin,主要用来解决插件之间依赖调用. 最底层是具体插件类,专注单个 ...

  5. 【问链-Eos公开课】第三课 EOS 的新共识机制 BFT-DPoS

    EOS 最新的白皮书中已经将共识机制从 DPoS 升级为了 BFT-DPoS(Byzantine Fault Tolerance - Deligated Proof of Stake,带有拜占庭容错的 ...

  6. 【问链-EOS公开课】第十七课 EOS中文白皮书1.0

    EOS.IO技术白皮书 作者:block.one 2017年6月5号 翻译:Harvey老狼.谭智勇.宋承根@OracleChain,梓岑@YOYOW 本中文白皮书翻译自EOS白皮书英文版,如果有表述 ...

  7. 【问链-EOS公开课】第八课 EOS 数据库与持久化 API(一)

    在 EOS 中,智能合约执行完毕后,所占用的内存会释放.程序中的所有变量都会丢失.如果智能合约里要持久地记录信息,比如游戏智能合约要记录每位用户游戏记录,本次合约执行完毕后数据不能丢失,就需要将数据存 ...

  8. 【问链财经-区块链基础知识系列】 第三十九课 EOS与ETH体系结构比较全解析

    以太坊理解成为一个在其上可以开发运作各种去中心化的应用(Dapps)的去中心化平台,同时它有一个优势在于,它确保了它的用户在运行这些应用程序(Dapps)时不受任何第三方的约束. EOS将是一个区块链 ...

  9. 【问链财经-区块链基础知识系列】 第二十九课 区块链的世界:中国向左 美国向右

    世界有两大互联网生态,一个是美国构筑的,当中的互联网公司有苹果.谷歌.亚马逊.脸书.雅虎等:另一个是中国构筑的,当中互联网公司有阿里.腾讯.百度.京东.今日头条等.这两大生态占据了全球互联网十强. 其 ...

最新文章

  1. (转)细说Cookie
  2. 老公吵架把我扔街上_我是如何从在街上卖食物到为顶尖的技术公司工作的方式-第2部分:获取......
  3. 启动zookeeper时IDEA启动项目时提示8080端口被占用
  4. Java面试之到底值传递和引用传递???
  5. 学 Python 没找对路到底有多惨?| 码书
  6. 模拟admin组件自己开发stark组件之创建篇
  7. 如何从SQL Server中的SELECT更新?
  8. pytest(2) pytest与unittest的区别
  9. 拓端tecdat|R语言BUGS/JAGS贝叶斯分析: 马尔科夫链蒙特卡洛方法(MCMC)采样
  10. 计算机蓝屏代码0x0000007A,电脑开机蓝屏代码0x0000007a怎么办
  11. 前端拼音首字母搜索姓名
  12. intellij idea 修改字体 修改主题
  13. 计算机win7的后缀名怎么显示,win7显示文件后缀名怎么显示?win7显示文件后缀
  14. 【第104期】游戏策划:如何看待另一半沉迷游戏?
  15. qcom vfe笔记(msm8996平台)
  16. 计算机组老师颁奖词,学生表彰颁奖词与学生计算机室管理制度合集.doc
  17. 有限元方法求解二维矩形区域椭圆方程
  18. 起底币圈地下骗局:传销币、资金盘横行,百亿财富被黑手收割
  19. Java运算符——————03
  20. echarts使用总结(使用echarts画工字型标记线;无数据时设置纵坐标刻度0-1;tooltip数据展示;工具栏 toolBox 图标配置)

热门文章

  1. XPath函数——字符串函数
  2. WIN10下gnuplot 的安装
  3. Python学习笔记:进程和线程(承)
  4. 一个不错的shell 脚本教程 入门级
  5. Linux下的图形界面编程
  6. vs2013 error MSB8031 MBCSMFC问题的解决
  7. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170326
  8. 仔细想了想支持向量机(Support Vector Mechine)
  9. [Medical Image Process] 3.3 Grayscale Morphology Application
  10. PowerDesigner显示注释字段问题