共计 5432 个字符,预计需要花费 14 分钟才能阅读完成。
原文地址
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-nft
cd dungeons-and-dragons-nft
git checkout opensea-update
npm install
truffle migrate --reset --network rinkeby
下面的命令部署你的 D &D NFT!
创立角色
能够通过以下命令来尝试:
truffle exec scripts/fund-contract.js --network rinkeby
truffle exec scripts/generate-character.js --network rinkeby
truffle 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-verify
truffle 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 的标签。