为自己的NFT创建pre-reveal机制

一种实现NFT pre-reveal机制的简单、安全且有效的方法。

1.jpg

当推出一个新的PFP风格的NFT集合时(比如Bored Ape Yacht Club),为每一个NFT使用一个占位符图像,并且只有在所有NFT都被创建后才显示最终的NFT的方式,已经成为一种常见的做法。

这是一个重要的操作,因为没有它,人们可以根据元数据暴露的特性的稀缺性来选择创建哪些NFT。

在开始构建此功能之前,让我们先看一下业务需求:

  • 隐藏代币和元数据,直到所有代币都被铸造。

  • 一旦用户铸造了代币,就向他们发送一个“pre-reveal”版本的代币。

  • 允许合约所有者“显示”集合中的所有代币。

我们的智能合约负责返回每个代币metadata.json文件所在的 URL。

解决上述问题的方法是创建一个“pre-reveal”元数据文件,并将其上传到某处。这个“pre-reveal URI”是在显示发生之前,我们希望为每个代币返回的URI。

在此之后,我们能够使用一个新URL来更新智能合约,该URL可用于生成正确的代币URI。

例如,如果我们已经将所有的代币上传到一个响应的web服务器上,那么我们希望用自己的baseURI 来更新智能合约,这样它可以通过简单地将代币ID附加到baseURI来轻松地生成正确的代币URI。

有了这些知识,现可以将问题重新定义为智能合约的更具体的要求:

  • 当集合尚未显示时,它应该返回通用元数据。

  • 它应该允许合约所有者更新baseURI。

  • 当显示代币时,它应该返回正确的元数据。

如何实现它?

假设我们正在为 NFT 集合开发一个智能合约,该集合扩展了通常的 OpenZeppelinERC721来实现。

如果检查ERC721.sol合约,就会发现tokenURI实现了一个功能。

这就是:

2.jpg

OpenZeppelin 对 tokenURI 的实现

它们的实现(上面)将自动把baseURI与正在检索的代币ID连接起来。

这对于AFTER reveal非常有用,但是对于pre-reveal,我们需要重写这个函数来返回pre-reveal URI:

3.jpg

tokenURI 函数

可以注意到在这里引用了两个全局变量:isRevealed和preRevealURI。可以随心所欲地实现它们,但最简单的方法是,在合约的顶部定义它们:

4.jpg

接下来,我们需要创建一个函数来“显示”代币。

5.jpg

上面的reveal函数将传递的baseURI保存到一个名为postRevealBaseURI的全局变量中,并将isreveal布尔值设置为true。

将_isreveal布尔值设置为true,然后我们之前编写的tokenURI函数将推迟到父类的实现。

这个实现调用_baseURI函数来检索基本URI。

如果检查该实现,我们可以看到它实际上可以被覆盖:

6.jpg

让我们使用OpenZeppelin并重写_baseURI函数来返回正确的基本URI。

7.jpg

结论

我们已经了解了一种实现NFT pre-reveal机制的简单、安全且有效的方法。

Source:https://medium.com/better-programming/create-a-pre-reveal-mechanism-for-your-nft-collection-b2ff372a2b36

关于

ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。

本文首发于:https://mp.weixin.qq.com/s/_VWAN2NB7QRiILd4-B4vhA

点赞 2
收藏 2
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ChinaDeFi 去中心化金融社区
ChinaDeFi 去中心化金融社区
ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。