如何使用 Solidity 创建 NFT
Posted 扣3039046426
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用 Solidity 创建 NFT相关的知识,希望对你有一定的参考价值。
如何使用 Solidity 创建 NFT
提供技术支持 Sina Visitor System
构建和创建 NFT 的光荣指南,ERC-721 标准,用于创建收藏品、艺术品和任何类型的链上独特资产。
照片由Anton Maksimov juvnsky在Unsplash上拍摄。
NFT(Non-Fungible Tokens)是智能合约领域的热门新秀。如果说 2020 年是 DeFi 之年,那么至少 2021 年初属于 NFT。NFT 是一种类似于ERC20的代币标准。
不可替代的代币意味着它是独一无二的代币,没有其他类似的代币。这与可替代的 ERC20 截然不同。Fungible 的意思是“可替换的”或“可互换的”。例如,无论您使用哪种美元钞票,您的美元钞票都将值 1 美元。美元钞票上的序列号可能不同,但钞票可以互换,因为无论如何它们都值 1 美元。
有很多 ERC20,比如 MKR、AAVE 和 SNX。NFT(或 ERC721)并不多。事实上,每一个都只有一个,因此它是独一无二的。这些可以构建和编程以做任何你想做的事情,就像使用常规智能合约一样,但它们具有加密证明的真实性,因为它们的部署历史将始终得到保证。这解决了许多问题——特别是对于艺术界的人来说——解读一件艺术品的真实性。这还可以解决版税问题、创建数字状态符号、允许游戏应用程序互操作等等。
他们现在在哪里?
他们有很多价值。最近,Axie Infinity刚刚以约 150 万美元的价格出售了 9 块土地。
@seedphrase 的推文。
人们对这些感到非常兴奋。NFT 是区块链和智能合约的出现促成的一项新冒险,人们正在用它们构建令人惊叹的东西。
因此,让我们教您有关 NFT 的所有知识。
标准
正如我们所提到的,NFT 以ERC721 代币标准开头,其语法与 ERC20 相似——只是做了一些调整。
为了让你的合约被视为 NFT,它所要做的就是遵循这个标准。我们只需将标准导入我们的合同即可轻松实现,这样我们就不必在每次想要制作新标准时都重新发明轮子。请参阅下面的代码了解我的意思。
NFT 有一个tokenURI
我们将在稍后讨论的变量,它们有 atokenId
到其所有者的映射,其中每个令牌都有自己的“所有者”。这将它们与 ERC20 区分开来,ERC20 仅具有地址到余额的映射。ERC721s 仍然允许人们转移代币、设置代币的权限等等。按照惯例,这是一个轻量级标准,因此我们可以使用它们构建我们想要的任何东西。
现在,事情变得真正不同了。元数据。当您继续访问OpenSea(一个流行的 NFT 市场)时,您可以看到一堆图像。既然 NFT 都在区块链上,那么它们的所有数据都应该在链上吧?嗯,不完全是。
将数据存储在链上可能会变得非常昂贵,而且艺术并不以体积小而闻名。以太坊和智能合约开发人员意识到,即使上传 1MB 的图片也可能会破坏他们的银行账户,因此他们想想出一种无需上传整个图片即可展示艺术品的方法。
作为一种解决方法,大多数 NFT 都有所谓的tokenURI
. 这是 NFT 的所有图像方面的全球唯一标识符。这使得为 NFT 提供视觉效果变得更加容易。URI 是一个统一资源标识符,它可以是一个 HTTPS API 调用、通过 IPFS 进行的某些操作,或者是某种其他类型的唯一标识符。此元数据如下所示:
它们是 JSON 文件,具有:
name
description
image
attributes
这些通常存储在 API 或 IPFS 中。
现在,如果你和我一样,你会想,“等等……这意味着图像来自一个集中的位置。这违背了我部署到区块链的目的。”
链上元数据与链下元数据
如果你想让你的 NFT 做任何有趣的事情,在我看来,它需要具有链上属性。一些例子包括如果你想给他们像口袋妖怪这样的战斗统计数据,某种稀有统计数据,或者让他们有加密保证的稀缺性。属性必须在链上。
目前,NFT 平台没有很好的方法来可视化链上属性,所以你只需tokenURI
要用你铸造的 NFT 创建一个。
对于tokenURI
,最流行的方法之一是使用IPFS来存储您的数据。您将在那里上传您的数据,然后使用固定服务确保数据永远保留在那里。当我们的智能合约平台和我们的存储之间有更多的互操作性时,我感到很兴奋。
提示:这进入了我的区块链全栈理论。前面是智能合约平台,中间是 Chainlink,后面是 dStorage……但那是另一个话题。
图片来自OpenSea。
老实说,一开始我认为 NFT 很愚蠢。再说一次,我也是那种曾经认为艺术很愚蠢的人……但我必须记住,我喜欢音乐、电影和具有良好视觉效果的游戏,所以如果我说我不喜欢,那我就是个伪君子喜欢艺术。NFT 解决了艺术界面临的版税和真实性问题。我们现在有一个去中心化的审计服务。如果您想使用某人的艺术作品,您可以在链上查看有关该作品的所有信息。
Nyan 猫的原始创建者以 300 ETH 的价格出售了它的 NFT 版本。真实性是有价值的。如果你创造出惊人的东西,稀缺就有价值。这就是为什么我认为拥有 Chainlink VRF NFT 非常棒,因为你可以创造出非常稀有的收藏品,以至于只有你才有机会拥有它。当有人在这些平台上制作口袋妖怪类型的游戏时,我感到很兴奋。这些 NFT 将继续存在。
有大量的 NFT 平台价值飞涨,我们可以用它们做一些非常酷的事情。
让我们看看我nft-mix
在布朗尼平台上制作的。如果您还想要一个展示如何上传到 IPFS 的端到端演示,请查看我们创建的 Chainlink 博客,该博客部署了您在上面看到的这些可爱的小地牢和龙角色。查看描述以查看代码和相关的博客。
让我们看一下简单 NFT 的代码。这方面的所有代码都可以nft-mix
在 GitHub 上的 repo 中找到,Dungeons and Dragons代码也可以在 GitHub 上找到。
要全面了解上述所有内容,请随时查看我们的 youtube 视频。
NFT 光荣指南
简单的 NFT 合约
这是启动 NFT 合约的最简单方法。这是 Truffle、Hardhat 和 Brownie 的语法,它在 Remix 中不起作用。我喜欢使用OpenZepplin合约,因为它们很好,并且拥有我们通常需要的所有工具。所以一定要安装这些:
<span style="color:rgba(0, 0, 0, 0.8)"><span style="background-color:#ffffff"><span style="background-color:#f2f2f2"><span style="color:#292929">npm install @openzeppelin/contracts</span></span></span></span>
我们使用符号创建一个令牌,DOG
名称为Dogie
。DOGs
然后,我们可以使用该功能尽可能多地铸造,每次我们这样做时都会为我们createCollectible
存储一个新的。tokenId
我们需要做的就是传递一个tokenURI
,它只是指向元数据 JSON 格式的任何 URL/URI:
<span style="color:rgba(0, 0, 0, 0.8)"><span style="background-color:#ffffff"><span style="background-color:#f2f2f2"><span style="color:#292929">
“名称”:“名称”,
“描述”:“描述”,
“图像”:“URI”,
“属性”:[]
</span></span></span></span>
这很好,但让我们升级。如果您想了解简单的 NFT,请查看此视频。
Solidity 中的简单 NFT 部署
高级 NFT 合约
现在我们在说话!这个使用Chainlink VRF为我们的 NFT 提供随机统计数据。在这种情况下,我们使用随机性给我们的狗一个随机品种!
当我们调用createCollectible
这个时间时,我们实际上向 Chainlink 预言机发送了一个请求,以返回一个经过加密验证的随机数。这样,我们就不会发生任何可能破坏游戏公平性的篡改。该请求是异步的,我们必须等待 Chainlink 预言机使用随机数进行第二次交易。
一旦 Chainlink 预言机完成,它会fulfillRandomness
使用其随机数调用该函数,这就是 NFT 的铸造。这些映射用于确保最初点击该createCollectible
函数的人成为 NFT 的所有者。这就是我们可以开始制作具有令人难以置信的强大功能和真正稀缺性的动态 NFT 的方式。
三solidity 交易 transfer 的使用《实战NFT web3 solidity(新版本0.8.+)》
《web3 solidity0.8.+版本(持续更新新版本内容) 基础到实战NFT开发》会及时更新新版本 solidity 内容,以及完成最终的 NFT 实战商业项目部分。
注:由于是付费专栏内容,若有错误请及时联系@1_bit,博客链接:https://blog.csdn.net/A757291228 ,或在文章下留言,收到后将会对错误进行改正,若是版本更新导致的问题也希望大家对错误进行提交,尽力去保证付费用户该得到的权益。
文章目录可查看:目录(文章更新中…)
更新内容将会在目录中更新…
友情提示:本系列文章读者最好学过一门编程语言,面向对象语言更佳,文章所有代码将会完整贴出。
一、查看余额与支付到合约
在 solidity 中交易是核心知识点,交易贯穿了几乎大部分的智能合约操作。咱们在正式学习交易之前,首先了解一下如何给合约转账以及如何查看合约中的余额。
以下是一个有关查看合约地址余额和给合约地址转账的sol 代码示例:
// SPDX-License-Identifier:MIT
pragma solidity ^0.8
以上是关于如何使用 Solidity 创建 NFT的主要内容,如果未能解决你的问题,请参考以下文章
如何创建NFT并OpenSea上展示《alchemy How to Develop an NFT Smart Contract》译
如何创建NFT并OpenSea上展示《alchemy How to Develop an NFT Smart Contract》译
如何创建NFT并OpenSea上展示《alchemy How to Develop an NFT Smart Contract》译