本项目将会介绍一个动态 NFT 的开发过程,动态 NFT 本身是一个非常有趣的过程,另外在开发过程中,还可以帮助开发者加深对于智能合约的理解,提升软件开发技能,是一个很好的练习项目。
NBA 球星 LaMelo Ball 在获得年度最佳新人王以后,他的 NFT 也发生了变化
在项目中,我们将会开发一个动态 NFT,这个动态 NFT 不仅会自己更新用户看到的图片,而且图片还是随机选择的。这个 NFT 会根据某个资产的价格(资产价格将会通过 Chainlink 喂价来提供)随机更新图片。例如,如果价格上涨了,那么 NFT 的图片就会就会变成下面三只牛的其中一只。
动态 NFT 可以选择的三只牛的图片
如果资产的价格下降,则下面其中一个熊的就会出现在 NFT 上。
动态 NFT 可以选择的三只熊的图片
不管是熊还是牛的图片,最终被选择的那张图片都是随机的。
因为区块链的共识算法,使得它是一个确定性系统,所以在区块链中实现随机数是很困难的。有一个解决方案是 Chainlink VRF,它是一个可验证的随机数生成器(RNG)。通过使用 Chainlink VRF,智能合约可以在不牺牲安全性和可用性的情况下获得一个随机数。
动态 NFT 会自动响应市场价格的变化,开发者不需要去检查价格或者触发 NFT 的智能合约。这个特性会通过 Chainlink Keepers 去实现,Keepers 可以自动化一个智能合约。一旦你的 NFT 智能合约部署以后,你只需要让你的 VRF 和 Keepers 的订阅余额充足就可以了。智能合约的执行和动态 NFT 的选择都可以通过一个去中心化的方式完成,这两个过程都是可验证,并且可以通过密码学来保证其安全性。
项目前置知识
这个项目需要你有一些编程知识,最好是 Javascript 或者 Python。我们会使用 Solidity 来写智能合约,你可以在 Road To Web3 中查看项目的文档,这个文档是由 Alchemy 创建的,就是为了这个动态 NFT 项目。你还可以可以在这里找到更多的学习资料。
通过在线 IDE Remix 代码编辑器就可以完成整个项目。项目的 GitHub Repo 在这里-- 每一个分支都代表着项目的一个阶段。
项目阶段
开发这个项目的几个阶段如下:
开发一个 ERC-721 通证,会使用到 OpenZeppelin Wizard 生成可使用的代码库。代码和实现步骤在 GitHub repo 的主分支中。
在项目中实现 Chainlink Keepers,同时连接 Chainlink Price Feed 来追踪一个特殊资产的价格。代码和步骤在 GitHub repo 的 price-feeds 这个分支中。
加入可验证的随机数,让动态 NFT 可以随机选择可用图片。这部分是一个额外的任务,这部分代码和步骤在 GitHub repo 的 randomness 分支中。
你会学到什么
通过这个项目你会学习到:
- 怎么设计智能合约的架构,并且编写它的代码
- ERC-721 非同质化通证的基础以及它们的功能性
- 怎么样使用 Remix,Open Zeppelin 代码库,以及 Chainlink 的3个主要服务
- 智能合约彼此如何进行交互
了解更多!
对区块链技术感兴趣的小伙伴们可以关注 Chainlink 预言机,私信加入开发者社区!有大量关于智能合约的学习资料以及关于区块链的话题!