소스 검색

Add IERC20Metadata with name, symbol and decimals (#2561)

Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
Hadrien Croubois 4 년 전
부모
커밋
b8ab763581
4개의 변경된 파일37개의 추가작업 그리고 4개의 파일을 삭제
  1. 4 0
      CHANGELOG.md
  2. 5 4
      contracts/token/ERC20/ERC20.sol
  3. 3 0
      contracts/token/ERC20/README.adoc
  4. 25 0
      contracts/token/ERC20/extensions/IERC20Metadata.sol

+ 4 - 0
CHANGELOG.md

@@ -1,5 +1,9 @@
 # Changelog
 
+## Unreleased
+
+ * `IERC20Metadata`: Add a new extended interface that includes the optional `name()`, `symbol()` and `decimals()` functions. ([#2561](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2561))
+
 ## Unreleased
 
  * Now targeting the 0.8.x line of Solidity compilers. For 0.6.x (resp 0.7.x) support, use version 3.4.0 (resp 3.4.0-solc-0.7) of OpenZeppelin.

+ 5 - 4
contracts/token/ERC20/ERC20.sol

@@ -3,6 +3,7 @@
 pragma solidity ^0.8.0;
 
 import "./IERC20.sol";
+import "./extensions/IERC20Metadata.sol";
 import "../../utils/Context.sol";
 
 /**
@@ -29,7 +30,7 @@ import "../../utils/Context.sol";
  * functions have been added to mitigate the well-known issues around setting
  * allowances. See {IERC20-approve}.
  */
-contract ERC20 is Context, IERC20 {
+contract ERC20 is Context, IERC20, IERC20Metadata {
     mapping (address => uint256) private _balances;
 
     mapping (address => mapping (address => uint256)) private _allowances;
@@ -56,7 +57,7 @@ contract ERC20 is Context, IERC20 {
     /**
      * @dev Returns the name of the token.
      */
-    function name() public view virtual returns (string memory) {
+    function name() public view virtual override returns (string memory) {
         return _name;
     }
 
@@ -64,7 +65,7 @@ contract ERC20 is Context, IERC20 {
      * @dev Returns the symbol of the token, usually a shorter version of the
      * name.
      */
-    function symbol() public view virtual returns (string memory) {
+    function symbol() public view virtual override returns (string memory) {
         return _symbol;
     }
 
@@ -81,7 +82,7 @@ contract ERC20 is Context, IERC20 {
      * no way affects any of the arithmetic of the contract, including
      * {IERC20-balanceOf} and {IERC20-transfer}.
      */
-    function decimals() public view virtual returns (uint8) {
+    function decimals() public view virtual override returns (uint8) {
         return 18;
     }
 

+ 3 - 0
contracts/token/ERC20/README.adoc

@@ -10,6 +10,7 @@ TIP: For an overview of ERC20 tokens and a walk through on how to create a token
 There a few core contracts that implement the behavior specified in the EIP:
 
 * {IERC20}: the interface all ERC20 implementations should conform to.
+* {IERC20Metadata}: the extended ERC20 interface including the <<ERC20-name,`name`>>, <<ERC20-symbol,`symbol`>> and <<ERC20-decimals,`decimals`>> functions.
 * {ERC20}: the implementation of the ERC20 interface, including the <<ERC20-name,`name`>>, <<ERC20-symbol,`symbol`>> and <<ERC20-decimals,`decimals`>> optional standard extension to the base interface.
 
 Additionally there are multiple custom extensions, including:
@@ -36,6 +37,8 @@ NOTE: This core set of contracts is designed to be unopinionated, allowing devel
 
 {{IERC20}}
 
+{{IERC20Metadata}}
+
 {{ERC20}}
 
 == Extensions

+ 25 - 0
contracts/token/ERC20/extensions/IERC20Metadata.sol

@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../IERC20.sol";
+
+/**
+ * @dev Interface for the optional metadata functions from the ERC20 standard.
+ */
+interface IERC20Metadata is IERC20 {
+    /**
+     * @dev Returns the name of the token.
+     */
+    function name() external view returns (string memory);
+
+    /**
+     * @dev Returns the symbol of the token.
+     */
+    function symbol() external view returns (string memory);
+
+    /**
+     * @dev Returns the decimals places of the token.
+     */
+    function decimals() external view returns (uint8);
+}