Skip to main content

ERC-20 Standard


IERC20Metadata

IERC20Metadata.solInterface for IERC20Metadata Fungible Tokens
1interface IERC20Metadata is IERC20 { {
2 function name() external view returns (string memory);
3 function symbol() external view returns (string memory);
4 function decimals() external view returns (uint8);
5}

IERC-20

IERC-20.solInterface for ERC-20 Fungible Tokens
1interface IERC20 {
2 event Transfer(address indexed from, address indexed to, uint256 value);
3 event Approval(address indexed owner, address indexed spender, uint256 value);
4 function totalSupply() external view returns (uint256);
5 function balanceOf(address account) external view returns (uint256);
6 function transfer(address to, uint256 value) external returns (bool);
7 function allowance(address owner, address spender) external view returns (uint256);
8 function approve(address spender, uint256 value) external returns (bool);
9 function transferFrom(address from, address to, uint256 value) external returns (bool);
10}

ERC-20 Functions

The different implementation correspond to the patterns (depending on where they have the supply)

ERC-20.solERC-20 Fungible Tokens
1interface IERC20 {
2 ...
3 function name() external view returns (string memory);
4 function symbol() external view returns (string memory);
5 function decimals() external view returns (uint8);
6 function totalSupply() external view returns (uint256);
7 function balanceOf(address account) external view returns (uint256);
8 function transfer(address to, uint256 value) external returns (bool);
9 function allowance(address owner, address spender) external view returns (uint256);
10 function approve(address spender, uint256 value) external returns (bool);
11 function transferFrom(address from, address to, uint256 value) external returns (bool);
12 event Transfer(address indexed from, address indexed to, uint256 value);
13 event Approval(address indexed owner, address indexed spender, uint256 value);
14}

ERC-20 Storage

ERC-20.solERC-20 Fungible Tokens
1interface IERC20 {
2 string private _name;
3 string private _symbol;
4 uint256 private _totalSupply;
5 mapping(address account => uint256) private _balances;
6 mapping(address account => mapping(address spender => uint256)) private _allowances;
7 ...
8}