Add IERC4906 interface and use in ERC721 (#4012)

Co-authored-by: Francisco Giordano <fg@frang.io>
This commit is contained in:
Hadrien Croubois
2023-02-17 10:26:10 +01:00
committed by GitHub
parent d64d7aa5d1
commit 96a2297e15
5 changed files with 42 additions and 2 deletions

View File

@ -0,0 +1,19 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC165.sol";
import "./IERC721.sol";
/// @title EIP-721 Metadata Update Extension
interface IERC4906 is IERC165, IERC721 {
/// @dev This event emits when the metadata of a token is changed.
/// So that the third-party platforms such as NFT market could
/// timely update the images and related attributes of the NFT.
event MetadataUpdate(uint256 _tokenId);
/// @dev This event emits when the metadata of a range of tokens is changed.
/// So that the third-party platforms such as NFT market could
/// timely update the images and related attributes of the NFTs.
event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);
}

View File

@ -4,11 +4,12 @@
pragma solidity ^0.8.0;
import "../ERC721.sol";
import "../../../interfaces/IERC4906.sol";
/**
* @dev ERC721 token with storage based token URI management.
*/
abstract contract ERC721URIStorage is ERC721 {
abstract contract ERC721URIStorage is IERC4906, ERC721 {
using Strings for uint256;
// Optional mapping for token URIs
@ -38,6 +39,8 @@ abstract contract ERC721URIStorage is ERC721 {
/**
* @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
*
* Emits {MetadataUpdate}.
*
* Requirements:
*
* - `tokenId` must exist.
@ -45,6 +48,8 @@ abstract contract ERC721URIStorage is ERC721 {
function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
_tokenURIs[tokenId] = _tokenURI;
emit MetadataUpdate(tokenId);
}
/**