IPNS 是 IPFS 生态中的一个重要组件,全称是 InterPlanetary Name System,一个去中心化的类似域名的系统。
这里是 IPNS 的官方介绍:
内容寻址是 IPFS 找到内容的最基础的方式。但是会有一个问题是,内容 ID 其实是内容的 hash。因此如果内容本身如果发生了任何变化,那么 hash 也会变。所以如果是用内容 ID(CID)来绑定给 ENS 的话,每更新一次博客就去烧 gas 重新设置 ENS 的 Content Hash,在现有的 gas fee 情况下,就太贵了。
而 IPNS 可以解决这个问题。每一个 IPNS 类似加密货币的钱包,会有一对 public key 和 private key。public key 就是 IPNS 的对外的地址,而 private key 可以用来修改这个对外地址所对应的 CID。
因此,当你用 IPNS 来绑定给 ENS 作为 Content Hash 的时候,完整的链条是这样的:
ENS -> IPNS -> CID
其中 ENS 到 IPNS 这层绑定,会需要一次性的 gas 费。
IPNS 到 CID 这一层,是免费的。
这样我们就可以实现用 IPFS 更新内容之后,ENS 上的网站也就能够动态更新,同时只需要消耗一次性的 gas 费。
比如本站的 IPNS 地址是:
k51qzi5uqu5dgbfw2poynnynor8h9kqqoxmzdrxy4h4wnzx1x5p4n40ijtosxk
然后绑定到了 olivida.eth 这个 ENS 域名上。
在所有支持 IPFS + ENS 生态系统的应用中,你可以使用上面的 IPNS 地址或者 ENS 找到同样的内容。