pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; contract MyNFT is ERC721URIStorage, Ownable { using Counters for Counters.Counter; // Counters is used to systematically maintan token Ids Counters.Counter private _tokenIds; // Initialization of token Ids constructor() public ERC721("MyNFT", "NFT") {} // An ERC constructor that gets called each time class is executed function mintNFT(address recipient, string memory tokenURI) // Parameters: recipent address and token resource identifier public onlyOwner returns (uint256) { _tokenIds.increment(); // incrementing token Id as they need to be unique uint256 newItemId = _tokenIds.current(); //Extracting new tokens from existing token ids _mint(recipient, newItemId); // To int NFTs it's a library function under ERC-Solidity framework _setTokenURI(newItemId, tokenURI); // To assign unique URIs to created NFT tokens return newItemId; } }
0.4.18