IPFS协议栈之命名层
命名层(Naming)
IPNS:命名以及易变状态
IPFS形成了一个内容可寻址的DAG对象,可以在IPFS网络中发布不可更改的数据,甚至可以追踪这些对象的版本历史记录。但这样会存在一个严重的问题,当数据对象的内容更新后,发生改变的还有内容地址的命名。我们需要一种能在易变环境中保持固定命名的方案,为此,IPFS的IPNS星际文件命名系统模块就闪亮登场了。
自验证命名
使用自验证的命名方案给了我们一种在加密环境下,在全局命名空间中,构架可自行认证名称的方式。模式如下:
- 通过NodeId = hash(node.PubKey),生成IPFS节点信息。
- 给每个用户分配一个可变的命名空间,由之前生成的节点ID信息作为地址名称,在此路径下: /ipns/ 。
- 一个用户可以在此路径下发布一个用自己私钥签名的对象,比如说: /ipns/XLF2ip4ii9x0wejs23HD2swlddVmas8kd0Ax/ 。
- 当其他用户获取对象时,他们可以检测签名是否与公钥和节点信息匹配,从而验证用户发布对象的真实性,达到可变状态的获取。
需要注意的是,这块的动态可变内容是通过设置路由函数来控制的,通过这段源码我们也能了解到为什么命名空间是以绑定NodeId的形式来挂载的了:
routing.setValue(NodeId,<ns-object-hash>)
在命名空间中,所发布的数据对象路径名称可以被当做子名称:
/ipns/XLF2ip4ii9x0wejs23HD2swlddVmas8kd0Ax/
/ipns/XLF2ip4ii9x0wejs23HD2swlddVmas8kd0Ax/docs
/ipns/XLF2ip4ii9x0wejs23HD2swlddVmas8kd0Ax/docs/ipfs
人类友好名称
IPNS是重新命名地址名称的好方式,但对人类来说,却不是十分友好和记忆,因此,IPFS使用下面的技术来增加IPNS的用户良好度。
1.对等节点链接
遵循自验证文件系统(SFS)的设计理念,用户可以将其他用户节点的对象直接链接到自己的命名空间下,这有利于创建一个更信任的网络:
# Alice links 到 Bob 上
ipfs link /<alice-pk-hash>/friends/bob /<bob-pk-hash>
# Eve links 到 Alice 上
ipfs link /<eve-pk-hash>/friends/alice /<alice-pk-hash>
# Eve 也可以访问Bob
/<eve-pk-hash>/friends/alice/friends/bob
# 访问Verisign认证域
/<verisign-pk-hash>/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
文章借鉴《IPFS与区块链:原理与实战》推荐大家购买正版书籍。
网友评论