第24章 【IPFS一问一答】IPFS底层架构解析之命名层

24 IPFS底层架构解析之命名层

24.1 IPNS:命名以及易变状态

IPFS对文件或目录文件可以产生一个可寻址的hash值,通过该hash值可以检索到相应的文件内容。但文件的内容一旦改变,之前的hash值将不能检索到最新的内容,而只能检索到历史的内容。这样,对于我们发布可变的内容时,被检索将极不方便。

因此,为了解决这个问题,出现了IPNS,将某个值锁定到可变内容的最新状态。即,当你重新编辑文件内容后,通过锁定的IPNS值,可以访问到最新的内容。

24.2 自我认证命名

SFS自我认证的命名系统给IPFS提供了一种在加密分配的全局命名空间中构建可变的自我认证命名的方法。IPFS的命名方案如下:

比如一个IPNS的链接:https://ipfs.io/ipns/QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP

前面部分https://ipfs.io/ipns/ 是命名空间,后边是节点的身份NodeID。所有的节点都是在同一个命名空间下进行IPNS命名的。

需要注意的是,这块的动态可变内容是通过设置路由函数来控制的,通过这段源码我们也能了解到为什么命名空间是以绑定NodeId的形式来挂载的了:routing.setValue(NodeId,<ns-object-hash>)

在命名空间中,所发布的数据对象路径名称可以被当做子名称:

/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/
/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/docs
/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/docs/ipfs

24.3 人类友好命名

IPNS是以节点的NodeID作为锁定hash值,对于用户来说,这么一长串字符串,很难记住且看上去很不友好。所以需要通过策略设置域名解析,如域名chaindesk.com。我们可以通过ipfs.io/ipns/chaindesk.com来对数据内容进行访问。

1.对等节点链接

  遵循自验证文件系统(SFS)的设计理念,用户可以将其他用户节点的对象直接链接到自己的命名空间下,这有利于创建一个更信任的网络:      ```   # Alice links 到 Bob 上 ipfs link //friends/bob /

Eve links 到 Alice 上

ipfs link //friends/alice /

Eve 也可以访问Bob

//friends/alice/friends/bob

访问Verisign认证域

//foo.com   ``` 2.DNS TXT IPNS记录

  在现有的DNS系统中添加TXT记录,这样能够通过域名访问IPFS网络中的文件对象:

# DNS TXT 记录
ipfs.benet.ai. TXT "ipfs=XLF2ip4jD3U..."
# 表现为符号链接
ln -s /ipns/XLF2ip4jD3U... /ipns/fs.benet.ai

# IPFS也支持可读标识符Proquint,可以将二进制编码翻译成可读文件的方法,如下:
# proquint语句
/ipns/dahih-dolij-sozuk-vosah-luvar-fuluh
# 分解为相应的下面形式
/ipns/KhWwNprxYVxKqpDZ

除此之外,IPFS还提供短地址的命名服务,类似我们现在看到的DNS和WebURL链接:

# 用户可以从下面获取一个link
/ipns/shorten.er/foobar
# 然后放到自己的命名空间
/ipns/XLF2ipQ4JD3Udex6xKbgeHrhemUtaA9Vm