使用 Python 创建您自己的NFT集合(二)NFT存储

使用 Python 创建您自己的NFT集合(二)

该系列主要分为4部分:
第一部分: 如何使用 Python 拼接创建月饼图像集。
第二部分:了解如何生成收藏的元数据。
第三部分:了解生成的收藏如何存储。
第四部分:了解链上合约,NFT上链。

本文主要讲解第三部分,了解生成的收藏如何存储。

了解NFT如何存储

每个 NFT 的核心是其元数据(metadata)。这个元数据包括对 NFT 的描述(名称、属性等)和其媒体文件(图像、视频、音频等)的指示器(pointer)。

由于区块链上的高gas费用和拥塞的通信,大多数NFT项目选择仅将NFT所有权数据存储在区块链上(只在其智能合约中保留一个存储链接),以确保所有权是不可篡改、可追溯和不可否认的。代表 NFT 实际形式的媒体数据存储在链下。

什么是NFT元数据?

NFT 智能合约中的元数据(Metadata)
参考URL: https://blog.51cto.com/devpoint/5285110

NFT 合约的元数据(Metadata)文件是存储在区块链之外某处的 JSON 文件。
这些文件可能以它们存储的令牌数据命名 tokenId。像 OpenSea,它们的内容如下:

查看opensea的元数据标准

NFT元数据将NFT定义为一个有关数字资产详细信息的对象。一个NFT 的元数据(Metadata)可能包括有描述、图像链接、名称和一些可选属性。

这是Opensea生物的元数据的一个例子:
{
“description”: “Friendly OpenSea Creature that enjoys long swims in the ocean.”,
“external_url”: “https://openseacreatures.io/3”,
“image”: “https://storage.googleapis.com/opensea-prod.appspot.com/puffs/3.png”,
“name”: “Dave Starbelly”,
“attributes”: [ … ],
}
在这里插入图片描述

冻结元数据

冻结元数据
原文链接:http://www.tucaod.com/9558.html

在 Etherscan 中查询 NFT 的元数据

读者可以通过最常用的 Opensea 找到自己希望验证的 NFT 收藏品页面。这里以 Bored Ape Yacht Club 中的一个藏品为例,可以看到左下角详情页中标明了这个 NFT 最关键的三个信息:

  1. 合约地址;
  2. 2.NFT 在合约中的编号,也就是 Token ID;
  3. 所在公链,也就是以太坊;

在这里插入图片描述
点击合约地址(Contract Address)右侧的链接,页面会自动跳转到对应合约地址的 Etherscan 浏览器页面。
在这里插入图片描述
点击页面中的 Contract 标签,便可以浏览这个合约的底层代码。
直接点击上图中的 Read Contract 标签,便可以浏览这个合约中的可查询函数
找到在页面中排行第 20 位的函数 tokenURI,这便是该 NFT 合约查询元数据的专用函数

在这里插入图片描述
点开 tokenURI 函数后,我们可以看到以下界面。在上方的输入框中输入我们想要查询的 NFT 编号,也就是刚刚在 Opensea 看到的 Token ID 编号 6588,然后点击下方的查询按钮 Query。
ipfs://Qmxxxx
这串代码便是在 NFT 的智能合约中保存的元数据。可以看出,这个 NFT 的元数据保存的是一段 ipfs 存储链接,因此可以判断该 NFT 采用的是去中心化的存储方式。

存储方法

[强烈推荐]主流NFT项目的元数据都储存在哪里?
参考URL: https://zhuanlan.zhihu.com/p/462435238
浅析不同NFT数据存储方法的优缺点以及未来展望
参考URL: http://finance.sina.com.cn/blockchain/roll/2022-04-26/doc-imcwiwst4118629.shtml?finpagefr=p_115

  • 中心化存储
    **存储 NFT 数据最糟糕的选择是在中心化的服务器上。**如果一个 NFT 项目的元数据和媒体文件存储在一个服务器上,而创建者停止维护该服务器,那么该数据将永远消失,从而最终使 NFT 成为“空白”。控制服务器的人也可以在任何时候改变 NFT 的描述和内容,而无需得到所有者的许可。这完全违背了 NFT 的目的。

两个最流行的存储 NFT 数据的去中心化方案是 InterPlanetary File System(IPFS)和 Arweave。

  • IPFS
    IPFS 是一个点对点的文件存储网络。一个被称为节点的计算机存储已上传到网络的文件,并使用独特的哈希值来识别这些文件。IPFS 和基于网络的文件存储之间最大的区别是,IPFS 使用了一个基于内容的地址系统。当一个文件请求被提出时,网络会使用文件的哈希值找到一个持有该文件的节点,并将其提供给请求者。

IPFS 的弱点是不能保证文件存储的持久性。这意味着上传到 IPFS 的数据不会永久地留在那里。只要网络中的一个节点正在存储内容并使其可用,那么文件就会存在于 IPFS 上,这也被称为“钉(pinning)

为了在 IPFS 上长期存储文件,许多 NFT 项目和市场要么手动钉住他们的数据,要么使用 pining 服务,以确保总是至少有一个 IPFS 节点持有副本。如果维护 NFT 的 IPFS 数据的项目或平台发生故障并停止钉住文件,那么随着持有副本的节点清除其内存缓存或被关闭,所有存储的信息将随着时间的推移而丢失。

IPFS作为去中心化存储的代表,逐渐被NFT行业所接受。以Bored Ape Yacht Club为例——它的元数据和媒体数据都存储在IPFS中。

  • Arweave
    Arweave 是一个去中心化的文件存储网络,它可以保证文件存储的持久性。用户支付一次性费用来支付 200 年的存储成本。200 年的基准是一个极其保守的估计,因为物理数据存储价格的将在未来不断下降。如果成本下降的速度超过估计,Arweave 文件的存储时间将远远超过 200 年。

Arweave 网络中的计算机被称为矿工,矿工被激励使用 AR 代币来复制和存储其他矿工很少存储的数据副本。这确保了文件不会随着时间的推移而丢失,不需要原始上传者的持续维护。

目前以太坊生态存储情况:
在以太坊上,IPFS 是最受欢迎的 NFT 元数据存储媒介。按交易量排名前 100 的 NFT 合约中,48% 的合约的元数据存储在 IPFS 上。 不幸的是,中心化服务器是以太坊上 NFT 元数据存储的第二大选择。

在 IPFS 上存储元数据的顶级项目中,有 20% 在它们的合约中使用了来自 Pinata 的专用网关链接,而不是默认的 IPFS 链接。Pinata 是最受欢迎的 IPFS pining 和数据管理服务之一。

目前利用去中心化存储方式存储 NFT 元数据的主流项目,如 Bored Ape Yacht Club,这也是目前大多数艺术品类 NFT 所采用的存储方式。

当然去中心化存储也存在一些缺点,那就是数据存储的永久性并不能很好的得到保证。对于没有结合 filecoin 激励层的 ipfs 存储,一旦负责存储的节点全部离线,所存的数据依然有可能丢失。

本文我们就采用去中心化存储方式存储,Pinata IPFS的方式!

Pinata

官网: pinata.cloud

Pinata团队在Web3领域确实是一个先锋,在这些年间与IPFS也在长期协作。

Pinata现有的服务中有一个就是云服务,其网址是pinata.cloud
Pinata云服务提供了一套API接口,虽然这套API接口是中心化的,但它们给用户提供了最便捷的方式将希望存储的内容存储在IPFS系统中。

用户在使用这套系统时和通常使用IPFS系统有所不同,其区别就是用户在系统中不需要使用哈希值来搜索文件,而可以用易懂的单词来搜索文件。

Pinata提供的这套API系统并不是免费使用的,但Pinata没有采用传统区块链项目常用的方式发行代币,而是采用了直接的收费方式让用户使用这套服务。

对这套云存储系统的收费,Pinata给出了自己的一套收费标准,并尽量让它简单好操作—用户需要存储多少数据,以及希望这些数据存储多久就付多少费用。

在这里插入图片描述从这个表中,我们可以看出Pinata也提供了免费的服务—可以免费使用的空间是1GB。对于一般的开发者来说,这足够了。

Pinata是IPFS的一个接口,它使在IPFS上托管文件变得更容易。

我们可以上传图像文件和JSON元数据到Pinata。

pinata如何使用

官方文档:https://docs.pinata.cloud/

如果您想自动上传,使用PINATA而不是自动进行IPF,则可以通过获得Pinata API键来做到这一点。

当使用IPFS等分布式存储系统将资产进行链下存储时,需要使用Pinning(固定)服务。“固定”文件基本上是告诉IPFS不要删除文件并使其保持可用,相当于将该文件永久存储在IPFS分布式存储网络上。

第1步:注册Pinata
注册账号 https://app.pinata.cloud/register
在Pinata上创建一个免费帐户。免费套餐最多可提供1GB的存储空间!

第2步:生成API密钥
我们需要一个与你的帐户关联的API密钥,在Pinata管理后台中,单击右上角的帐户图标,然后从下拉列表中选择API密钥,单击+新密钥,确保选择Admin按钮以访问所有Pinata端点。
在这里插入图片描述
在这里插入图片描述
将Pinata APIKey和 Secret APIKey 存储起来,稍后我们将使用它。

nft.storage

官网:https://nft.storage/

NFT.Storage,一项由协议实验室和Pinata专为NFT数据存储打造的服务。NFT.Storage让开发者能够利用内容寻址和去中心化存储保护NFT资产及相关元数据——确保所有NFT遵循最佳实践方案并能够长期访问。

nft.storage lets developers, creators, and artists store NFT data on decentralized networks easily, securely, and for free (powered by @IPFS and @Filecoin)

nft.storage允许开发人员,创作者和艺术家轻松,安全地将NFT数据存储在分散的网络上,并免费!

Q:NFT.storage上的数据可以存储多长时间?

A: 数据将无限期地在 IPFS 中可用,并存储在与全球存储提供商社区的长期冗余Filecoin存储协议中。

Q:上传到NFT.storage的文件大小有什么限制?

A: NFT.Storage 接受每次上传最大31GiB的存储请求!每次上传都可以包含单个文件或文件目录。

Q: 存储在NFT.Storage的数据处理自己还有谁可以访问?

A: 只要能提供正确CID请求,任何人都能访问上传到 NFT.Storage 的数据。因此,不要使用NFT.Storage以未加密的形式存储任何私人或敏感信息。

Q: 可以删除存储到NFT.Storage的数据吗?

A: 你可以删除与您的帐户关联的数据,这些数据将不再出现在您帐户的“文件”页面上。但这并不能阻止去中心化存储网络中的节点无限期地保留数据副本。因此,不要将 NFT.Storage 用于将来可能需要永久删除的数据。

Q:为何NFT.Storage可以做到免费存储?

A: NFT.Storage参与Filecoin Plus计划,通过该服务上传的所有数据都有资格获得此10倍奖励乘数。因此,存储提供商愿意提供免费的存储和检索服务,以获得这个块奖励的倍数。

NFT具体存储具体实现思路

关于NFT资产的一个重要的点在于其完整性 —— 包括资产本身和所有相关数据。IPFS使用CID来保护NFT数据的完整性,确保自链接创建以来没有篡改。

开发者应遵守以下建议,让IPFS内置的数据验证功能发挥最大效用。

  • NFT智能合约上对一个NFT对应的资源和元数据应该使用IPFS URI。
    元数据是NFT价值构成的有机部分。因此,为保全资产的价值,在IPFS上存储资产时也应存储元数据,并确保两者都可获取。

例子:
ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json

实现该目标的首选思路如下:

  1. 创建两个新目录(一个用于资产,一个用于元数据)
  2. 将资产添加到其目录中
  3. 将资产的目录添加到IPFS中,记录其CID
  4. 在相应目录创建元数据,使用步骤3中的CID创建IPFS URI。该URI应该包含目录的CID和资产文件名
  5. 将元数据的目录添加到IPFS中,记录其CID
  6. 使用步骤5中的CID为元数据创建IPFS URI,将该URI存储在链上,加入所有权记录

该流程既能让开发者将文件名加入链接中(方便用户交互),又确保元数据和资产可被独立应用。
元数据将在以下位置被访问:ipfs://{元数据目录的CID}/元数据文件名
资产可以通过以下地址访问:ipfs://{资产目录的CID}/资产文件名

  • 对于应用
    在面向用户的应用程序中,开发者应通过以下两种方式链接IPFS内容。
  1. IPFS URI
  2. HTTP gateway URL

直到更多的浏览器原生支持IPFS URI。请注意,这两种链接都是容易从原始CID或IPFS URI生成的。

程序实现

pinata SDKs
官方链接: https://docs.pinata.cloud/sdks

pinata 官方SDK 是js的
python sdk 是非官方的,很简单,就是简单调http接口封装。我们看 https://github.com/Vourhey/pinatapy

猜你喜欢

转载自blog.csdn.net/inthat/article/details/126596396
今日推荐