11.区块链系列之NFT从零到一开发

这篇具有很好参考价值的文章主要介绍了11.区块链系列之NFT从零到一开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文讲解如何从零到一打造自己的NFT

所有代码已上传至https://gitee.com/SJshenjian/blockchain/tree/master/hardhat-nft-fcc

1. 下载安装项目
git clone https://gitee.com/SJshenjian/blockchain.git
cd hardhat-nft-fcc
yarn
2. 配置修改
  • 新增订阅

在https://vrf.chain.link/中新增订阅,然后修改
helper-hardhat-config.js中的subscriptionId值为自己的

5: {
        name: "goerli",
        subscriptionId: "5115", // add your ID here!
    },
  • 注册https://www.pinata.cloud/或https://nft.storage用于NFT上传

注册API_KEY修改.env中配置

NFT_STORAGE_KEY=XXXXXX
PINATA_API_KEY=XXXXXX
PINATA_API_SECRET=XXXXXX
3. 运行部署

我们运行本地部署yarn hardhat deploy发现一切正常

(base) PS D:\blockchain\blockchain\hardhat-nft-fcc> yarn hardhat deploy
yarn run v1.22.19
warning package.json: No license field
$ D:\blockchain\blockchain\hardhat-nft-fcc\node_modules\.bin\hardhat deploy
Nothing to compile
Local network detected! Deploying mocks...
deploying "VRFCoordinatorV2Mock" (tx: 0x1f95b6dc03b0f019875a16c4e529a7ce7c20897a493463c3aa4a80a5f053f1af)...: deployed at 0x5FbDB2315678afecb367f032d93F642f64180aa3 with 2543420 gas
deploying "MockV3Aggregator" (tx: 0x07b11cc60051bd9be3bba6b22675974999ac14b8fc841ae5bf19418b634b86cc)...: deployed at 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 with 569671 gas
Mocks Deployed!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
You are deploying to a local network, you'll need a local network running to interact
Please run `yarn hardhat console --network localhost` to interact with the deployed smart contracts!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
----------------------------------------------------
deploying "BasicNft" (tx: 0x3ea769ae9694432e56ec58ca884df6853fda5a1a0f4f89ecf3c2aecf24e747ac)...: deployed at 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0 with 2014793 gas  
----------------------------------------------------
deploying "DynamicSvgNft" (tx: 0x05659748cafee03724c05003a44e1712cc8cddba0dcb4e73d5de2732d2e52372)...: deployed at 0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9 with 4585544 
gas
----------------------------------------------------
deploying "RandomIpfsNft" (tx: 0x69864f92b769bc30e7759fd5e3048bafaf7125ea146d3528c346d585628b0b16)...: deployed at 0x0165878A594ca255338adfa4d48449f69242Eb8F with 3575089 
gas
Basic NFT index 0 tokenURI: ipfs://bafybeig37ioir76s7mg5oobetncojcm3c3hxasyd4rvid4jqhy4gkaheg4/?filename=0-PUG.json
Dynamic SVG NFT index 0 tokenURI: data:application/json;base64,eyJuYW1lIjoiRHluYW1pYyBTVkcgTkZUIiwgImRlc2NyaXB0aW9uIjoiQW4gTkZUIHRoYXQgY2hhbmdlcyBiYXNlZCBvbiB0aGUgQ2hhaW5saW5rIEZlZWQiLCAiYXR0cmlidXRlcyI6IFt7InRyYWl0X3R5cGUiOiAiY29vbG5lc3MiLCAidmFsdWUiOiAxMDB9XSwgImltYWdlIjoiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJ6ZEdGdVpHRnNiMjVsUFNKdWJ5SS9QZ284YzNabklIZHBaSFJvUFNJeE1ESTBjSGdpSUdobGFXZG9kRDBpTVRBeU5IQjRJaUIyYVdWM1FtOTRQU0l3SURBZ01UQXlOQ0F4TURJMElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaVBnb2dJRHh3WVhSb0lHWnBiR3c5SWlNek16TWlJR1E5SWswMU1USWdOalJETWpZMExqWWdOalFnTmpRZ01qWTBMallnTmpRZ05URXljekl3TUM0MklEUTBPQ0EwTkRnZ05EUTRJRFEwT0MweU1EQXVOaUEwTkRndE5EUTRVemMxT1M0MElEWTBJRFV4TWlBMk5IcHRNQ0E0TWpCakxUSXdOUzQwSURBdE16Y3lMVEUyTmk0MkxUTTNNaTB6TnpKek1UWTJMall0TXpjeUlETTNNaTB6TnpJZ016Y3lJREUyTmk0MklETTNNaUF6TnpJdE1UWTJMallnTXpjeUxUTTNNaUF6TnpKNklpOCtDaUFnUEhCaGRHZ2dabWxzYkQwaUkwVTJSVFpGTmlJZ1pEMGlUVFV4TWlBeE5EQmpMVEl3TlM0MElEQXRNemN5SURFMk5pNDJMVE0zTWlBek56SnpNVFkyTGpZZ016Y3lJRE0zTWlBek56SWdNemN5TFRFMk5pNDJJRE0zTWkwek56SXRNVFkyTGpZdE16Y3lMVE0zTWkwek56SjZUVEk0T0NBME1qRmhORGd1TURFZ05EZ3VNREVnTUNBd0lERWdPVFlnTUNBME9DNHdNU0EwT0M0d01TQXdJREFnTVMwNU5pQXdlbTB6TnpZZ01qY3lhQzAwT0M0eFl5MDBMaklnTUMwM0xqZ3RNeTR5TFRndU1TMDNMalJETmpBMElEWXpOaTR4SURVMk1pNDFJRFU1TnlBMU1USWdOVGszY3kwNU1pNHhJRE01TGpFdE9UVXVPQ0E0T0M0Mll5MHVNeUEwTGpJdE15NDVJRGN1TkMwNExqRWdOeTQwU0RNMk1HRTRJRGdnTUNBd0lERXRPQzA0TGpSak5DNDBMVGcwTGpNZ056UXVOUzB4TlRFdU5pQXhOakF0TVRVeExqWnpNVFUxTGpZZ05qY3VNeUF4TmpBZ01UVXhMalpoT0NBNElEQWdNQ0F4TFRnZ09DNDBlbTB5TkMweU1qUmhORGd1TURFZ05EZ3VNREVnTUNBd0lERWdNQzA1TmlBME9DNHdNU0EwT0M0d01TQXdJREFnTVNBd0lEazJlaUl2UGdvZ0lEeHdZWFJvSUdacGJHdzlJaU16TXpNaUlHUTlJazB5T0RnZ05ESXhZVFE0SURRNElEQWdNU0F3SURrMklEQWdORGdnTkRnZ01DQXhJREF0T1RZZ01IcHRNakkwSURFeE1tTXRPRFV1TlNBd0xURTFOUzQySURZM0xqTXRNVFl3SURFMU1TNDJZVGdnT0NBd0lEQWdNQ0E0SURndU5HZzBPQzR4WXpRdU1pQXdJRGN1T0MwekxqSWdPQzR4TFRjdU5DQXpMamN0TkRrdU5TQTBOUzR6TFRnNExqWWdPVFV1T0MwNE9DNDJjemt5SURNNUxqRWdPVFV1T0NBNE9DNDJZeTR6SURRdU1pQXpMamtnTnk0MElEZ3VNU0EzTGpSSU5qWTBZVGdnT0NBd0lEQWdNQ0E0TFRndU5FTTJOamN1TmlBMk1EQXVNeUExT1RjdU5TQTFNek1nTlRFeUlEVXpNM3B0TVRJNExURXhNbUUwT0NBME9DQXdJREVnTUNBNU5pQXdJRFE0SURRNElEQWdNU0F3TFRrMklEQjZJaTgrQ2p3dmMzWm5QZ289In0=
Random IPFS NFT index 0 tokenURI: ipfs://QmZYmH5iDbD6v3U2ixoVAjioSzvWJszDzYdbeCLquGSpVm
Done in 10.52s.
4. IPFS介绍

IPFS是星际文件系统的简写,是去中心化存储龙头。我们NFT制作依赖于IPFS存储,最原始的文件如图片、视频都存储在IPFS中,一但上传不可更改。
首先我们访问https://github.com/ipfs/ipfs-desktop/releases下载对应版本客户端安装

在客户端文件中我们输入bafybeig37ioir76s7mg5oobetncojcm3c3hxasyd4rvid4jqhy4gkaheg4浏览后可以看到如下信息

{
    "name": "PUG",
    "description": "An adorable PUG pup!",
    "image": "https://ipfs.io/ipfs/QmSsYRx3LpDAb1GZQm7zZ1AuHZjfbPkD6J7s9r41xu1mf8?filename=pug.png",
    "attributes": [
        {
            "trait_type": "cuteness",
            "value": 100
        }
    ]
}

这就是NFT中的TOKEN_URI:值是json文件,定义了metadata信息,其中image指定图片的去中心化存储位置,当我们浏览器访问https://ipfs.io/ipfs/QmSsYRx3LpDAb1GZQm7zZ1AuHZjfbPkD6J7s9r41xu1mf8?filename=pug.png地址时,一个可爱的小狗图片就展现了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yV9XmZNH-1666522940517)(https://ipfs.io/ipfs/QmSsYRx3LpDAb1GZQm7zZ1AuHZjfbPkD6J7s9r41xu1mf8?filename=pug.png)]

好了,到此为止我们总结下NFT图像制作具体步骤

  1. GET IPFS
  2. Add TokenURI json file to IPFS
  3. Add IPFS URI TO YOUR NFT URI
5. NFT基础
  • 在BasicNFT.sol中我们已经有了TokenURI json file, 只需要进行上述第三步骤即可
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract BasicNft is ERC721 {
    string public constant TOKEN_URI =
        "ipfs://bafybeig37ioir76s7mg5oobetncojcm3c3hxasyd4rvid4jqhy4gkaheg4/?filename=0-PUG.json";
    uint256 private s_tokenCounter;

    constructor() ERC721("Dogie", "DOG") {
        s_tokenCounter = 0;
    }

    function mintNft() public {
        s_tokenCounter = s_tokenCounter + 1;
        _safeMint(msg.sender, s_tokenCounter);
    }

    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        // require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return TOKEN_URI;
    }

    function getTokenCounter() public view returns (uint256) {
        return s_tokenCounter;
    }
}

其中ERC-721 为 NFT 引入了一个标准,换言之, 这种类型的代币是独一无二的,并且可能与来自同一智能合约的另一代币有不同的价值,也许是因为它的年份、稀有性、甚至是它的观感

  • 运行yarn hardhat deploy --network goerli --tags basicnft部署NFT图像至goerli测试网络,注意之前在alchemy申请的GOERLI_RPC_URL是否过期,如果不能访问重新申请
$ D:\blockchain\blockchain\hardhat-nft-fcc\node_modules\.bin\hardhat deploy --network goerli --tags basicnft
Nothing to compile
----------------------------------------------------
reusing "BasicNft" at 0xa14Bb4725c302c04888010C343dC660902D6B50C
Done in 5.25s.

访问部署地址,NFT至此完成https://goerli.etherscan.io/address/0xa14Bb4725c302c04888010C343dC660902D6B50C

nft开发,区块链

6.随机NFT

对于RandomIpfsNft.sol做的功能类似盲盒抽奖,用户充值然后抽取NFT,普通稀缺各占一定比例,这种去中心化的机制下,让商家没有作假的可能。完全透明

7. SVG上NFT

DynamicSvgNft.sol实现了SVG图片制作为NFT,自行查看吧

到此为止,区块链系列先告一段落了

欢迎关注公众号算法小生或沈健的技术博客shenjian.online文章来源地址https://www.toymoban.com/news/detail-782181.html

到了这里,关于11.区块链系列之NFT从零到一开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 区块链java开发智能合约nf(部署第一个NFT智能合约)

    手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约) 刚搞区块链开发真的是太累了,自己摸石头过河,动不动就报错,网上搜索错误,一律看不出什么问题,或者报错的信息太少,问同事同事不鸟,问领导,领导也烦,无奈,对于英文不好的我,只能被迫

    2024年02月12日
    浏览(52)
  • 【Web3 系列开发教程——创建你的第一个 NFT(3)】开始创建 NFT

    本文将引导你使用以太坊和星际文件系统 (IPFS) 编写和部署不可替代 (ERC721) 代币智能合约。 星际文件系统 IPFS 是一个旨在 实现文件的分布式存储、共享和持久化的网络传输协议 。它是一种内容可寻址的对等超媒体分发协议。在IPFS网络中的节点构成一个分布式文件系统。它是

    2023年04月08日
    浏览(65)
  • 【Web3 系列开发教程——创建你的第一个 NFT(6)】为 NFT 设置价格

    我想作为 NFT 的创建者,你可能有意将你的 NFT 出售给你的 NFT 爱好者。 为此,我们需要为 NFT 定价,一般有两种主要的定价方式: 在智能合约内定价(本文所讲) 在 NFT 市场或平台上列出你的 NFT(更流行的方法) 注意: 在前面 NFT 创建教程的第 10 步中(回看之前的文章),

    2023年04月26日
    浏览(59)
  • 手把手教你区块链java开发智能合约nft-第一篇

    刚接触区块链开发,使用java开发,真的是太难了,自己一步步摸索,从新手小白一路碰壁,动不动就报错,去网上搜索对应错误,还真什么都搜索不到,摸索了三四个月,今天终于有了一些进展,今天开始分享出来,希望能帮助到需要的朋友 我作为一个java后端的程序员,不

    2024年01月23日
    浏览(54)
  • 【Web3 系列开发教程——创建你的第一个 NFT(7)】创建一个 NFT DApp,给你的 NFT 赋予属性,例如图片

    在本文中,你将构建一个 NFT 铸币机,并学习如何通过使用 Metamask 和 Web3 工具将你的智能合约连接到 React 前端,来创建一个NFT dApp。 我认为,对于具备 Web2 开发背景的开发者来说,最大的挑战之一是 弄清楚如何将你的智能合约连接到前端项目并与之交互。 通过构建 NFT 铸币

    2024年01月16日
    浏览(63)
  • 【Web3 系列开发教程——创建你的第一个 NFT(5)】使用 Ethers.js 铸造 NFT | 测试用例

    本节文章将描述如何通过 ethers.js 库使用以太币在以太坊区块链上 铸造 NFT ,以及我们还会讨论如何对创建的 NFT 进行基础的 测试 。 在本文中,我们将实践一种可替代的方法:即使用 OpenZeppelin V4 库 以及 Ethers.js 以太坊库实现。 除此之前,还将介绍使用 Hardhat 和 Waffle 测试合

    2024年01月18日
    浏览(82)
  • 从零学习NFT(ERC721)

    文章大纲 什么是NFT. NFT有什么价值 市面上有什么NFT交易市场 如何实现自己的NFT(智能合约ERC721) NFT(Non-FungibleToken,非同质化数字权益证明),每个NFT都是唯一不可分割,不可篡改,也不能互相替代的, 因此NFT与虚拟货币等同质化代币存在本质不同,有数字商品的实际价值做支

    2024年02月15日
    浏览(40)
  • 认识区块链,认知区块链——NFT

    NFT 出圈很久了,今天来聊聊,作为继 DeFi 之后,又一个区块链的实际落地应用,对区块链的普及可谓起到至关重要的作用,对未来区块链的发展也提供更多的遐想。 怎么更好地理解 NFT?作为互联网上的图片,是可以无限次分发复制的,微信里给朋友发送一个表情,你们两个

    2024年02月12日
    浏览(39)
  • 【JTeam Champion NFT】nft区块链为何让人如此兴奋?

    NFT之所以强大,是因为结合以太坊上的其他金融工具,任何人都能发行、拥有和交易它们。因此,用户与NFT的交互效率显著高于传统平台。就像密码学货币的支付效率高于传统支付一样,交易无边界和转账方便使得NFT的流转效率高于传统途径。 例如,如果你是一个游戏开发者

    2023年04月09日
    浏览(35)
  • 区块链NFT之OpenSea

    OpenSea是目前NFT行业最大的综合NFT交易平台,可以在平台上铸造、展示、交易、拍卖NFT。涵盖类别广泛、数字商品最多的综合型NFT 交易平台,并且围绕其多元的生态,已经在NFT交易领域形成无可替代的优势地位。OpenSea是NFT生态最重要的组成部分,其以太坊NFT的交易额约占市场

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包