IPFS存储NFT数据的最佳做法

IPFS非常适合存储和寻址NFT或不可替代令牌的数据。本指南主要涉及如何在IPFS上存储NFT的数据,以便NFT的创建者和所有者拥有可以经受时间考验的丰富经验。

由于创建NFT后不容易对其进行更改,因此最好考虑一下NFT的数据如何随时间存储,寻址和持久化。这就是为什么我们将详细介绍如何准备NFT元数据的原因,并且还将研究到IPFS内容的不同类型的链接以及何时使用每种链接。最后,我们将了解为什么制定数据持久性计划对于获得良好的用户体验很重要。通过遵循这些建议,可以帮助确保NFT数据的长期健康发展。

本指南面向开发NFT平台和其他工具的开发人员,并且重点介绍如何格式化数据并链接到数据以获得最佳长期效果。如果您正在寻找有关智能合约交互以及令牌铸造如何工作的详细信息,请转到我们的使用IPFS铸造NFT的指南,在这里我们将使用以太坊测试网络从头到尾遍历整个过程。

有几种不同的方式可以引用IPFS上的数据,每种方式最适合不同的用例。

#客户编号

CID唯一地标识一条内容。CID可以以紧凑的二进制形式存储在网络上并通过网络发送,但是当显示给用户时,它们会表示为一串看起来好像随机的字符。这是一个例子:

bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

小费

您可以在我们的内容寻址指南中或通过ProtoSchool上的交互式教程来了解有关CID的更多信息。 (在新窗口中打开)

使用将数据添加到IPFS时ipfs.add,您会收到一个标识内容的CID。要从智能合约或NFT的元数据中链接到您的内容,您应将CID转换为IPFS URI,如下所述。

#IPFS URI

统一资源标识符(URI)用于指定给定上下文中的特定内容。上下文由URI方案确定(作为前缀附加到URI,后跟://)。IPFS的URI方案很简单ipfs。

这是完整IPFS URI的示例: ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

IPFS URI是IPFS链接的规范表示,因为该ipfs方案清楚明确地表明CID是指IPFS而非其他系统上的内容。要生成IPFS URI,只需在CID字符串前面加上静态字符串即可ipfs://。

您还可以在IPFS URI的路径组件中包含文件名。例如,如果您已将令牌的元数据存储在包装在目录中的IPFS上,则URI可能是:ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json

我们建议使用IPFS URI从智能合约链接到使用IPFS存储的任何外部数据,包括描述令牌并对其进行上下文化的任何元数据。

IPFS URI也是从令牌内的元数据链接到IPFS上存储的图像和其他资产的推荐方法。有关更多详细信息,请参见下面的元数据建议

#HTTP网关URL

HTTP网关为无法本地解析IPFS URI的旧版用户代理提供了互操作性。

这是一个例子: https://dweb.link/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

内置支持IPFS的用户代理(通过IPFS Companion浏览器扩展或通过本机支持,例如Br​​ave提供的支持)将能够识别网关链接并使用本机IPFS协议解析内容。其他用户代理将仅遵循到网关的链接,该网关将通过IPFS加载内容并使用HTTP提供内容。您可以在我们关于IPFS网关的概念文章中了解有关HTTP网关的更多详细信息。

网关链接非常适合实现互操作性,但它们不应成为IPFS上数据的主要链接或规范链接。只要IPFS上的任何人都有数据,尽管IPFS URI仍将可访问,但是如果网关操作员脱机,则网关链接可能会失败。

在使用网关链接的地方,开发人员应确保网关遵循正确的URL约定。可以使用以下任一URL结构:

https://<gateway-host>.tld/ipfs/<cid>/path/to/subresource

https://<cidv1b32>.ipfs.<gateway-host>.tld/path/to/subresource

在面向用户的应用程序中,开发人员应通过以下两种方式链接到IPFS内容:

  • IPFS URI
  • HTTP网关URL

在越来越多的浏览器支持IPFS URI方案的本机解析之前,这将提供最佳的用户体验。请注意,可以根据需要从CID或IPFS URI轻松生成两种网关链接。

#元数据

大多数NFT将需要某种结构化的元数据来描述令牌的基本属性。可以使用许多编码和数据格式,但事实上的标准是将元数据存储为JSON对象,并编码为UTF-8字节字符串。

这是NFT的一些JSON元数据的示例:

{
  "name": "No time to explain!",
  "description": "I said there was no time to explain, and I stand by that.",
  "image": "ipfs://bafybeict2kq6gt4ikgulypt7h7nwj4hmfi2kevrqvnx2osibfulyy5x3hu/no-time-to-explain.jpeg"
}

为NFT构建元数据的方法有很多,许多细节取决于NFT平台的特定用例。上面的示例使用ERC-721中定义的架构 (在新窗口中打开)标准。

一般而言,采用或扩展现有标准,例如ERC-721中定义的模式 (在新窗口中打开)ERC-1155 (在新窗口中打开)这是个好主意,因为您可以使用标准的钱包和其他工具(例如区块浏览器)查看您的NFT。

要链接到图像,视频和其他媒体,只需使用IPFS URI即可。这比存储HTTP网关URL更好,因为它没有绑定到特定的网关提供程序。如果您想使用网关URL来获得便利或互操作性,则始终可以在应用程序的表示层中生成它们。

小费

使用元数据中的IPFS URI链接到图像和其他媒体有助于维护NFT数据的完整性!创建IPFS链接后,不能对其进行篡改或更改以指向不同的数据。

即使您今天不使用IPFS存储数据,为媒体生成IPFS URI并将其包含在元数据中也可以使任何人从其他来源下载数据后,就可以验证数据的完整性。如果您(或其他任何人)以后将数据添加到IPFS,则URI将开始工作!

因为您需要知道要在元数据中引用的图像和其他媒体的CID,所以在将媒体资产添加到IPFS之后创建元数据是最简单的。

#使用IPFS目录保留文件名

将数据添加到IPFS时,可以通过将文件包装在目录中来保留易于阅读的文件名。

在javascript中,您可以wrapWithDirectory在调用时设置选项ipfs.add:

const cid = await ipfs.add(
  { path: 'metadata.json', content: aJsonString }, 
  { wrapWithDirectory: true }
)

添加包装在目录中的文件时,ipfs.add返回目录对象的CID。要为文件构建完整的IPFS URI,可以/在CID之后添加一个字符,后跟文件名。例如:ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json。

#持久性和可用性

当您的数据存储在IPFS上时,用户可以从具有副本的任何IPFS节点中获取数据,这可以提高数据传输效率并减少任何单台服务器上的负载。当每个用户获取一条数据时,他们会保留一个本地副本,以帮助以后可能会请求它的其他用户。但是,重要的是要记住,这些副本是临时的,除非用户决定“固定”数据,否则最终将被删除。固定CID会告诉IPFS,该数据很重要,并且当节点接近其磁盘空间限制时不应删除该数据。

如果您要构建使用IPFS进行存储的平台,则将数据固定到健壮且高度可用的IPFS节点很重要,这意味着它们可以在没有大量停机时间和良好性能的情况下运行。请参阅我们的服务器基础结构文档,以了解IPFS群集的方式 (在新窗口中打开)可以帮助您管理自己的IPFS节点云,这些云进行协调以固定平台数据并将其提供给用户。

如果运行自己的基础架构对您的平台或成长阶段没有意义,则可以将此职责委派给远程固定服务。远程固定服务可为您的IPFS数据提供冗余的高可用性存储,而无需任何类型的“供应商锁定”。由于IPFS内容是通过CID而不是位置来寻址的,因此您可以随时在固定服务之间切换,或者随着平台的增长无缝迁移到自己的基础架构。

要了解有关持久性和固定的更多信息,包括如何使用远程固定服务,请参阅我们的持久性,永久性和固定概述

有关与用于NFT数据存储的远程固定服务集成的示例应用程序,请参阅我们的使用IPFS铸造NFT的指南

#概括

IPFS允许NFT以经得起时间考验的安全,可验证和分布式的方式表示任何大小和格式的数据。

以下是我们建议的简要介绍:

  • 使用IPFS URI作为IPFS上数据链接的规范形式,例如: ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json
  • HTTP网关URL应该在应用程序的表示层中生成,以便为使用本机不支持IPFS的浏览器的用户提供良好的体验。如果可能,在应用程序的用户界面中同时提供IPFS URI和网关URL。
  • 在NFT的元数据中,使用IPFS URI链接到图像和其他媒体资产。该ipfs://方案明确了如何获取数据,并且CID确保了数据完整性。
  • 建议在添加到IPFS时将文件包装在目录中,因为这样可以保留文件名并使IPFS URI更易于阅读。
  • 数据持久性应该是平台设计的一部分。运行您自己的IPFS基础结构或使用远程固定服务将使您的数据保持在线和可访问状态。
区块链

英国佳士得计划下个月出售9枚稀有Cryptopunk NFT

2021-4-10 20:31:46

区块链

PancakeSwap和Uniswap之间的竞争?

2021-4-11 19:46:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧