翻译:团长(https://twitter.com/quentangle_

在本教程中,我们将构建一个动态 NFT。希望您对 NFT有所了解,知道一些流行项目,BAYC、Cool Cats 等。如果没有,您可能需要先查看关于从头启动 NFT 的文章。

背景

传统图像 ERC721 和 ERC1115 变体这样的 NFT 智能合约可以通过不同的方式存储图像信息:

  1. 合约存储了一个可以通过 tokenURI() 函数访问的 URI。这个 URI 指向像 IPFS 或 Arvweave 这样的去中心化存储位置,像 Opensea 的应用程序可以直接从源头查询数据。
  2. 合约通过 SVG直接生成图像,在链上构建元数据。这比简单地指向一些已经在链下生成元数据复杂一些。来自NounsDAO的Noun协议是这种类型的方法的优秀案例。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d5e445ee-8930-4908-809a-6b888bd125e6/0k1Da6v90arzmJ63Q.png

Figure 0. We Love the Nouns

在本教程中,我们将使用一种混合方法来生成元数据。元数据包含的图像将被存储在IPFS上,然而,JSON的生成将在链上完成。这使得动态创建元数据变得更加容易,同时让我们可以灵活地不费吹灰之力地改变元数据所包含的图像。

在继续之前,有必要注意一下元数据对NFT项目的影响。想象一下,通过操纵图像或甚至改变属性来改变像BAYC这样的蓝筹藏品的元数据,使一些token更加稀有。如果开发人员只需更新NFT的URI就能完全改变外观,那么收藏者就真的把所有的信任放在了团队的交付上。

这就是溯源验证的重要性,这是在NFTs中没有被充分提及的东西。如果NFTs只使用IPFS,开发者应该在他们披露后发布元数据文件夹的不可变的校验和(哈希)。这样一来,用户总是可以在链外验证元数据没有被篡改。如果元数据完全是在链上生成的,那么风险就比较小。

在动态NFT的情况下,元数据和图像可以改变,最终用户应该被告知事情将如何以及何时改变。在元数据位于链外(IPFS)的情况下,每次元数据变化时,可以将新的来源哈希值更新到合同上,这样就有了完整的可证明的审计跟踪。

实时NFTs ⏳

现在我们明白了NFT如何更新,如果我们可以使用真实世界的数据、事件,甚至是真正的随机性来动态更新我们的智能合约中的元数据,会怎么样呢?欢迎来到Chainlink的世界。

Chainlink是一个去中心化的预言机网络,它可以将链外数据输入到智能合约中,本质上赋予它们请求和响应任何链外API的能力。

Figure 1. Chainlink Network

Figure 1. Chainlink Network

本教程假定你已经有了MetaMask,并且熟悉改变网络的能力。我们将使用Rinkeby Testnet来进行所有的工作。

注意:如果你以前从未使用过测试网络,你可能需要启用这一功能。我的账户 > 设置 > 高级 > 显示测试网络。

接下来,我们需要用一些Rinkeby ETH和LINK来资助我们的钱包。每次调用Oracle将花费一些LINK,作为服务费给节点运营商。前往https://faucets.chain.link/rinkeby,在你的账户中填入一些测试ETH和LINK。

Figure 2. Chainlink测试币

Figure 2. Chainlink测试币