BasicERC721.sol 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity 0.8.28;
  3. import { Strings } from "@openzeppelin/contracts/utils/Strings.sol";
  4. import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
  5. import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol";
  6. import { ERC721Enumerable } from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
  7. import { ERC721Pausable } from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol";
  8. import { ERC721Burnable } from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol";
  9. /**
  10. * This file was generated with Openzeppelin Wizard and later modified.
  11. * GO TO: https://wizard.openzeppelin.com/#erc721
  12. */
  13. contract BasicERC721 is ERC721, ERC721Enumerable, ERC721Pausable, Ownable, ERC721Burnable {
  14. using Strings for uint256;
  15. uint256 private _nextTokenId;
  16. string private _tokenBaseURI;
  17. string private _contractURI;
  18. constructor(
  19. string memory name,
  20. string memory symbol,
  21. string memory tokenBaseURI,
  22. string memory contractURI_,
  23. address initialOwner
  24. ) ERC721(name, symbol) Ownable(initialOwner) {
  25. _tokenBaseURI = tokenBaseURI;
  26. _contractURI = contractURI_;
  27. }
  28. function safeMint(address to) external onlyOwner {
  29. unchecked {
  30. _nextTokenId++;
  31. }
  32. _safeMint(to, _nextTokenId);
  33. }
  34. function pause() external onlyOwner {
  35. _pause();
  36. }
  37. function unpause() external onlyOwner {
  38. _unpause();
  39. }
  40. function setBaseURI(string memory baseURI) external onlyOwner {
  41. _tokenBaseURI = baseURI;
  42. }
  43. function setContractURI(string memory contractURI_) external onlyOwner {
  44. _contractURI = contractURI_;
  45. }
  46. function _baseURI() internal view override returns (string memory) {
  47. return _tokenBaseURI;
  48. }
  49. function contractURI() external view returns (string memory) {
  50. return _contractURI;
  51. }
  52. /**
  53. * @dev Returns base uri and adds .json suffix
  54. * This is useful for metadata published on ipfs where files have .json suffix
  55. */
  56. function tokenURI(uint256 tokenId) public view override returns (string memory) {
  57. if (ownerOf(tokenId) == address(0)) revert ERC721NonexistentToken(tokenId);
  58. return bytes(_baseURI()).length > 0 ? string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json")) : "";
  59. }
  60. function _update(
  61. address to,
  62. uint256 tokenId,
  63. address auth
  64. ) internal override(ERC721, ERC721Enumerable, ERC721Pausable) returns (address) {
  65. return super._update(to, tokenId, auth);
  66. }
  67. function _increaseBalance(address account, uint128 value) internal override(ERC721, ERC721Enumerable) {
  68. super._increaseBalance(account, value);
  69. }
  70. function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) {
  71. return super.supportsInterface(interfaceId);
  72. }
  73. }