1、ERC20
ERC20
是以太坊上的代币标准,来自2015年11月V神参与的EIP20。它实现了代币转账的基本逻辑:
- 账户余额
- 转账
- 授权转账
- 代币总供给
- 代币信息(可选):名称,代号,小数位数
IERC20
是ERC20
代币标准的接口合约,规定了ERC20
代币需要实现的函数和事件。
之所以需要定义接口,是因为有了规范后,就存在所有的ERC20
代币都通用的函数名称,输入参数,输出参数。 在接口函数中,只需要定义函数名称,输入参数,输出参数,并不关心函数内部如何实现。
由此,函数就分为内部和外部两个内容,一个重点是实现,另一个是对外接口,约定共同数据。 这就是为什么需要ERC20.sol
和IERC20.sol
两个文件实现一个合约。
IERC20
定义了2
个事件:Transfer
事件和Approval
事件,分别在转账和授权时被释放
/**
* @dev 释放条件:当 `value` 单位的货币从账户 (`from`) 转账到另一账户 (`to`)时.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev 释放条件:当 `value` 单位的货币从账户 (`owner`) 授权给另一账户 (`spender`)时.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
IERC20
定义了6
个函数,提供了转移代币的基本功能,并允许代币获得批准,以便其他链上第三方使用。
totalSupply()
返回代币总供给-
/** * @dev 返回代币总供给. */ function totalSupply() external view returns (uint256);
balanceOf()
返回账户余额-
/** * @dev 返回账户`account`所持有的代币数. */ function balanceOf(address account) external view returns (uint256);
transfer()
转账