目前 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 文件的依賴到一個文件。