我一直在努力弄清IPNS的工作原理。
据我所知,它允许您将ipfs哈希存储在peer_id的命名空间下。
这是否意味着每个ipfs节点只能维护一个ipns哈希?
此外,在ipfs.io的文档中,解释了ipns的工作方式,它包含以下行:
Note that updating an ipns entry can "break links" because anything referencing an ipns
entry might no longer point to the content it expected. There is no way around this
( you know, mutability ), therefore, ipns links should be used carefully
if you want to ensure permanence.
“断开链接”在这里是什么意思?
答案 0 :(得分:2)
每个ipfs节点可以具有任意数量的IPNS密钥对。
您有一个默认的密钥对,该密钥对是在创建节点时生成的。如果您进行ipfs name publish <somehash>
,则将其发布。
$ ipfs name publish /ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN
Published to QmPgJooiXNDGWE6QGWhks935n8DiTP7ysH8wezAbkCrND7: /ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN
此密钥对也是用于节点ID的密钥对。
$ ipfs id --format='<id>'
QmPgJooiXNDGWE6QGWhks935n8DiTP7ysH8wezAbkCrND7
但是您可以生成任意数量的其他键,如下所示:
$ ipfs key gen -t rsa -s 2048 test
QmfMtYnxBH46HKE89NKTfffSckiSw3c9UD1n3rdyC5zphM
然后发布到那些命名的键
$ ipfs name publish --key=test
/ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN
Published to QmfMtYnxBH46HKE89NKTfffSckiSw3c9UD1n3rdyC5zphM: /ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN
可能值得注意的是,这些密钥对可以复制到其他节点。拥有密钥对(包括私钥)的任何节点都可以发布到该名称。
现在,关于断开链接。 IPNS名称的值可能会随时间变化。这就是重点。因此,只要内容仍在网络中某个位置,像/ipfs/Qm1234/foo/bar/index.html
这样的ipfs链接就永远不会过时,但是像/ipns/Qm5678/foo/bar/index.html
这样的链接可以在某个时间存在,然后在新的链接消失后就不存在了。 ,则以该名称发布不同的目录结构。