IPFS扫盲
第二届深圳区块链技术与应用大会暨展览会,深圳区块链存储与IPFS技术应用大会暨展览会于2019年4月9日在深圳会展中心6号馆举行。那么这个IPFS是什么?和区块链有什么关系?有什么用?又怎么用呢?接下来小编会为您详细解析。
目录
什么是IPFS
简单地说
枯燥地说
有啥用
原理是什么
八层协议栈
IFPS的理想
操作
编译
安装启动
基本操作
对接RESTful
实例
部署个人博客
做电商网站
FileCoin
疑问与解决方案
有价值的参考资料
什么是IPFS
简单地说
IPFS = Bittorrent + git + SFS + BITSWAP
枯燥地说
IPFS(The InterPlanetary File System,星际文件系统), 是一个面向全球的、点对点的分布式版本文件系统,目标是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP),将所有具有相同文件系统的计算设备连接在一起。
原理用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健壮、更持久。
有啥用
1.私人网盘(可以随时随地像访问本地存储一样,访问家里电脑里存的文件)
2.迷你CDN(类似百度金矿,让普通人可以把自家的带宽像商品一样出售给别人)
3.文件共享(知道BitTorrent么,IPFS不但可以共享文件还能共享目录)
4.版本管理(此功能和Web结合起来,以后很难再见到404了)
5.虚拟机的根目录(想想你把一个操作系统装到IPFS上)
6.分布式文件系统(把家里磁盘的使用权像产品一样出售给别人)
7.数据安全(这是去中心化的天赋,想要入侵数据库就要攻击所有人)
8.取代HTTP(基于内容寻址,网络利用率高)
。。。
原理是什么
八层协议栈
网络:传输层(WebRTC)、可靠性(uTP或SCTP)、可连接性(ICE)、完整性、可验证性
路由:DSHT,用于确定同伴或内容的地址,简单说可以让你知道到那个节点去找那个文件;
块交换:Bittorrent+Bitswap, 节点必须以块的形式彼此提供直接的值

对象:Merkle DAG, 路径、本地对象、对象锁定、发布对象、对象加密级别
文件:Blok、List、Tree、Commit、文件系统路径、将文件分隔成LISTS和BLOBS
命名:IPNS、DAG命名可变、人类友好名称,IPFS一问世就有很多人疯狂地去IPFS上注册域名,这就归功于此。
IFPS的理想
IPFS的思想是几十年成功的分布式系统的探索和开源的产物。IPFS综合了很多迄今为止很成功的系统中优秀的思想。除了BitSwap新协议之外,IPFS最大的特色就是系统的耦合以及设计的综合性。
- IPFS是去中心化网络基础设施的一个野心设想,很多不同类型的应用都可以建立在IPFS上。
- 最低限度,它可以用来作为一个全局的,挂载性,版本控制文件系统和命名空间,或者作为下一代的文件共享系统。
- 而最好的情况是,IPFS可以让Web升级一个层次,当发布一个有价值的信息时,任何感兴趣的人都可以进行发布而不会强迫性的必须只允许发布机构进行发布,用户可以信任信息的内容,信不信任信息的发送者都是无关紧要的,还有一个特点就是,一些重要但很老的文件也不会丢失。
- IPFS期待着带我们进入到一个Permanent Web的世界。
操作
编译
以Ubuntu为例
$ go get -u -d github.com/ipfs/go-ipfs
$ cd $GOPATH/src/github.com/ipfs/go-ipfs
$ make install
安装启动
$ ipfs init
$ ipfs daemon &
基本操作
# 添加文件
$ ipfs add a.txt
# QmQ4gV6RzpxURqBKypm981uDDKmPy3Q2hzcJAKFy4ug6PS是add之后生成的
$ ipfs cat QmQ4gV6RzpxURqBKypm981uDDKmPy3Q2hzcJAKFy4ug6PS
aaaaaaaaaaaaaa
# 创建文件夹并复制文件
$ ipfs files mkdir libai
$ ipfs files cp /ipfs/QmQ4gV6RzpxURqBKypm981uDDKmPy3Q2hzcJAKFy4ug6PS /libai/file.txt
# 浏览刚复制过去的文件
$ ipfs files ls /libai
# 将IPFS中的文件取到本地
$ ipfs get /ipfs/QmQ4gV6RzpxURqBKypm981uDDKmPy3Q2hzcJAKFy4ug6PS -o ./
用https的方式浏览我们刚才上传的文件

对接RESTful
API的官方文档:https://ipfs.io/docs/api/
对接API的js开源代码:https://github.com/ipfs/js-ipfs
具体操作步骤如下:
- 编辑ipfs的config文件:将127.0.0.1换成0.0.0.0
- 添加跨域共享
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST", "OPTIONS"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
- 访问IPFS的管理页面:http://[NodeIP]:5001/webui
- 添加文件(路径前一定要加”@”符号)
curl -F file=@myfile “http://localhost:5001/api/v0/add?recursive=false&quiet=<value>&quieter=<value>&silent=<value>&progress=<value>&trickle=<value>&only-hash=<value>&wrap-with-directory=<value>&hidden=<value>&chunker=<value>&pin=true&raw-leaves=<value>&nocopy=<value>&fscache=<value>&cid-version=0&hash=sha2-256“
实例
看完操作步骤,相信您对IPFS的功能有了一些了解,我们进一步开下脑洞,看看能用IPFS干什么。
部署个人博客
ipfs add -r ipfs_blog/
ipfs name publish QmebnxXBK7BgxRy2VsCE6z89epc9teZDh6ih8MCQUjDCZW
ipfs name resolve Qmczs7Qzf9r5Efgi25gofF7VD1rrFuoz49eEgWwh2xdf4X

做电商网站

如图利用IPFS存储资源文件,利用比特币提供支付,自己写个后台提供接口,简直美滋滋(是不是少了很多审核流程),国外的Openbazaar就是这样的一个去中心化的电商,既没有交易费用,也不用担心审查。
FileCoin
Filecion是在IPFS基础上建立的项目,已经经过ICO,代币为“FIL”,用户通过向矿工支付FIL获取存储资源,从而激励有闲置资源的公众参与其中。FileCoin用复制证明(PoRep)和时空证明(Post)两种方式来证明矿工的价值,相比于依赖于工作量证明法(Pow)的比特币,FileCoin挖矿不会耗费那么多的电力和CPU。
疑问与解决方案
- 长长的一串哈希值不容易被记住。
答:IPFS可以配置人类友好型域名,ipns就是解决这个问题的。 - 不想和世界联网,只想自己组个私网。
答:IPFS支持搭建私网,生成一个swarm.key放到IPFS数据目录即可。
有价值的参考资料
Filecoin白皮书: https://filecoin.io/filecoin.pdf
Filecoin白皮书中文: http://chainx.org/paper/index/index/id/13.html
IPFS中文官网: http://ipfser.org/
IPFS白皮书: https://raw.githubusercontent.com/ipfs/ipfs/master/papers/ipfs-cap2pfs/ipfs-p2p-file-system.pdf
IPFS白皮书中文: https://gguoss.github.io/2017/05/28/ipfs/
IPFS源码: https://github.com/ipfs/go-ipfs
IPFS安装: https://ipfs.io/docs/install/
IPFS-js-api: https://github.com/ipfs/js-ipfs
IPFS扫盲的更多相关文章
- [转载]敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述S ...
- ECMAScript 6 扫盲
ECMAScript 6 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ES6 中 ...
- 转摘 MySQL扫盲篇
一下文章摘自:http://www.jellythink.com/archives/636 MySQL扫盲篇 2014-09-15 分类:MySQL / 数据库 阅读(1412) 评论(1) 为什么 ...
- 敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中 ...
- Android扫盲教程大全经典教程全分享
Android扫盲教程大全经典教程全分享,相当于android的简单用户手册下载路径 Android扫盲教程大全经典教程全分享.rar
- 【转】扫盲 同步利器、分布式网盘--BT Sync
原文地址:http://program-think.blogspot.com/2015/01/BitTorrent-Sync.html先向大伙儿宣布个好消息——经过多位热心读者的大力支持,经过几天的努 ...
- 扫盲 BT Sync——不仅是同步利器,而且是【分布式】网盘
先向大伙儿宣布个好消息-- 经过多位热心读者的大力支持,经过几天的努力,已经完成了"微软网盘"到"BitTorrent Sync"的迁移工作. 再次向这批热心读 ...
- jQuery学习笔记 - 基础知识扫盲入门篇
jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...
- [IIS]IIS扫盲(六)
一:聊天室 聊天室的种类有很多,免费的聊天室也有很多,这些聊天室的ASP源码从网上都可以下载得到,我们就以毒爱聊天室为版本来教大家做.好,大家先下载毒爱聊天室,当然,本站软件下载里就有下载,下载的是 ...
随机推荐
- Java的流
Java中的流主要是用来读写文件的.只要明确你是读文件还是写文件就可以确定使用哪种流了.读:read 写:writer 1.读文件:filereader这个类,顾名思义就知道是读文件了. 2.写文 ...
- LightGBM算法(转载)
原文:https://blog.csdn.net/niaolianjiulin/article/details/76584785 前者的含义是轻量级,GBM:梯度上升机. 相较于xgboost: 更快 ...
- lsyncd+rsync配置图片资源双向同步
需求:为保证国内外图片加载速度,国内请求上传图片资源地址阿里云oss,国外请求上传图片资源地址aws s3,为保证图片资源的一致性,需定时进行oss和s3图片双向同步 调研方案:由于之前配置过inot ...
- 论文笔记:Siamese Cascaded Region Proposal Networks for Real-Time Visual Tracking
Siamese Cascaded Region Proposal Networks for Real-Time Visual Tracking 2019-03-20 16:45:23 Paper:ht ...
- 后台获取POST方式提交的JSON格式数据
1.直接使用request.getParamater()的方法获取(这种取参方式对于POST和GET的提交方式均适用): 2.通过请求体的IO流获取参数(这种方式只能用于POST,因为GET方式没有请 ...
- 51nod 1405 树的距离之和 树形dp
1405 树的距离之和 基准时间限制:1 秒 空间限制:131072 KB 收藏 关注 给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之和. Input ...
- P2822 组合数问题
传送门 思路: 利用公式: C( n,r ) = C( n-1,r ) + C( n-1,r-1 ) 由此可以将计算 C( n,r ) 的过程化为加法来做. 可以看出,C( n,r ) 其实就是求杨辉 ...
- Axure文本框验证和外部url的调用
文本框的验证和外部url的调用: 场景: 当输入文本框中的内容是满足下面条件时:输入4-10的数字,页面会跳转到QQ注册(https://ssl.zc.qq.com/v3/index-chs.html ...
- NGS概念大科普(转)
NGS又称为下一代测序技术,高通量测序技术 以高输出量和高解析度为主要特色,能一次并行对几十万到几百万条DNA分子进行序列读取,在提供丰富的遗传学信息的同时,还可大大降低测序费用.缩短测序时间的测序技 ...
- spring boot中利用mybatis-generator插件生成代码
使用Idea在spring boot中集成mybatis-generator,自动生成mapper.xml model dao 文件 一.配置 pom.xml 在pom.xml的<plugi ...
