如何将 NFT 元数据从 IPFS 转移到智能合约中
当 Millionaire’s Mining Club 首次推出时,NFT 元数据存储在 IPFS 上。当时这似乎是正确的选择,但后来 IPFS 开始限制其灵活性,从那时开始探索将 NFT 元数据存储在智能合约中。
什么是 NFT Metadata
根据 ERC-721 NFT 标准,NFT 可以具有可选的 tokenURI
功能。tokenURI
有一个 tokenId
的输入,并返回一个字符串 URI
,其中包含描述 NFT 的附加元数据。这个 tokenURI
像 OpenSea
这样的平台如何发现关于 NFT 的图像、属性、统计信息、详细信息等。
来看一个例子:
这是描述 OpenSea 上 Founders Edition NFT(tokenId 为 0)的元数据。
为什么将元数据存储在 IPFS 上?
最初开始将元数据存储在 IPFS 上,这算是行业标准了,是大多数项目存储元数据的方式。这通常适用于大多数具有不可变 NFTS(或不改变的 NFT)的项目。
Pinata 在 IPFS 之上提供了一个 https URI
封装器,为 OpenSea 提供了查询 NFT 元数据的简便方法。
为什么不在 IPFS 上存储元数据?
有了 Millionaire’s Mining Club,IPFS 成了一个限制,每次 NFT 数据发生变化时,都必须将一组新的元数据推送到 IPFS。
查询 IPFS 可能非常慢。
IPFS 还需要一台始终打开并连接到 IPFS 网络的机器来提供文件,通常涉及像 Pinata 这样的固定服务。每次对 IPFS 进行更改时,Pinata 也必须更新。
Nifty Miner NFT 需要更大的灵活性,需要能够立即更新元数据并从智能合约本身触发更新。使用 IPFS,这很快变得复杂起来。
如何在智能合约中存储元数据
智能合约了解有关 NFT 的所有信息,并且可以轻松更新属性。找到一种将元数据也存储在智能合约中的解决方案是有意义的。除了通常习惯的标准 URI,还有数据 URI。
示例数据 URI:data:application/json;base64,eyJoZWxsbyI6IndvcmxkIn0=
此数据 URI 的类型为 application/json
,它也是 base64
编码的。 base64
编码对于 OpenSea
解析 URI
很重要。
此数据 URI 的内容是:
在智能合约中存储元数据的限制
第一个限制是 URI 的大小。 URI 的最佳实践限制为 2,000 个字符。所以最好尽可能地保持在这个限制之下。如果 NFT 元数据超过此限制,则 Data URI 解决方案将不起作用。
现在必须将大量字符串数据存储在智能合约中。这将增加部署智能合约的成本,但更重要的是会使智能合约面临超过智能合约大小 24KB 限制的危险。
元数据的更改可能需要重新部署智能合约。
解决方案
解决方案是部署一个单独的 JsonMetadata
智能合约。这将使主要 NFT 智能合约保持庞大的大小,使保持在 24KB 的限制之下。
然后可以从主 NFT 智能合约调用 JsonMetadata
方法并返回数据 URI。
这是 JsonMetadata
智能合约的一个小片段。
总结
在 IPFS 上存储 NFT 元数据限制了我们的动态 NFT。元数据需要与 NFT 一样动态。数据 URI 提供了一种将 NFT 元数据直接存储在智能合约中的解决方案。
版权声明: 本文为 InfoQ 作者【devpoint】的原创文章。
原文链接:【http://xie.infoq.cn/article/401e4e8f9813cc9b5eeccb60e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论