76 lines
2.2 KiB
Solidity
76 lines
2.2 KiB
Solidity
// SPDX-License-Identifier: Mozilla Public License 2.0
|
|
pragma solidity ^0.8.17;
|
|
|
|
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
|
|
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
|
|
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol";
|
|
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol";
|
|
import "@openzeppelin/contracts/utils/Context.sol";
|
|
import "@openzeppelin/contracts/utils/Counters.sol";
|
|
|
|
|
|
contract BaseERC721 is
|
|
Context,
|
|
ERC721Enumerable,
|
|
ERC721Burnable,
|
|
ERC721Pausable
|
|
{
|
|
using Counters for Counters.Counter;
|
|
|
|
Counters.Counter private _tokenIdTracker;
|
|
|
|
string private _baseTokenURI;
|
|
|
|
constructor(
|
|
string memory name,
|
|
string memory symbol,
|
|
string memory baseTokenURI
|
|
) ERC721(name, symbol) {
|
|
_baseTokenURI = baseTokenURI;
|
|
}
|
|
|
|
function _baseURI() internal view virtual override returns (string memory) {
|
|
return _baseTokenURI;
|
|
}
|
|
|
|
/**
|
|
* @dev Creates a new token for `to`. Its token ID will be automatically
|
|
* assigned (and available on the emitted {IERC721-Transfer} event), and the token
|
|
* URI autogenerated based on the base URI passed at construction.
|
|
*
|
|
* See {ERC721-_mint}.
|
|
*
|
|
* Requirements:
|
|
*
|
|
* - the caller must have the `MINTER_ROLE`.
|
|
*/
|
|
function _mintTo(address to) internal {
|
|
// We cannot just use balanceOf to create the new tokenId because tokens
|
|
// can be burned (destroyed), so we need a separate counter.
|
|
_mint(to, _tokenIdTracker.current());
|
|
_tokenIdTracker.increment();
|
|
}
|
|
|
|
function _beforeTokenTransfer(
|
|
address from,
|
|
address to,
|
|
uint256 firstTokenId,
|
|
uint256 batchSize
|
|
) internal virtual override(ERC721, ERC721Enumerable, ERC721Pausable) {
|
|
super._beforeTokenTransfer(from, to, firstTokenId, batchSize);
|
|
}
|
|
|
|
/**
|
|
* @dev See {IERC165-supportsInterface}.
|
|
*/
|
|
function supportsInterface(bytes4 interfaceId)
|
|
public
|
|
view
|
|
virtual
|
|
override(ERC721, ERC721Enumerable)
|
|
returns (bool)
|
|
{
|
|
return super.supportsInterface(interfaceId);
|
|
}
|
|
}
|