// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; contract MyContractTest is ERC721, ERC721Royalty, ReentrancyGuard, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; uint256 MAX_SUPPLY = 9; string _contractURI = "ipfs://"; constructor() ERC721("MyContractTest", "MCT") { _tokenIdCounter.increment(); } function contractURI() public view returns (string memory) { return _contractURI; } function _baseURI() internal pure override returns (string memory) { return "ipfs:///"; } function mint(address to) public onlyOwner { uint256 tokenId = _tokenIdCounter.current(); require(tokenId <= MAX_SUPPLY, "No remaining supply"); _tokenIdCounter.increment(); _mint(to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721Royalty) { super._burn(tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Royalty) returns (bool) { return super.supportsInterface(interfaceId); } function setDefaultRoyalty(address receiver, uint96 feeNumerator) external onlyOwner { _setDefaultRoyalty(receiver, feeNumerator); } }
0.4.18