// SPDX-License-Identifier: MIT pragma solidity ^0.7.1; import "@openzeppelin/contracts@4.4.2/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts@4.4.2/token/ERC721/extensions/ERC721Enumerable.sol"; import "@openzeppelin/contracts@4.4.2/access/Ownable.sol"; import "@openzeppelin/contracts@4.4.2/utils/Counters.sol"; contract LUCKYTEST is ERC721, ERC721Enumerable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; uint256 public mintRate = 0.1 ether; uint public MAX_SUPPLY = 2555; constructor() ERC721("LUCKYTEST", "LTEST") {} function _baseURI() internal pure override returns (string memory) { return "https://gateway.pinata.cloud/ipfs/QmPHGo76xFjZV1FSf5fBqhkp9bj7D8eDfP3ne4AJY8URXR/"; } function safeMint(address to) public payable { require(totalSupply() < MAX_SUPPLY, "Can't mint more" ); require(msg.value >= mintRate, "Not enought ether sent." ); uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _safeMint(to, tokenId); } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function withdraw() public onlyOwner { require(address(this).balance > 0, "Balance is 0"); payable(owner()).transfer(address(this).balance); } }
0.7.1