// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.11; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "./interfaces/IERC721Custom.sol"; contract ERC721Custom is ERC721, ERC721URIStorage, ERC721Burnable, Ownable, IERC721Custom { constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) {} function safeMint( address to, uint256 tokenId, string memory uri ) public onlyOwner { _safeMint(to, tokenId); _setTokenURI(tokenId, uri); } // The following functions are overrides required by Solidity. function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } }