EOS [EOS DAPP 开发] 06 - 安装和使用 IPFS

pendingauth · 2019年05月16日 · 61 次阅读

本文转载自币乎,作者松果,原文链接:https://bihu.com/article/1709852083

什么是IPFS

IPFS(InterPlanetary File System)是一个内容寻址、版本化、去中心化的分布式文件系统。

  • 内容寻址:根据文件内容的Hash值寻址,内容确定则文件地址确定

  • 版本化:可跟踪文件的历史版本,类似于git

  • 点对点:所有ipfs节点组成一个去中心化网络

安装IPFS

1.安装 jsipfs(IPFS的本地js实现)

npm install -g ipfs

2.运行jsipfs命令,查看ipfs的功能:

3.初始化IPFS环境,使用jsipfs init命令,它会在本地生成IPFS节点、RSA公私钥、和一个表示节点身份的哈希值

jsipfs init

# initializing ipfs node at /home/songguo/.jsipfs
# generating 2048-bit RSA keypair...done
# peer identity: QmPveFK5xr3VbkN4tdp3T81YugVYjc8EGPoFmYzyugYGqh

这里的peer identity就是你的IPFS节点名。

4.启动IPFS节点

jsipfs daemon

5.上传文件到IPFS网络

jsipfs add cat.jpg
# added QmRJ5qULwtebTtTgLvq36WY9mPZ2Q2Hi7CscJukGxo1DDv cat.jpg

6.从IPFS网络读取文件

# 使用cat命令
jsipfs cat QmRJ5qULwtebTtTgLvq36WY9mPZ2Q2Hi7CscJukGxo1DDv

# 浏览器从本地读取(需要使用jsipfs daemon启动本地节点)
localhost:5002/ipfs/QmRJ5qULwtebTtTgLvq36WY9mPZ2Q2Hi7CscJukGxo1DDv

# 从公网上读取(需要一定的同步时间)
https://ipfs.io/ipfs/QmRJ5qULwtebTtTgLvq36WY9mPZ2Q2Hi7CscJukGxo1DDv

7.添加目录

jsipfs add命令中添加-r选项,可以将目录添加到ipfs网络中:

最后一个Hash值是目录,可以通过 jsipfs ls 命令查看:

jsipfs ls -v QmRi69xU1CUFD1an88x3NbHpGMgkQaNRjio3Lku1LZuV7b

这里上传的目录,其实是一个静态网页的源码。这样就实现了把静态网页的运行在IPFS上,可以通过下面的IPFS HTTP网关地址访问:https://ipfs.io/ipfs/QmRi69xU1CUFD1an88x3NbHpGMgkQaNRjio3Lku1LZuV7b

我也在研究基于IPFS的动态网站的实现,这样就可以用IPFS替代云服务器。

IPNS

在ipfs中,文件的Hash值完全取决于其内容,如果修改它的内容,对应的Hash值也会发生改变,会有同一个文件的不同版本。但对于一些需要保持动态性的文件(如网页)来说,可能不需要旧版本。

IPNS(IPFS命名系统)就是为了解决文件动态性的问题,它通过指针每次都指向最新的文件内容,使访问者始终访问到的都是最新的版本。

IPNS使节点ID对项目根目录的哈希值进行绑定,以后访问网站时直接通过节点ID访问即可,更新网站时需要重新发布到IPNS。

使用 jsipfs name publish 命令发布本节点ipns到ipfs的映射:

jsipfs name publish QmRi69xU1CUFD1an88x3NbHpGMgkQaNRjio3Lku1LZuV7b

使用 jsipfs name resolve 验证映射

现在,可以使用ipns访问项目了:https://ipfs.io/ipns/QmPveFK5xr3VbkN4tdp3T81YugVYjc8EGPoFmYzyugYGqh

还可以使用DNSLink把哈希值转成可读的名字,这里就不详解了,感兴趣的读者可以自行探索:https://docs.ipfs.io/guides/concepts/dnslink/

到这里,我们学会了在本地使用IPFS,下一篇介绍如何在前端使用ipfs-api和IPFS交互。

Tips

现在IPFS公网访问很不稳定,有时文件会同步失败,暂时只能在本地操作,等待网络稳定就好。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册