原文地址
NFT是只有在区块链畛域里才存在的工具,有着宽泛的利用和时机。ERC721代币规范能够构建收藏品、独立代币、票据、游戏等多种利用,对于那些想要参加构建的开发者来说,一个动静和随机的NFT是一个很好的开始。但咱们当初能够用它做什么?展现你新铸造的随机化或动静角色,是不是很赞?
咱们也是这样认为的。在本教程中,咱们将疏导您实现所有步骤,将您本人的动静或随机化NFT部署到OpenSea市场。上面是一个例子,是咱们心愿达到的成果。
来自OpenSea的截图
让咱们来学习如何制作相似下面的货色吧!
NFT疾速温习
ERC721(也被称为NFTs)定义了一个框架,用于制作代币的框架,这些代币是举世无双的,并且彼此之间是不同的(因而被称为非同质化),而风行的ERC20规范则定义了 "同质化"的代币,这意味着代币都是可调换的,并且每个代币具备雷同的价值。咱们将更深刻地探讨如何构建这些,以及社区如何跨平台代表它们。你也能够在OpenSea NFT圣经中浏览更多内容。
如果你还没有查看上一篇对于在NFT中获取随机数的文章,请务必去回顾一下!开发者页面中有着各种智能合约和区块链工程教学的教程、指南和攻略。
什么是元数据?
在上一篇博客中,咱们学习了如何构建随机NFT。当初,咱们将应用ERC721规范的另一个重要局部:元数据,将其晋升到一个新的程度。
所有的NFT都有所谓的元数据。你能够在原始的ERC/EIP 721提案中读到这一点。社区发现,在Ethereum上存储图像真的很费劲,而且老本很高。如果你想存储一张8×8的图片,存储这么多数据是的费用还能够承受,但如果你想要一张分辨率不错的图片,就须要破费巨额的费用。
数据存储的老本是(大概)每Kb数据64万gas。如果目前的gas约为50Gwei或0.000000050ETH,而1ETH相当于目前的600美元,你将破费20美元。
1KB图像
破费20美元,将这样一个图形增加到区块链中,并没有让NFT的创造者们真正兴奋起来。
咱们意识到Ethereum 2.0将解决很多这些令人头疼的扩大问题(同时也恭喜ETH2.0胜利启动),但目前社区须要一个规范来帮忙解决这个问题。元数据就是这个问题的答案。
元数据为链外存储的tokenId提供描述性信息。这些都是简略的API,链外UI调用这些API来收集无关token的所有信息。每个tokenId都有一个特定的tokenURI,定义了这个API调用,它返回一个JSON对象,看起来像这样:
{ "name": "You NFT token name", "description": "Something Cool here", "image": "https://ipfs.io/ipfs/QmTgqnhFBMkfT9s8PHKcdXBn1f5bG3Q5hmBaR4U6hoTvb1?filename=Chainlink_Elf.png", "attributes": [. . .]}
元数据有四个不同的key:
name
,定义了tokenIds的可读名称description
,其中提供了一些对于token的背景信息image
是图像的另一个URIattributes
是token的统计数据
如果您的NFT与其余NFT进行交互,确保tokenURI上的属性(attributes)与您的NFT智能合约的属性(attributes)相匹配,这一点十分重要,否则当战斗或互动没有达到预期时,您可能会感到困惑!
为tokenURI
调配出tokenIds之后,NFT市场就可能显示你的token,让你展现你的创造力。你能够在Rinkeby testnet的OpenSea市场上看到咱们应用更新后的《龙与地下城》随机NFT代码仓库创立的一个NFT。这种市场有很多,比方Mintable、Rarible和OpenSea。
链上和链下元数据
你能够始终将所有的元数据存储在链上(事实上,这是与代币进行交互的惟一形式),但很多NFT市场不晓得如何读取链上元数据_当初。_所以目前来说,应用链下元数据来可视化你的代币,同时领有所有的链上元数据是最现实的,这样你的代币就能够相互交互。
名称、形容和属性很容易在链上存储,但图像才是难点。另外,咱们在哪里存储tokenURI的API?很多人抉择运行服务器来托管信息,这很好,但这是一个中心化的用于可视化token的中央。如果咱们能把图片存储在链上,这样就不会宕机或被黑客攻击,是一个更好的抉择。在下面的例子中,他们的图片应用的是指向IPFS的URL,这是一种罕用地存储图片的形式。
IPFS是InterPlanetary File System(星际文件系统)的缩写,是一种点对点的超媒体协定,旨在使网络更快、更平安、更凋谢。它容许任何人上传一个文件,并且该文件是通过哈希校验的,所以如果文件产生扭转,它的哈希值也会扭转。这对于存储图片来说是十分现实的,因为这意味着每次图片更新时,链上的哈希/tokenURI也要扭转,同时这意味着咱们能够领有元数据的历史记录。将图像增加到IPFS上也非常简单,而且不须要运行服务器。
当初咱们晓得了要做什么,上面让咱们来构建和部署吧!你部署了你的NFT代币和市场之后,一个代币将看起来像这样:
OpenSea上的Chainlink骑士
levels
局部是代币的随机统计数据的中央!
给您一个额定的惊喜
当初,读到这里的敌人们,咱们为你们筹备了一个额定的惊喜。咱们将在一秒钟内介绍如何部署这些NFT,但在这之前,咱们在这个游戏中创立的这四个代币,将在第一个NFT寻宝流动中进行抢夺!
这里是他们主网市场的链接。祝大家好运。
如何部署你的动静NFT市场
再次强调一下,咱们应用最新版本的Dungeons & Dragons 代码仓库,在readme中也有阐明。
上面咱们要做:
- 应用Chainlink VRF构建一个可验证的随机D&D角色
- 应用IPFS增加一个tokenURI
- 将随机NFT增加到OpenSea市场中
请记住,你能够扭转仓库,使其实用于动静NFTs。你能够很容易地把VRF换成Chainlink Price Feeds或Chainlink API。
这个仓库目前只实用于Rinkeby,所以请务必切换到到Rinkeby网络!咱们会从头开始解说,如果你没有读过上一篇文章也不必放心。
你须要在你的钱包里有Rinkeby Testnet ETH和Rinkeby Testnet LINK能力持续。
配置环境变量
配置MNEMONIC
和一个rinkeby RINKEBY_RPC_URL
环境变量。你的MNEMONIC
是你的钱包的种子短语。你能够从节点提供者服务中找到一个RINKEBY_RPC_URL
,比方Infura。
而后,将它们设置在bash_profile
文件中,或者像这样将它们导出到你的终端:
export MNEMONIC='cat dog frog....'export RINKEBY_RPC_URL='www.infura.io/asdfadsfafdadf'
接下来你须要这样做:
克隆仓库并部署
git clone https://github.com/PatrickAlphaC/dungeons-and-dragons-nftcd dungeons-and-dragons-nftgit checkout opensea-updatenpm installtruffle migrate --reset --network rinkeby
下面的命令部署你的D&D NFT!
创立角色
能够通过以下命令来尝试:
truffle exec scripts/fund-contract.js --network rinkebytruffle exec scripts/generate-character.js --network rinkebytruffle exec scripts/get-character.js --network rinkeby
下面的命令能够通过随机数据创立一个新的角色!
依据你部署的频率,你能够通过扭转get-character.js
中的dnd.getCharacterOverView(1)
命令来抉择哪个角色,将0
换成你喜爱的任何角色的tokenId。
以上命令提供了NFT的概览。因为调用返回的是大数字(big numbers),所以会看到BN
,你能够把它们转为整型来查看它们是什么。或者你能够更进一步...
在Etherscan查看
你能够收费取得一个Etherscan API密钥,并与链上的NFT进行交互。而后将ETHERSCAN_API_KEY
设置为环境变量。
npm install truffle-plugin-verifytruffle run verify DungeonsAndDragonsCharacter --network rinkeby --license MIT
这样就能够验证并公布你的合约,能够去它给你的Etherscan的Read Contract
局部查看。
或者能够应用oneclickdapp,只需增加合约地址和ABI。能够在build/contracts
文件夹中找到ABI。留神,ABI不是整个文件,只是写着ABI
的局部。
部署到OpenSea
创立好NFT后,咱们须要给它们一个tokenURI
。TokenURI是向世界展现NFTs数据的规范。能够让咱们更容易存储图片等内容,不用节约气力在链上存储它们。
TokenURI
代表一个URL或其余惟一的标识符,它是一个带有一些参数的.json
文件。
{ "name": "Name for it ", "description": "Anything you want", "image": "https://ipfs.io/ipfs/HASH_HERE?file.png", "attributes": [...]}
下载IPFS和IPFS伴侣(IPFS Companion)
当初,咱们将把这些图像和元数据存储在IPFS中。你须要
- IPFS
- IPFS companion
- Pinata
IPFS伴侣让咱们能够在Brave或Chrome等浏览器中原生查看IPFS数据。而Pinata能够让咱们在节点宕机时也能放弃IPFS文件的失常运行(临时不必放心这个问题)。如果你在浏览器中点击这个链接,你就会晓得IPFS伴侣在工作:https://ipfs.io/ipfs/QmTgqnhF...。
就会呈现上面的图像:
Chainlink精灵
增加图像到IPFS
IPFS节点建设起来之后,就能够开始向它增加文件了。首先要上传咱们NFT的图像。返回IPFS装置的 "files"局部。
IPFS文件
这个D&D角色是什么样子的?将它增加到你的IPFS节点,而后 "Pin "它。当初,你能够随便pin一个空白的图片,或者轻易任何货色。
增加元数据文件到IPFS
而后须要将元数据JSON对象增加到IPFS中。须要从部署的代币中获取名称和属性。咱们在create-metadata.js
脚本中为做了一些工作。只需运行
truffle exec scripts/create-metadata.js --network rinkeby
元数据会显示在metadata
文件夹中。它当初只须要图片的URL!元数据是咱们应用Chainlink VRF创立的随机数和统计数据。当初咱们失去咱们创立的图片的CID,并将其增加到元数据JSON文件中,而后将该文件也增加到IPFS中,并将其pin住!它看起来会像这样:
Chainlink精灵JSON
Pinata
如果IPFS节点宕机了,或者敞开了计算机,咱们将无奈拉取元数据,所以咱们须要一种办法来放弃它们pin的状态,并让其余节点托管数据。这就是<u>Pinata</u>的作用。别放心,它是收费的!作用是在咱们的IPFS节点停机时帮咱们保护数据。复制图像和JSON元数据文件的CID,并将其增加到Pinata账户中。这须要几秒钟的工夫来注册。
复制CID
这个元数据 json 文件就是 tokenURI
,所以咱们用给图片NFT的 tokenId 来批改 set-token-uri.js
,并增加 ipfs tokenURI。
而后咱们用
truffle exec scripts/set-token-uri.js --network rinkeby
当初就能够失去NFT的地址,而后到OpenSea testnet市场去看看咱们做的是否正确。如果做得正确,它将看起来像这样)。咱们要先在OpenSea注册一个账户。
这里是增加你的testnet NFT合约在opensea上查看的链接)。而后,就能够开始销售你的NFT了。
下一步
咱们应该都筹备好了!下面涵盖了很多信息,所以如果你有任何问题,肯定要分割咱们的Discord。智能合约和Chainlink工程师领有宏大的社区,很多优良的人正汇集在一起,将NFT和智能合约推向聚光灯下,所以Discord也是一个意识其余敌人的好中央。你还想看看Chainlink Builders打算,在那里你能够通过应用Chainlink构建博得一些很酷的奖品!
和平常一样,肯定要拜访开发文档,你也能够订阅Chainlink Newsletter来理解Chainlink的最新动静。
如果你在这里学到了新的货色,想展现你所开发的货色,或者为一些演示仓库开发了前端,欢送在Twitter、Discord或Reddit上分享,并在你的仓库上加上#chainlink的标签。