c语言sscanf函数的用法是什么
387
2022-11-02
NFT 智能合约中的元数据(Metadata)
如何在智能合约中添加和存储元数据(Metadata)?
那么如何存储它,甚至将它存储在哪里?以及如何在 NFT 中实现元数据存储(Metadata)?
什么是元数据(Metadata)文件?
NFT 合约的元数据(Metadata)文件是存储在区块链之外某处的 JSON 文件。通过一些技巧,可以在链上执行此操作,也可以在 IPFS 上执行此操作,或者在自己构建的服务器上执行,可以考虑使用 CDN。
这些文件可能以它们存储的令牌数据命名 tokenId。像 OpenSea,它们的内容如下:
{ "description": "Friendly OpenSea Creature that enjoys long swims in the ocean.", "image": " "name": "Dave Starbelly", "attributes": [ { "trait_type": "Base", "value": "Starfish" }, { "trait_type": "Eyes", "value": "Big" } ], }
如下述代码所示有描述、图像链接、名称和一些可选属性。这是一种相当简单的 JSON 格式,可以在此处了解有关元数据标准的更多信息。接下来看看如何将这些数据从 IPFS 或 CDN 应用到智能合约中。
ERC721 TokenURI 和 BaseURI
ERC721 是需要在智能合约中实施才能被称为 NFT 的标准。它实现了 IERC721,即 ERC721 标准的接口。它的功能不多,但即便如此,大多数收藏品都从OpenZeppelin导入智能合约,避免重复造轮子。
OpenZeppelin 的 ERC721 合约有一些不错的额外功能和一些可选扩展。但基础 ERC721 智能合约有两个值得注意的功能,即存储元数据、tokenURI 以及 _baseURI 。
_baseURI 整个 tokenURI 的基础。例如,如果有 10k 个令牌的集合,可能已将元数据保存在 CDN 或 IPFS 上的文件夹中。这意味着每个令牌的整个 URI 都是完全相同的,除了最后一部分,通常是 tokenId 。
因此,如果 _baseURI 是 ipfs://your_folder_hash/,并且特定令牌的 tokenId 是 1234,那么完整的 tokenURI 将是 ipfs://your_folder_hash/1234。
但是,需要自己实际实现 _baseURI 函数。如果它什么都不返回,则 tokenURI 函数将返回一个空字符串。
string private _baseUri; function setBaseURI(string calldata baseUri) external onlyOwner() { _baseUri = baseUri; } function _baseURI() internal view override returns (string memory) { return _baseUri; }
在智能合约中,添加一个包含 _baseURI 的字符串类型变量(公共或私有)。可以通过从任何地方调用 setBaseURI() 来设置这个变量。当有人调用 tokenURI() 时,智能合约会检索它,因为这会自动将 tokenId 附加到 OpenZeppelin 的 ERC721 智能合约中的 baseURI。
ERC721URIStorage
它的一个扩展是 ERC721URIStorage,它允许为每个令牌设置不同的 tokenURI。如果为可能在 IPFS 或 CDN 中不共享同一文件夹的 1/1 艺术品创建智能合约,这可能会很有用,增加了以下功能。
tokenURI(tokenId) _setTokenURI(tokenId, _tokenURI)
铸造时,调用 _setTokenURI() 为该新令牌设置 tokenURI,它还为这个新功能覆盖了 tokenURI 函数。
总结
元数据(Metadata)是 NFT 的重要组成部分。它存储图像和其他基本数据,文章介绍了如何使用 OpenZeppelins ERC721 合约和 ERC721URIStorage 的小扩展来实现它。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~