12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- pragma solidity ^0.5.2;
- import "./ERC721.sol";
- import "./IERC721Metadata.sol";
- import "../../introspection/ERC165.sol";
- contract ERC721Metadata is ERC165, ERC721, IERC721Metadata {
- // Token name
- string private _name;
- // Token symbol
- string private _symbol;
- // Optional mapping for token URIs
- mapping(uint256 => string) private _tokenURIs;
- bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
- /*
- * 0x5b5e139f ===
- * bytes4(keccak256('name()')) ^
- * bytes4(keccak256('symbol()')) ^
- * bytes4(keccak256('tokenURI(uint256)'))
- */
- /**
- * @dev Constructor function
- */
- constructor (string memory name, string memory symbol) public {
- _name = name;
- _symbol = symbol;
- // register the supported interfaces to conform to ERC721 via ERC165
- _registerInterface(_INTERFACE_ID_ERC721_METADATA);
- }
- /**
- * @dev Gets the token name
- * @return string representing the token name
- */
- function name() external view returns (string memory) {
- return _name;
- }
- /**
- * @dev Gets the token symbol
- * @return string representing the token symbol
- */
- function symbol() external view returns (string memory) {
- return _symbol;
- }
- /**
- * @dev Returns an URI for a given token ID
- * Throws if the token ID does not exist. May return an empty string.
- * @param tokenId uint256 ID of the token to query
- */
- function tokenURI(uint256 tokenId) external view returns (string memory) {
- require(_exists(tokenId));
- return _tokenURIs[tokenId];
- }
- /**
- * @dev Internal function to set the token URI for a given token
- * Reverts if the token ID does not exist
- * @param tokenId uint256 ID of the token to set its URI
- * @param uri string URI to assign
- */
- function _setTokenURI(uint256 tokenId, string memory uri) internal {
- require(_exists(tokenId));
- _tokenURIs[tokenId] = uri;
- }
- /**
- * @dev Internal function to burn a specific token
- * Reverts if the token does not exist
- * Deprecated, use _burn(uint256) instead
- * @param owner owner of the token to burn
- * @param tokenId uint256 ID of the token being burned by the msg.sender
- */
- function _burn(address owner, uint256 tokenId) internal {
- super._burn(owner, tokenId);
- // Clear metadata (if any)
- if (bytes(_tokenURIs[tokenId]).length != 0) {
- delete _tokenURIs[tokenId];
- }
- }
- }
|