文章目录
使用 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 最关键的三个信息:
- 合约地址;
- 2.NFT 在合约中的编号,也就是 Token ID;
- 所在公链,也就是以太坊;
点击合约地址(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
实现该目标的首选思路如下:
- 创建两个新目录(一个用于资产,一个用于元数据)
- 将资产添加到其目录中
- 将资产的目录添加到IPFS中,记录其CID
- 在相应目录创建元数据,使用步骤3中的CID创建IPFS URI。该URI应该包含目录的CID和资产文件名
- 将元数据的目录添加到IPFS中,记录其CID
- 使用步骤5中的CID为元数据创建IPFS URI,将该URI存储在链上,加入所有权记录
该流程既能让开发者将文件名加入链接中(方便用户交互),又确保元数据和资产可被独立应用。
元数据将在以下位置被访问:ipfs://{元数据目录的CID}/元数据文件名
资产可以通过以下地址访问:ipfs://{资产目录的CID}/资产文件名
- 对于应用
在面向用户的应用程序中,开发者应通过以下两种方式链接IPFS内容。
- IPFS URI
- 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