diff --git a/.changeset/hip-vans-crash.md b/.changeset/hip-vans-crash.md new file mode 100644 index 000000000..30257d0ce --- /dev/null +++ b/.changeset/hip-vans-crash.md @@ -0,0 +1,5 @@ +--- +'openzeppelin-solidity': minor +--- + +`ERC721URIStorage`: added internal getter for retrieving token URI without base URI diff --git a/contracts/mocks/token/ERC721URIStorageMock.sol b/contracts/mocks/token/ERC721URIStorageMock.sol index 455c933c8..048faceaf 100644 --- a/contracts/mocks/token/ERC721URIStorageMock.sol +++ b/contracts/mocks/token/ERC721URIStorageMock.sol @@ -11,6 +11,10 @@ abstract contract ERC721URIStorageMock is ERC721URIStorage { return _baseTokenURI; } + function getPureTokenURI(uint256 tokenId) internal view returns (string memory) { + return _getPureTokenURI(tokenId); + } + function setBaseURI(string calldata newBaseTokenURI) public { _baseTokenURI = newBaseTokenURI; } diff --git a/contracts/token/ERC721/extensions/ERC721URIStorage.sol b/contracts/token/ERC721/extensions/ERC721URIStorage.sol index 201b05a81..ef82da52b 100644 --- a/contracts/token/ERC721/extensions/ERC721URIStorage.sol +++ b/contracts/token/ERC721/extensions/ERC721URIStorage.sol @@ -43,6 +43,15 @@ abstract contract ERC721URIStorage is IERC4906, ERC721 { return super.tokenURI(tokenId); } + /** + * @dev gets the tokenURI of 'tokenId' without the baseURI + * + */ + + function _getPureTokenURI(uint256 tokenId) internal view virtual returns (string memory) { + return _tokenURIs[tokenId]; + } + /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * diff --git a/test/token/ERC721/extensions/ERC721URIStorage.test.js b/test/token/ERC721/extensions/ERC721URIStorage.test.js index 60c80066c..048480d62 100644 --- a/test/token/ERC721/extensions/ERC721URIStorage.test.js +++ b/test/token/ERC721/extensions/ERC721URIStorage.test.js @@ -96,5 +96,11 @@ contract('ERC721URIStorage', function (accounts) { expect(await this.token.$_exists(firstTokenId)).to.equal(false); await expectRevert(this.token.tokenURI(firstTokenId), 'ERC721: invalid token ID'); }); + + it('returns the pure base URI', async function () { + await this.token.setBaseURI(baseURI); + + expect(await this.token.$_baseURI()).to.be.equal(baseURI); + }); }); });