diff --git a/CHANGELOG.md b/CHANGELOG.md index 393bb199bf6..92a43883bf8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### New features: * `ERC20`: added internal `_approve(address owner, address spender, uint256 value)`, allowing derived contracts to set the allowance of arbitrary accounts. + * `ERC20Metadata`: added internal `_setTokenURI(string memory tokenURI)`. ### Improvements: * Upgraded the minimum compiler version to v0.5.2: this removes many Solidity warnings that were false positives. @@ -14,6 +15,7 @@ ### Bugfixes: ### Breaking changes: + * `TokenMetadata` (in drafts) has been renamed to `ERC20Metadata`. ## 2.1.2 (2019-17-01) * Removed most of the test suite from the npm package, except `PublicRole.behavior.js`, which may be useful to users testing their own `Roles`. diff --git a/contracts/drafts/ERC1046/TokenMetadata.sol b/contracts/drafts/ERC1046/ERC20Metadata.sol similarity index 62% rename from contracts/drafts/ERC1046/TokenMetadata.sol rename to contracts/drafts/ERC1046/ERC20Metadata.sol index de7aba0807b..14ae279dd38 100644 --- a/contracts/drafts/ERC1046/TokenMetadata.sol +++ b/contracts/drafts/ERC1046/ERC20Metadata.sol @@ -7,18 +7,18 @@ import "../../token/ERC20/IERC20.sol"; * @dev See https://eips.ethereum.org/EIPS/eip-1046 * @dev tokenURI must respond with a URI that implements https://eips.ethereum.org/EIPS/eip-1047 */ -contract ERC20TokenMetadata is IERC20 { - function tokenURI() external view returns (string memory); -} - -contract ERC20WithMetadata is ERC20TokenMetadata { +contract ERC20Metadata { string private _tokenURI; - constructor (string memory tokenURI) public { - _tokenURI = tokenURI; + constructor (string memory tokenURI_) public { + _setTokenURI(tokenURI_); } function tokenURI() external view returns (string memory) { return _tokenURI; } + + function _setTokenURI(string memory tokenURI_) internal { + _tokenURI = tokenURI_; + } } diff --git a/contracts/mocks/ERC20MetadataMock.sol b/contracts/mocks/ERC20MetadataMock.sol new file mode 100644 index 00000000000..d60a3cafdac --- /dev/null +++ b/contracts/mocks/ERC20MetadataMock.sol @@ -0,0 +1,14 @@ +pragma solidity ^0.5.2; + +import "../token/ERC20/ERC20.sol"; +import "../drafts/ERC1046/ERC20Metadata.sol"; + +contract ERC20MetadataMock is ERC20, ERC20Metadata { + constructor (string memory tokenURI) public ERC20Metadata(tokenURI) { + // solhint-disable-previous-line no-empty-blocks + } + + function setTokenURI(string memory tokenURI) public { + _setTokenURI(tokenURI); + } +} diff --git a/contracts/mocks/ERC20WithMetadataMock.sol b/contracts/mocks/ERC20WithMetadataMock.sol deleted file mode 100644 index 86bd81a7c8f..00000000000 --- a/contracts/mocks/ERC20WithMetadataMock.sol +++ /dev/null @@ -1,10 +0,0 @@ -pragma solidity ^0.5.2; - -import "../token/ERC20/ERC20.sol"; -import "../drafts/ERC1046/TokenMetadata.sol"; - -contract ERC20WithMetadataMock is ERC20, ERC20WithMetadata { - constructor (string memory tokenURI) public ERC20WithMetadata(tokenURI) { - // solhint-disable-previous-line no-empty-blocks - } -} diff --git a/test/drafts/ERC1046/ERC20Metadata.test.js b/test/drafts/ERC1046/ERC20Metadata.test.js new file mode 100644 index 00000000000..0f0ae49110a --- /dev/null +++ b/test/drafts/ERC1046/ERC20Metadata.test.js @@ -0,0 +1,23 @@ +require('openzeppelin-test-helpers'); + +const ERC20MetadataMock = artifacts.require('ERC20MetadataMock'); + +const metadataURI = 'https://example.com'; + +describe('ERC20Metadata', function () { + beforeEach(async function () { + this.token = await ERC20MetadataMock.new(metadataURI); + }); + + it('responds with the metadata', async function () { + (await this.token.tokenURI()).should.equal(metadataURI); + }); + + describe('setTokenURI', function () { + it('changes the original URI', async function () { + const newMetadataURI = 'https://betterexample.com'; + await this.token.setTokenURI(newMetadataURI); + (await this.token.tokenURI()).should.equal(newMetadataURI); + }); + }); +}); diff --git a/test/drafts/ERC1046/TokenMetadata.test.js b/test/drafts/ERC1046/TokenMetadata.test.js deleted file mode 100644 index 83eca7038b3..00000000000 --- a/test/drafts/ERC1046/TokenMetadata.test.js +++ /dev/null @@ -1,15 +0,0 @@ -require('openzeppelin-test-helpers'); - -const ERC20WithMetadataMock = artifacts.require('ERC20WithMetadataMock'); - -const metadataURI = 'https://example.com'; - -describe('ERC20WithMetadata', function () { - beforeEach(async function () { - this.token = await ERC20WithMetadataMock.new(metadataURI); - }); - - it('responds with the metadata', async function () { - (await this.token.tokenURI()).should.equal(metadataURI); - }); -});