在IPFS上使用IPNS
阿牛哥 Lv4

关于如何用ipfs命令管理文件已经介绍完毕,本篇我们来看看建立在IPFS上的IPNS。

IPFS分享文件的一个问题

最常见的分享场景是这样的:

  1. 我们向IPFS网络add文件
  2. 得到文件的CID
  3. 把CID分享给别人,对方就可以通过ipfs get CID下载文件

这里有一个不方便的地方:如果分享的这个文件被修改,相应的CID也会随之改变。因此每次修改文件后,我们都需要给接收者发送新的CID,否则对方没办法得到新版本文件的。

为了解决这个问题,我们引入了IPNS。

什么是IPNS

所谓“NS”就是域名系统,定义了从名称获取到文件的过程。我们最为熟悉的NS系统当属DNS。DNS的作用就是将域名(比如qianniu.fun)转换成服务器的IP地址。不管qianniu.fun的服务器IP地址怎么变,域名qianniu.fun是不会变的。负责处理域名和服务器地址之间转换的流程就是DNS。

IPNS在设计思想上与DNS完全一样。IPNS以一个不变的name指向某个文件,不管文件内容怎么变,或者说不管CID怎么变,这个name是不变的。以后只要通过该name就能定位到内容,免去了分享者与接收者之间反复同步CID的麻烦。

ipfs name命令

原理很简单,我们来看看怎么用。

假设我们要分享home.html,该文件的内容会经常改变。

首先,创建一个密钥

ipfs key gen mykey

得到名称

k51qzi…w5

该名称用作以后访问home.html用的name,将来即便home.html的内容发生改变,依然用这个名称来下载。

然后,绑定name和CID

ipfs name publish –key mykey <home.html的CID>

发布的时间比较长,可能要等几分钟,耐心等待。

待发布完成后,接收者可以用以下命令获取home.html

ipfs get k51qzi…w5

今后,每当home.index内容发生改变时,执行以下命令

ipfs add home.index
ipfs name publish –key mykey <name.html的新CID>

经过以上几步,以后就不用通知接收者新的CID了。

注意:根据官方文档ipfs name有失效时间,一般是24小时,超时之后,你需要再次执行一遍ipfs name publish。对此,可能你需要写一个定时脚本,每隔几个小时publish一次name,保持name时时在线。

(完)