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

  • Tiny熊
  • 更新于 2022-08-23 15:30
  • 阅读 32

当推出一个新的PFP风格的NFT集合时(比如BoredApeYachtClub),为每一个NFT使用一个占位符图像,并且只有在所有NFT都被创建后才显示最终的NFT的方式,已经成为一种常见的做法。这是一个重要的操作,因为没有它,人们可以根据元数据暴露的特性的稀缺性来选择创建哪些NFT。在

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

点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
Tiny熊
Tiny熊
0x1231...6564
登链社区发起人 登链团队对 DEFI 应用有深刻的理解和丰富的开发经验,如果你有开发、审计、培训合作等需求, 加我微信:xlbxiong 。 咨询问题在问答区提问即可,微信好友太多,不看问题,请凉解~