在IPFS上存储NFT

共 4177字,需浏览 9分钟

 ·

2021-04-09 17:11

永久性和不变性是不可替代标记(NFT)核心价值主张的一部分。不幸的是,由于基本的设计缺陷,今天许多面向消费者的nft都不能提供这两种特性。

人们经常听到NFT“永远存在于区块链上”的说法,但由于在区块链上存储数据的成本和空间限制,通常只存储所有权记录,元数据链接到NFT的实际内容。

通常,这些链接都是脆弱的,使用HTTP协议将用户指向特定的位置,而不是特定的资产。这意味着链接指向的内容可能会在将来的任何时候更改或脱机,从而使原始资产永远丢失(所有权记录也一文不值)。

星际文件系统(IPFS)可以帮助解决这些问题,而利用IPFS的nft有有许多优势。然而,遵守既定惯例对于确保网络上存储的数据的永久性和可访问性至关重要。

随着不可替代代币(NFT)的流行,现在是重新审视在IPF上链接和存储NFT数据的最佳实践的好时机。

在本文中,我们将特别讨论最近关注的两个领域:内容寻址和内容完整性。你可以在我们的新文章“使用IPFS存储NFT数据的最佳实践”的IPFS文档站点上找到更多详细信息。

内容寻址

IPFS内容标识符(CID)是一种非常健壮和灵活的方式,可以唯一地标识任何内容,无论内容存储在何处或如何存储。为了最大限度地利用这些优势,开发人员应遵循以下建议和惯例来链接到IPFS数据。

链接概述

这篇文章并不是要对CID进行全面的解释(为此,请参阅其他精彩的资源)。但是,读者应注意以下区别:

CID
CID是一段内容的自描述唯一标识符。

 

例如:bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
CID应该在应用程序代码内部以及在其他上下文中使用,无论你使用的是IPFS还是其他系统,都应使用CID。

我们建议每当将CID存储在磁盘上时,尤其是在元数据和区块链记录中将它们转换为IPFS URI后,这些ID在创建后就不能更改。包括ipfs://URI方案将重要的上下文添加到CID中,该CID可以清楚地向用户和自动工具显示如何查找内容。

IPFS URI
统一资源标识符或URI用于指定给定上下文中的特定内容。上下文由URI方案确定(作为前缀附加到URI,后跟://)。IPFS的URI方案就是IPFS。URI可以选择性地包含附加到末尾的路径。
例子:
  • ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

  • ipfs://bafybeigvafaks2bvivtv46n2z7uxszpvl25jhvzc6dbhnjjgjkbeia5jta/nft.mp4

IPFS URI是指向文件或目录的IPFS链接的规范表示。从智能合约链接到IPFS数据时,请使用IPFS URI明确指示应使用IPFS检索数据。

当链接到IPFS上存储的图像和其他媒体资产时,也应在NFT的结构化元数据内使用IPFS URI。

HTTP网关URL
HTTP网关为无法本机解析IPFS URI的传统浏览器提供互操作性。这样的链接应该只在应用程序的表示层中使用,不应该存储在区块链上或NFT元数据内部。
例:https://dweb.link/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

请注意,HTTP网关重新集中了内容的分发,同时呈现中间人矢量和单点故障—如果网关操作员脱机或无法访问,链接将中断。但是,具有内置IPFS支持的浏览器(可以通过IPFS Companion浏览器扩展,也可以通过本机支持,如Brave提供的)不受这些问题的影响,因为它们可以自动从这些链接中提取CID,并根据用户首选项从IPFS加载数据。

在各种情况下寻址

开发人员应根据上下文设置不同的链接格式。

链上
NFT智能合约应将IPFS URI返回到与每个令牌关联的资产和元数据。
例:ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json

我们建议在生成每个代币并在链上存储完整的URI之前生成IPFS URI。这是符合需要URI的智能合约接口的最简单方法,ipfs://URI方案使得任何分布式应用程序都可以很容易地看到使用ipfs的数据可用。

元数据
在代币元数据中,应该使用IPFS URI作为以明文形式链接到IPFS资源的最明确,最可靠的方法。

这是引用NFT媒体资产的IPFS URI的示例:
 ipfs://bafybeigvafaks2bvivtv46n2z7uxszpvl25jhvzc6dbhnjjgjkbeia5jta/nft.mp4

开发人员可能希望包含指向公共HTTP网关的链接,以实现传统的互操作性。

最好避免使用其他链接到内容的替代方法(例如,非网关HTTP URL)。由于来自特定位置的通过HTTP提供的内容可能会发生更改,因此除了临时内容镜像之外,这种链接不能作为任何东西来依赖。

在区块链上,数据是永久和不变的存储,因此通过HTTP引用内容是脆弱和有风险的。

相反,IPFS URI是永远有效的,因此,可以安全地将其视为数据的规范链接。通过使用IPFS URI作为链接的“真实来源”,应用程序只需生成新的网关链接,就可以轻松地支持多个存储解决方案或随着时间的推移切换到不同的网关。这比将特定网关“硬编码”到永久区块链记录更灵活。

应用
在面向用户的应用程序中,开发人员应通过以下两种方式链接到IPFS内容:
1.IPFS URI
2.HTTP网关URL

直到更多的浏览器支持IPFS URI方案的本机解析为止。请注意,可以根据需要从原始CID或IPFS URI轻松生成两种链接。

以下是针对dweb.link上的公共网关的HTTP网关URL的示例:
https://dweb.link/ipfs/bafybeigvafaks2bvivtv46n2z7uxszpvl25jhvzc6dbhnjjgjkbeia5jta/nft.mp4

可以使用CID作为子域而不是URL路径来编写相同的链接:
https://bafybeigvafaks2bvivtv46n2z7uxszpvl25jhvzc6dbhnjjgjkbeia5jta.ipfs.dweb.link/nft.mp4

这两个示例都对应于以下规范的IPFS URI:
ipfs://bafybeigvafaks2bvivtv46n2z7uxszpvl25jhvzc6dbhnjjgjkbeia5jta/nft.mp4

完整
NFT的一个主要问题是资产的完整性-这包括资产本身以及与资产相关的任何数据。IPFS通过使用CID验证自创建链接以来没有任何更改来保护NFT数据的完整性。

开发人员应遵循以下建议,以从IPFS的内置数据验证中获得最大收益。

将元数据链接到其资产

代币的元数据应被视为NFT值不可或缺的一部分。因此,为了保留资产的价值,应将元数据与资产一起存储在IPFS上,以确保两者都可访问。

实现此目的的首选方法如下:
1.创建两个新目录(一个用于资产,一个用于元数据)。
2.将资产添加到其目录。
3.将资产目录添加到IPFS,并注意其CID。
4.在自己的目录中创建元数据,使用(3)中的CID引用资产以创建IPFS URI。URI应包含目录的CID和资产的文件名。
5.将元数据的目录添加到IPFS,注意其CID。
6.使用(5)中的CID为元数据创建IPFS URI,并将URI存储在链上以形成所有权记录

此过程都保留了开发人员在其链接中包含文件名的能力(对用户交互很有用),同时确保可以相互独立地引用元数据和资产。
  • 元数据将在以下位置访问: ipfs://{metadata-directoryCID}/metadata-filename

  • 可以在以下位置访问该资产:ipfs://{asset-directoryCID}/assetfilename

这是一些JSON元数据的示例,其中包含链接到图像文件的IPFS URI:

可以使用IPFS URI提取图像
ipfs://bafybeidfjqmasnpu6z7gvn7l6wthdcyzxh5uystkky3xvutddbapchbopi/no-time-to-explain.jpeg。

为了进行演示,你的应用程序可以创建一个网关URL,以允许用户使用HTTP来获取图像,例如:
https://dweb.link/ipfs/bafybeidfjqmasnpu6z7gvn7l6wthdcyzxh5uystkky3xvutddbapchbopi/no-time-to-explain.jpeg

一旦创建了元数据,它就作为一个JSON文件存储在IPFS上,结果CID被用来创建一个URI,比如:
ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json,可以将其存储在智能合约中。

要查看该过程的实际示例,请查看IPFS文档站点上的如何使用IPFS铸造NFT,其中使用javascript详细显示了整个过程。

高可用性

使用分布式网络(如IPFS)服务内容的主要原因之一是防止链路腐烂。这是通过允许网络中的其他节点通过同居镜像数据来实现的。

然而,希望确保内容可用性的开发人员不应依赖其他节点的利他。为了确保链接内容仍然可用,开发人员应该自己托管它,方法是将内容的CID固定在他们管理的IPFS节点上,将内容保存并分发到希望帮助的任何其他节点上。

如果他们愿意,开发人员也可以通过固定服务来委派这个责任。

感谢阅读!

本文由老司机翻译,原文地址为

https://blog.ipfs.io/2021-04-05-storing-nfts-on-ipfs/


在右下角留下你的赞吧


浏览 39
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报