目前 openzeppelin-contracts 的稳定版是 v2.5,截止到本文发布,最新的 Tag 为 v3.0.0-rc.0
以下是 token/ETC20 的文件列表:
IERC20.sol 是 interface 接口文件,不包含实现。
ERC20.sol 是对上面 interface 接口的标准实现。ERC20Detailed.sol 是对基础信息构造,有 name、symbol、decimals 属性。
ERC20Burnable, ERC20Capped, ERC20Mintable, ERC20Pausable 这几个实质所继承的父类都比较统一(ERC20.sol)。
可以看成是并列的几个扩展功能,非 EIP 标准的一部分。
ERC20Mintable 是允许外部铸币的一种机制,ERC20Capped 则是为了配合这种机制扣上一个总供应量的上限。
所以总共有两种铸币供应机制,一种是内部通过 ERC20._mint 方法,另一种是外部通过 ERC20Mintable.mint 方法。
SafeERC20.sol 是 library 库文件,对 ERC20.sol 中的方法进行了包装,方法名都加了一个 safe 前缀。
在合约中采用 `using SafeERC20 for ERC20;` 的方式引入,之后就可以像 `token.safeTransfer(...)` 这样使用安全的操作了。
TokenTimelock.sol 合约的功能是将 token 锁定指定时间,之后才可以进行转账交易。使用场景比如:允许顾问在一年之后才可以提取释放的 token。
详细用法参照 OpenZeppelin ERC20 部分的文档或者 API 进行。
实际在使用的时候,我们为了在一个文件中看到整个的方法,一般会用 truffle-flattener 合并 Solidity 文件的依赖到一个文件。