Skip to content

Instantly share code, notes, and snippets.

@vmunix
Last active July 20, 2021 20:56
Show Gist options
  • Save vmunix/bd9a2507ab3e43fceb8f91fb2e3a6e04 to your computer and use it in GitHub Desktop.
Save vmunix/bd9a2507ab3e43fceb8f91fb2e3a6e04 to your computer and use it in GitHub Desktop.
MeebitsDAO red ticket solidity contract
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
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/AccessControl.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract MeebitsDAOTickets is
ERC721,
ERC721URIStorage,
ERC721Burnable,
AccessControl
{
using Counters for Counters.Counter;
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
Counters.Counter private _tokenIdCounter;
constructor() ERC721("MeebitsDAOTickets", "MTIX") {
_setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
_setupRole(MINTER_ROLE, msg.sender);
}
function safeMint(
address to,
uint256 tokenId,
string memory _tokenURI
) public {
require(hasRole(MINTER_ROLE, msg.sender));
require(
tokenId <= _tokenIdCounter.current(),
"MeebitsDAOTickets: cannot mint a single token that hasn't been minted already"
);
_safeMint(to, tokenId);
_setTokenURI(tokenId, _tokenURI);
}
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);
}
function supportsInterface(bytes4 interfaceId)
public
view
override(ERC721, AccessControl)
returns (bool)
{
return super.supportsInterface(interfaceId);
}
function totalSupply() public view virtual returns (uint256) {
return _tokenIdCounter.current();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment