Jelajahi Sumber

feat: initial implementation of ERC1046 (#933)

* feat: initial implementation of ERC1046
Matt Condon 7 tahun lalu
induk
melakukan
f18c3bc438

+ 13 - 0
contracts/mocks/ERC20WithMetadataMock.sol

@@ -0,0 +1,13 @@
+pragma solidity ^0.4.21;
+
+import "../token/ERC20/StandardToken.sol";
+import "../proposals/ERC1046/TokenMetadata.sol";
+
+
+contract ERC20WithMetadataMock is StandardToken, ERC20WithMetadata {
+  function ERC20WithMetadataMock(string _tokenURI)
+    ERC20WithMetadata(_tokenURI)
+    public
+  {
+  }
+}

+ 0 - 0
contracts/proposals/.gitkeep


+ 29 - 0
contracts/proposals/ERC1046/TokenMetadata.sol

@@ -0,0 +1,29 @@
+pragma solidity ^0.4.21;
+
+import "../../token/ERC20/ERC20.sol";
+
+
+/**
+ * @title ERC-1047 Token Metadata
+ * @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
+ * @dev TODO - update https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/token/ERC721/ERC721.sol#L17 when 1046 is finalized
+ */
+contract ERC20TokenMetadata is ERC20 {
+  function tokenURI() external view returns (string);
+}
+
+
+contract ERC20WithMetadata is ERC20TokenMetadata {
+  string private tokenURI_ = "";
+
+  function ERC20WithMetadata(string _tokenURI)
+    public
+  {
+    tokenURI_ = _tokenURI;
+  }
+
+  function tokenURI() external view returns (string) {
+    return tokenURI_;
+  }
+}

+ 18 - 0
test/proposals/ERC1046/TokenMetadata.test.js

@@ -0,0 +1,18 @@
+const ERC20WithMetadata = artifacts.require('ERC20WithMetadataMock');
+
+require('chai')
+  .use(require('chai-as-promised'))
+  .should();
+
+const metadataURI = 'https://example.com';
+
+describe('ERC20WithMetadata', function () {
+  before(async function () {
+    this.token = await ERC20WithMetadata.new(metadataURI);
+  });
+
+  it('responds with the metadata', async function () {
+    const got = await this.token.tokenURI();
+    got.should.eq(metadataURI);
+  });
+});