LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > [Chainlink] 使用安全帽构建自己的动态NFT

[Chainlink] 使用安全帽构建自己的动态NFT

2021-05-05 wanbizu AI 来源:区块链网络

如今,NFT已成为主流,开发人员,游戏玩家和收藏者都开始探索这些独特的数字资产如何具有新功能并释放更丰富的应用内动态。 在过去的教程中,我们逐步介绍了如何使用Chainlink oracles来构建,部署和销售可验证的唯一且可响应实际输入的NFT。 这些动态NFT被证明是远远超出静态数字收藏品的下一代NFT。 想象一下NFT每次转移都会改变的情况:一个艺术家可以制作一件艺术品,每次有人购买新艺术品时,Chainlink VRF都会产生一个随机变化,从而使该作品对于该买家而言可证明是独特的。

这正是我们在本文中将要执行的操作:创建,部署和列出动态NFT(dNFT),该动态NFT在每次传输时都会以可验证的随机方式更改。 具体来说,我们将创建一个Schrodinger猫的衍生产品,在睡眠和攻击之间进行切换。

克隆动态NFT存储库

第一步是继续克隆动态NFT存储库。

git clone https://github.com/ZakAyesh/DynamicNFT.git cd DynamicNFT

完成此操作后,继续并在您选择的代码编辑器中打开项目。 现在,您需要按照项目自述文件中的说明来设置所需的环境变量(您需要从Infura获得免费帐户)。 在本教程中,我们将在以太坊上使用Rinkeby测试网。

导出RINKEBY_RPC_URL =’www.infura.io / asdfadsfafdadf’导出PRIVATE_KEY =’abcdef’

如果您不熟悉环境变量,也可以将环境变量添加到.env文件中。

RINKEBY_RPC_URL =’www.infura.io / asdfadsfafdadf PRIVATE_KEY =’abcdef’了解智能合约逻辑

转到合同文件夹并打开名为dNFT.sol的文件。 到达那里后,您会注意到几件事。 首先,我们继承自OpenZeppelin的ERC721合同和Chainlink的VRFConsumerBase。 然后,我们有了VRF的存储变量,该变量将在构造函数中初始化。

//状态变量,用于存储VRF字节所需的信息32内部keyHash; uint32内部费用;

接下来,我们开始定义dNFT所需的所有状态变量。 对于您自己的dNFT,这些可能会有所不同,但是您可以将其用作参考。

uint256 public tokenCounter; 枚举EigenValue {HESLEEP,HEATTAC,SUPERPOSITION}字符串[] IpfsUri = [ …. ]; mapping(uint256 => EigenValue)public tokenIdToEigenValue; mapping(bytes32 => uint256)公共requestIdToTokenId

令牌计数器跟踪我们创建的每个dNFT。 “ EigenValue”是我们要跟踪链上dNFT的属性,IpfsUri是一个数组,其中包含每个NFT的所有URI的所有URI,而“ tokenIdToEigenValue”则跟踪每个NFT的“ EigenValue”。 由于Chainlink VRF是异步的,因此我们使用`requestIdToTokenId`将所有Chainlink VRF请求映射到我们正在传输的令牌。 EigenValue可以更改为您想要跟踪链上的任何类型的属性:颜色,大小,名称等(请注意,对于本教程,链上属性实际上并不影响NFT,但是拥有它很酷描述链上存储的NFT的更多不可变信息)。

接下来是“ createCollectible”函数,该函数创建我们的dNFT并将其初始化为初始属性(在这种情况下为初始EigenValue)。 与该属性对应的URI。 该函数要做的最后一件事是将令牌计数器增加1。

函数createCollectible()public {uint256 newItemId = tokenCounter; 字符串内存initialUri = IpfsUri[2]; EigenValue initialEigenVal = EigenValue(2); _safeMint(msg.sender,newItemId); _setTokenURI(newItemId,initialUri); tokenIdToEigenValue[newItemId] = initialEigenVal; tokenCounter = tokenCounter + 1

接下来,有一个transferFrom函数,它在被调用时实际上会调用VRF。 为此,我们重写了OpenZepplin ERC-721 transferFrom函数,以添加新逻辑。 然后,该函数使用块号作为我们提供的种子来调用VRF,并在映射中记录我们的请求。 因为在发出请求时块数据是未知的,所以Chainlink VRF确保通知NFT和游戏内结果的随机性是防篡改且不可预测的。

函数transferFrom(地址从,地址到,uint256 tokenId)公共重写(ERC721){bytes32 requestId = requestRandomness(keyHash,fee,uint32(block.number)); requestIdToTokenId[requestId] = tokenId; _transfer(从,到,tokenId); }

最后,我们有一个“ fulfillRandomness”方法,该方法在传输完成后由Chainlink VRF调用。 我们将随机数moduleo取为2,以得到0或1。我们将使用它来切换到第一个或第二个属性(此猫不会恢复为叠加)并切换到相应的URI。

函数complementRandomness(bytes32 requestId,uint256 randomNumber)内部重写{uint256 _tokenId = requestIdToTokenId[requestId]; uint256 random2 =(randomNumber%2); EigenValue newEigenVal = EigenValue(random2); 字符串内存newUri = IpfsUri[random2]; tokenIdToEigenValue[_tokenId] = newEigenVal; _setTokenURI(_tokenId,newUri);}

就像这样,我们有一个合同,可以让我们创建动态NFT,这些NFT在每次传输时都会更改。

签出元数据

在本教程中,我们将使用存储在IPFS上的链外元数据(因为OpenSea当前仅读取链外)。 如果您想查看元数据,请查看“什么是元数据?” 以及我们最新的动态NFT教程的“下载IPFS”部分。 存储库中的“元数据”文件夹中已经有一些预先构建的元数据文件,这些文件指向已托管在IPFS上的文件。 如果您要制作自己的图像,请随时托管自己的图像并更改元数据以指向它们。 只需记住更改智能合约中列出的URI。

将合同部署到Rinkeby

现在我们将使用安全帽将合同部署到Rinkeby测试网,因为这是OpenSea当前认可的唯一以太坊测试网。 所有部署脚本都在存储库内的deploy文件夹中。 发出deploy命令时,安全帽会自动检查该位置。 我们需要安装依赖项,然后进行部署

毛线安装npx安全帽部署

一旦运行,您应该会看到刚刚部署的合同的地址以及可以运行的几个安全帽命令。 例如:

用0.6.7编译成功编译18个文件—————————————- ————部署dNFT部署到以下位置的dNFT:0x472fd0039FDD02BcA13a34DaBa788ed1e82bb9A6运行以下命令以使用LINK为合同提供资金:npx hardhat fund-link –contract 0x472fd0039FDD02BcA13a34DaBa788ed1e82bbNAFT硬然后使用以下命令创建: -collectible –contract 0x472fd0039FDD02BcA13a34DaBa788ed1e82bb9A6创建动态NFT

安全帽最有价值的部分之一就是它的可定制“任务”。 这些可以在“任务”文件夹中找到,并全部导入到“ hardhat.config.js”文件中,从中读取它们。 安全帽任务始终以关键字“ task”开头,并作为参数输入任务名称和描述。 我们将使用的第一个任务是create-collectible任务,该任务在已部署的智能合约上调用create-collectible函数。 要使用create-collectible任务,请在终端中运行以下命令(添加合同的地址):

npx安全帽创建收藏–合同INSERT_YOUR_CONTRACT_ADDRESS_HERE

恭喜,您现在有了第一个dNFT! 如果按原样使用提供的代码,则总是从盒子里的猫开始,困在睡觉和攻击的叠加中。

使用LINK资助您的合同

需要LINK来为Chainlink VRF支付其服务费用。 每当我们将足够的LINK费用转移到VRF合同地址时,都会调用VRF。 因此,在我们出售NFT(这只是具有上市平台所处理条件的转让)之前,我们需要为通过LINK创建的合同提供资金,否则转让将会失败。 要使用Rinkeby testnet LINK资助合同,请在终端中运行以下命令:

npx安全帽资金链接–contract INSERT_YOUR_CONTRACT_ADDRESS_HERE测试出售您的动态NFT

要测试列出要出售的NFT(位于Rinkeby测试网上,因此不会与真实的ETH一起购买),请访问https://testnets.opensea.io/account并使用您以前创建的MetaMask帐户登录dNFT。 单击右上角的帐户,然后转到“我的个人资料”。 您应该会看到盒子的NFT! 请注意,OpenSea可能需要一个小时以上的时间来上传数据。

盒子里有什么东西? 您必须将其转移才能找到答案。

如果您没有立即看到该框,请不要担心。 您可能需要等待一段时间才能让OpenSea从IPFS加载所有元数据和图像。 NFT完全显示后,单击它,然后您可以单击屏幕右上方的蓝色“出售”按钮以在任意条件下列出NFT。

您可能想对任何购买您的NFT的人保留免责声明,以使他们在收到NFT后可能会更改(包装盒的元数据中已经包含免责声明)! 一旦有人购买了NFT,它将转移给他们,Chainlink VRF将被调用,特征值+ URI将切换为“攻击猫”或“睡觉猫”。 转移NFT后,买方可能需要在OpenSea上单击“更新元数据”,以便知道寻找新的元数据。 更新元数据可能需要一些时间(一个小时以上),因为我们需要等待Chainlink VRF的交易包含在区块链中,并等待OpenSea刷新前端以反映新的元数据。 传输完成并且元数据已更新后,您应该会看到“攻击猫”或“睡觉猫”! 这是“攻击猫”的先睹为快。 尝试出售/转让dNFT,您可能会看到“睡猫”!

这是攻击猫! 这是传输dNFT后可能会看到的两张图像之一。 下一步

在本文中,我们学习了如何创建真正的动态NFT,如何使用Hardhat进行部署以及如何将它们在OpenSea的对等市场中列出。 这只是在摸索dNFT所能提供的一切。 一个很酷的项目是制造NFT,这些NFT在铸造时具有可验证的随机特征,并且在转移时也可以动态改变! 关键是,对于新兴的NFT生态系统,仍有许多工作要做,而Chainlink VRF是进入这一新领域的强大工具。

如果您在这里学到了新东西,想炫耀自己构建的内容,或者为一些演示仓库开发前端,请确保在Twitter,Discord或Reddit上共享它,并使用#chainlink对您的仓库进行标签标记。 也请停下我们的Discord,并分享您创建的任何其他炫酷NFT。

与往常一样,一定要访问开发人员文档,以探索Chainlink广泛的oracle函数。 您还可以订阅Chainlink时事通讯,以了解Chainlink堆栈中的所有最新信息。

有关此主题的更多信息

构建,部署和销售自己的动态NFT 如何在NFT中获得随机数(ERC721) 如何在安全帽中使用Chainlink

>>在链节上查看

加入我们的电报

在推特上关注我们

在Facebook上关注我们

帖子 [Chainlink] 使用安全帽构建自己的动态NFT首次出现在AZCoin新闻上。

—-

原文链接:https://azcoinnews.com/chainlink-build-your-own-dynamic-nft-with-hardhat.html

原文作者:Chainlink News

编译者/作者:wanbizu AI

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...