元宇宙非小号金色财经交流群社区官网

Solidity编程学习示例代码

浏览:99|时间:2023-11-21 07:46:06
的id都是唯一的。通过以上步骤,我们已经将合约编译并部署到了这个在线合约编辑器提供的本地测试网络上。

当然,如果我们想将合约部署到以太坊的实际网络上,我们只需切换网络并连接我们的浏览器插件钱包即可。

在这份ERC721代码中,我们实现的功能是任何人都可以调用合约的mint方法铸造自己的NFT,每个NFT的id都是唯一的。接下来,我们将仔细分析和解释源代码。

ERC721.sol

// SPDX-License-Identifier: MIT pragma solidity ^0.8.12;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Counters.sol";

contract MyNFT is ERC721Enumerable, Ownable { using Counters for Counters.Counter; using Strings for uint256;

Counters.Counter private _tokenIdTracker;

event Mint(address indexed from, address indexed to, uint256 indexed tokenId);

uint256 private _currentTokenId = 0; string private constant _baseTokenURI = "https://ipfs.io/ipfs/QmXgMRpwoEtuhksEJ7LD9ySLzAvAM5tqs1q6rGZ38Qg1Kf/"; string public baseExtension = ".json";

constructor(string memory name, string memory symbol) ERC721(name, symbol) { require(bytes(name).length != 0 && bytes(symbol).length != 0, "name and symbol can't be empty"); }

function tokenURI(uint256 tokenId) public view override returns (string memory) { return string(abi.encodePacked(_baseTokenURI, tokenId.toString(), baseExtension)); }

function mint() external { uint256 tokenId = _tokenIdTracker.current() + 1; _mint(msg.sender, tokenId); _tokenIdTracker.increment(); emit Mint(address(0), msg.sender, tokenId); } } 导入"@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; 导入"@openzeppelin/contracts/access/Ownable.sol"; 导入"@openzeppelin/contracts/utils/Counters.sol"; 发行代币需要遵守相应的EIP协议,之前的ERC20代币遵循的是EIP20协议。OpenZeppelin是一个用于开发安全智能合约的库,它的代码经过社区审核并且有很强的社区支持,实现了标准代币接口,因此我们可以放心地使用import命令将其导入到我们的代码中。因此,在这里,我们与ERC20代码类似,也导入了其代码接口文件。 contract MyNFT is ERC721Enumerable, Ownable {} 使用is将我们需要用到的文件方法继承到主合约中,这样我们就可以使用来自继承合约的所有方法。 using Counters for Counters.Counter; using Strings for uint256; Counters.Counter private _tokenIdTracker; 由于Counter.sol是一个库合约,所以我们需要使用using命令来使用这个库合约。具体的使用方式是将库函数(来自库A)附加到任何类型(B)。 在下面的代码中,我们将使用Counters库来将uint类型的tokenId转换成string类型,所以我们还需要使用Strings库的方法。 _tokenIdTracker变量直接使用库合约Counters的方法来声明其类型。 event Mint(address indexed from, address indexed to, uint256 indexed tokenId); 我们声明了一个Mint事件,在执行mint方法时,可以返回具体的ID。

代码之家 股票代码 原油代码 期货代码 外汇代码

  • 正大金泓国际期货代理:美联储官员将陆续发言,金价小幅承压

    正大金泓国际期货代理:美联储官员将陆续发言,金价小幅承压

    2023-06-20 14:57:51

    本交易日本交易日将迎来圣路易斯联储主席布拉德和美联储“三号人物”、纽约联储主席威廉姆斯的讲话,投资者需要重点关注。在美联储上周持鹰派立场暂停收紧货币政策后,市场也在关注鲍威尔周三和周四的国会证词,投资者需要留意市场预期的...

  • 现货代币 Prisma 看涨,详细信息和交易价格

    现货代币 Prisma 看涨,详细信息和交易价格

    2024-01-07 22:36:22

    现货代币看涨 嗯,这是一种我想在牛市期间持有的代币 代币名称 详细信息它基本上是一种非托管和去中心化的以太坊 LST 支持的稳定币。该稳定币将在 Curve 和 Convex Finance 上受到激励,以创建一个资本效...

  • 外汇黄金原油外汇今日最新走势分析,美盘操作

    外汇黄金原油外汇今日最新走势分析,美盘操作

    2023-12-06 07:18:04

    黄金短线就以2020-42内震荡思路操作即可,若扩大,上方可看趋势线支撑压力转换位置2055附近,短线多空的强弱就关注2028附近的55日均线的得失,可作为强弱指标参考,破位有机会再次测试2020附近支撑有效性,多:20...

  • 汽车之家股票回购速度远低于预期,面临严重的资本投资风险

    汽车之家股票回购速度远低于预期,面临严重的资本投资风险

    2023-05-07 18:19:42

    根据其在2022年第四季度财报中披露的信息,截至2022年底,汽车之家账上的现金和短期投资约为人民币2208亿元(合32亿美元)。虽然2亿美元的股票回购计划相当不错,因为指定用于股票回购的金额相当于汽车之家现金余额的6%...

本站分享的区块链、Web3.0元宇宙、NFT、数字藏品最新消息等相关数藏知识快讯NFR资讯新闻,与金色财经非小号巴比特星球前线Btc中国官网无关,本站资讯观点不作为投资依据,市场有风险,投资需谨慎!不提供社区论坛BBS微博微信交流群等相关币圈信息发布!
本站内容来源于互联网,如存在侵权及违规内容投诉邮箱( zztaobao@vip.qq.com )