当前位置: 首页 > 科技观察

使用Python制作NFT区块链(第二部分)

时间:2023-03-16 17:07:58 科技观察

在本文中,我们将学习如何使用Brownie、Python和Chainlink制作非同质NFT作品,并在OpenSeaNFT市场上展示和销售我们的成果。在学习本文之前,请阅读MakingNFTBlockchainWorkswithPython(Part1)。动态和高级NFT动态NFT是可以随时间变化的NFT,或者具有我们可以用来相互交互的链上功能。这些NFT是无限可定制的,使我们能够制作整个游戏、元宇宙或某种互动艺术。让我们进入高级部分。AdvancedQuickStart确保你的元掩码中有足够的测试网ETH和LINK,然后运行以下命令:犬种。ChainlinkVRF是一种获得可证明的随机数的方法,因此我们的NFT非常稀缺。然后我们要创建它的元数据。brownierunscripts/advanced_collectible/create_metadata.py--networkrinkeby然后我们可以选择将这些数据上传到IPFS,这样我们就可以获得一个tokenURI。稍后我将向您展示如何执行此操作。现在,我们只使用以下示例tokenURI:https://ipfs.io/ipfs/Qmd9MCGtdVz2miNumBHDbvj8bigSgTwnr4SbyH6DNnpWdt?filename=1-PUG.json如果您将IPFSCompanion下载到浏览器,则可以使用该URL查看URI返回的内容。它看起来像这样::[{"trait_type":"cuteness","value":100}]}然后我们可以运行我们的set_tokenuri.py脚本:brownierunscripts/advanced_collectible/set_tokenuri.py--networkrinkeby我们将得到这个输出:Running'scripts/advanced_collectible/set_tokenuri.py::main'...WorkingonrinkebyTransactionsent:0x8a83a446c306d6255952880c0ca35fa420248a84ba7484c3798d8bbad421f88eGasprice:1.0gweiGaslimit:44601Nonce:354AdvancedCollectible.setTokenURIconfirmed-Block:8331653Gasused:40547(90.91%)Awesome!YoucanviewyourNFTathttps://testnets.opensea.io/assets/0x679c5f9adC630663a6e63Fa27153B215fe021b34/0请最多等待20分钟,然后点击“刷新元数据”按钮,我们可以点击给定的链接,看看它在Opensea上的样子!您可能需要单击“刷新元数据”按钮并等待几分钟。随机物种当然让我们看看我们刚刚做了什么。这是我们的AdvancedCollectible.sol:pragmasolidity0.6.6;import"@openzeppelin/contracts/token/ERC721/ERC721.sol";import"@chainlink/contracts/src/v0.6/VRFConsumerBase.sol";contractAdvancedCollectibleisERC721,VRFConsumerBase{uint256publictOkencounter;enumbreed{pug,shiba_inu,brenard}//addotherthingsMapping(bytes32=>address)publicRequestIdTosender;mapping(bytes32=>string)bytes32indexedrequestId);bytes32internalkeyHash;uint256internalfee;uint256publicrandomResult;构造函数(address_VRFCoordinator,address_LinkToken,bytes32_keyhash)publicVRFConsumerBase(_VRFCoordinator,_LinkToken)ERC721("Dogie","DOG"){tokenCounter=0;keyHash=_keyhash1*10**1.fee=0.;}functioncreateCollectible(stringmemorytokenURI,uint256userProvidedSeed)publicreturns(bytes32){bytes32requestId=request随机性(keyHash,费用,userProvidedSeed);requestIdToSender[requestId]=msg.sender;requestIdToTokenURI[requestId]=tokenURI;emitrequestedCollectible(requestId);}functionfulfillRandomness(bytes32requestId,uint256randomNumber)internaloverride{addressdogOwner=requestIdToKentoSender[TokenIquestURI[requestId]}functionsetTokenURI(uint256tokenId,stringmemory_tokenURI)public{require(_isApprovedOrOwner(_msgSender(),tokenId),"ERC721:transfercallerisnotownernorapproved");_setTokenURI(tokenId,_tokenURI);}}我们使用ChainlinkENARVRF从PUG、UINAR、BABR,SHIRandomVariety这次调用createCollectible时,我们实际上是向链下的ChainlinkVRF节点发出请求,并返回一个随机数来创建具有这3个品种之一的NFT。在你的NFT中使用真正的随机性是创造真正稀缺性的好方法,使用Chainlinkoraclenonces意味着你的数字可以证明是随机的并且不受矿工的影响。您可以在文档中了解有关ChainlinkVRF的更多信息。https://docs.chain.link/docs/chainlink-vrf/Chainlink节点通过调用fulfillRandomness函数响应并根据随机数创建集合。然后我们仍然需要调用_setTokenURI来为我们的NFT提供它需要的外观。我们没有在这里给出我们的NFT属性,但属性是让我们的NFT交互的好方法。您可以在龙与地下城示例中看到具有属性的NFT的一个很好的示例。https://github.com/PatrickAlphaC/dungeons-and-dragons-nft来自IPFS的元数据我们使用IPFS来存储两个文件:NFT图像(pug图像)tokenURI文件(JSON文件,其中还包含图像的链接)我们使用IPFS因为它是一个免费的去中心化平台。我们可以通过下载IPFSDesktop并点击导入按钮将我们的tokenURI和图像添加到IPFS。然后,我们可以通过单击要共享的文件旁边的3个点、单击共享链接并复制给定链接来共享URI。然后我们可以将此链接添加到我们的set_tokenuri.py文件以更改我们要使用的tokenURI。持久化但是如果tokenURI只存在于我们的节点上,那就意味着当我们的节点宕机的时候,其他人是看不到的。所以我们希望其他人来固定我们的NFT。我们可以使用像Pinata这样的pin服务来帮助保持我们的数据即使在我们的IPFS节点关闭时也能保持活力。我认为未来会有越来越多的元数据存储在IPFS和去中心化存储平台上。集中式服务器可能会宕机,这意味着这些NFT上的艺术将永远丢失。请务必检查您使用的NFT的tokenURI位于何??处!我也希望更多的人会使用像Filecoin这样的dStorage平台,因为使用pin服务也没有像它应该的那样去中心化。现在,您已经掌握了制作精美有趣、可定制的交互式NFT并将其投放市场的技能。NFT是一种有趣、强大的方式来补偿艺术家的辛勤工作。