NFTToken.sol 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.2;
  3. import "hardhat/console.sol";
  4. import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
  5. import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
  6. import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
  7. import "@openzeppelin/contracts/security/Pausable.sol";
  8. import "@openzeppelin/contracts/access/Ownable.sol";
  9. import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol";
  10. import "@openzeppelin/contracts/utils/Counters.sol";
  11. contract NFTToken is
  12. ERC721,
  13. ERC721Enumerable,
  14. ERC721URIStorage,
  15. Pausable,
  16. Ownable,
  17. ERC721Burnable
  18. {
  19. using Counters for Counters.Counter;
  20. uint256 public constant MAX_TOKENS = 10000;
  21. Counters.Counter private _tokenIdCounter;
  22. constructor() ERC721("TOKEN_NAME_PROTO", "PROTO") {
  23. console.log("Constructor - This is AWESOME");
  24. }
  25. function safeMint(address to, string memory _tokenURI) public onlyOwner {
  26. _safeMint(to, _tokenIdCounter.current());
  27. _setTokenURI(_tokenIdCounter.current(), _tokenURI);
  28. _tokenIdCounter.increment();
  29. }
  30. function updateTokenURI(uint256 tokenId, string memory _tokenURI)
  31. public
  32. onlyOwner
  33. {
  34. _setTokenURI(tokenId, _tokenURI);
  35. }
  36. function pause() public onlyOwner {
  37. _pause();
  38. }
  39. function unpause() public onlyOwner {
  40. _unpause();
  41. }
  42. function _beforeTokenTransfer(
  43. address from,
  44. address to,
  45. uint256 tokenId
  46. ) internal override(ERC721, ERC721Enumerable) whenNotPaused {
  47. super._beforeTokenTransfer(from, to, tokenId);
  48. }
  49. function _burn(uint256 tokenId)
  50. internal
  51. override(ERC721, ERC721URIStorage)
  52. {
  53. super._burn(tokenId);
  54. }
  55. function tokenURI(uint256 tokenId)
  56. public
  57. view
  58. override(ERC721, ERC721URIStorage)
  59. returns (string memory)
  60. {
  61. return super.tokenURI(tokenId);
  62. }
  63. function supportsInterface(bytes4 interfaceId)
  64. public
  65. view
  66. override(ERC721, ERC721Enumerable)
  67. returns (bool)
  68. {
  69. return super.supportsInterface(interfaceId);
  70. }
  71. }