VestingWallet库可给指定的受益人按时间线性释放锁在合约内的Eth或Erc20 token。任何转移至本合约的token都必须遵循释放模型。开发者可通过重写vestedAmount(uint64)或vestedAmount(address,uint64)来自定义token释放模型。
vestedAmount(uint64)
vestedAmount(address,uint64)
TokenTimelock库是是一个锁币合约。它允许指定地址在某一时间点及之后取出全部锁存的代币,实现了一个代币时间锁的功能。
ERC20Burnable库是ERC20的拓展。该库允许用户销毁自己和给自己授权的人名下的token。
ERC20Capped库是ERC20的拓展。该库设置了ERC20发行量的上限。
ERC1967Upgrade库实现了基于ERC1967标准(代理合约的slot分布)的slots读写函数,并在对应slot更新时emit出标准中相应的event。对于各种可升级合约和代理合约的实现而言,本库的作用举足轻重。
ERC1967Proxy库实现了一个基于ERC1967标准的代理合约。通过改变存储于ERC1967标准规定的_IMPLEMENTATION_SLOT号slot中的代理合约地址,代理合约便实现了合约逻辑可升级的功能。
ReentrancyGuard库是一个用来防御函数重入的工具库。函数被修饰器nonReentrant修饰可确保其无法被嵌套(重入)调用。本库的代码逻辑上只实现了一个重入锁,所以被nonReentrant修饰的函数之间也是无法相互调用的。
nonReentrant
CodeHawks与OpenZeppelin、Guardian Audits和Hashlock合作,推出联合审计项目,旨在通过多阶段审计增强协议的安全性。该项目结合了私有审计的深度和竞争性安全审查的广度,通过三个阶段的审计流程,确保每个协议的代码经过全面审查,有效发现安全漏洞。
ERC20Permit库是ERC20的拓展。本库通过permit方法允许调用者携带owner的链下签名来进行token的授权。这样,ERC20 token的owner不再需要自己调用approve方法进行授权,进而实现了owner的EOA账户无eth也可完成授权操作。
ERC20Votes库是一个具备类Compound委托投票功能的ERC20拓展库。本库的发行量上限是2^224-1,比Compound更通用。合约内部使用快照结构Checkpoint来记录每个投票目标地址的总票数,每个token持有者可以采用直接或者离线签名两种方式委托投票给任何地址。
PullPayment库是对Openzeppelin中Escrow库的一种封装。从安全角度看,PullPayment是一对多发送eth的最佳解决方案。它可以防止收款人阻塞发送eth的行为并消除重入问题。
Pausable库实现了功能函数紧急关停机制,可以继承该合约并使管理员账户来调控合约的开关。合约内有两个修饰器whenNotPaused和whenPaused,可以根据业务需求将其修饰在对应的函数上来进行开放或关停状态下的访问限制。
whenNotPaused
whenPaused
Initializable库用于开发可升级合约或代理合约背后的逻辑合约。由于代理合约无法执行constructor函数,通常是将该函数逻辑放到一个external函数中(称为initialize函数)。本库可确保initializer函数全局只能被调用一次。
constructor
ERC20Pausable库是ERC20的拓展。该库提供了可暂停的transfer、mint及burn功能。需要注意的是:ERC20Pausable库并没有提供切换暂停状态的函数,需要开发人员自行开发——同时需要注意切换暂停状态的权限问题。