在IPFS上存储NFT

2021-06-30 19:06:40 adminipfs189

IPFS可以帮助解决链接指向的内容将来可能会更改或脱机,从而使原始资产永远丢失这些问题,而利用IPFS的NFT则具有许多优势

  永久性和不变性是不可替代令牌(NFT)核心价值主张的一部分。不幸的是,由于基本的设计缺陷,当今许多针对消费者的NFT都无法提供这些特性。经常听到有人说NFT“永远存在于区块链上”,但是由于存储数据在区块链上的成本和空间限制,通常会只存储所有权记录,而元数据链接到NFT的实际内容。

  这些链接经常是脆弱的,并且使用HTTP协议而不是特定资产将用户定向到特定位置。这意味着链接指向的内容将来可能会更改或脱机,从而使原始资产永远丢失(并且所有权记录毫无价值)。


0406-1-1.png


  星际文件系统IPFS)可以帮助解决这些问题,而利用IPFS的NFT则具有许多优势。但是,遵守已建立的约定对于确保网络上存储的数据的持久性和可访问性至关重要。随着不可替代令牌(NFT)的迅速普及,现在是时候重新考虑在IPFS上链接和存储NFT数据的最佳做法了。在这篇文章中,我们将特别解决两个近期关注的领域:内容寻址和内容完整性。您可以在我们的新文章“使用IPFS存储NFT数据的最佳实践”的IPFS文档站点上找到更多详细信息。


  内容编址

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


  链接概述

  这篇博文无意对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-directory-CID}/metadata-filename

  •可以在以下位置访问该资产: ipfs://{asset-directory-CID}/asset-filename

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

  {

  "name": "No time to explain!",

  "description": "I said there was no time to explain, and I stand by that.",

  "image": "ipfs://bafybeidfjqmasnpu6z7gvn7l6wthdcyzxh5uystkky3xvutddbapchbopi/no-time-to-explain.jpeg"

  }

  可以使用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的URIipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json,可以将其存储在智能合约中。

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


  高可用性

  使用像IPFS这样的分散网络来提供内容的主要原因之一是防止链接腐烂。这是通过允许网络中的其他节点通过共同托管来镜像数据来实现的。但是,希望确保内容可用性的开发人员不应依赖其他节点的利他主义。为了确保链接的内容仍然可用,开发人员应将内容的CID固定在他们管理的IPFS节点上,并与希望提供帮助的其他人一起保存和分发内容,从而自己托管该内容。如果他们愿意,开发人员还可以通过固定服务来委派此责任。


首页
产品
新闻
联系