SafeERC20库封装了ERC20的操作,使各操作执行失败时触发revert。因为标准IERC20的转账和授权等需通过一个bool返回值来表示操作是否成功,可能实现合约内部没有设置revert机制。有的ERC20合约的授权或转账的实现并无返回值(以太坊上的USDT合约),此时可通过本库与其交互。
ERC20PresetMinterPauser库是一种带mint和pause权限管理的ERC20实现,同时支持销毁和委托销毁的功能。当合约进入paused状态后,全部token的转移功能都将被停止。权限管理功能是直接继承AccessControlEnumerable库。
VestingWallet库可给指定的受益人按时间线性释放锁在合约内的Eth或Erc20 token。任何转移至本合约的token都必须遵循释放模型。开发者可通过重写vestedAmount(uint64)或vestedAmount(address,uint64)来自定义token释放模型。
vestedAmount(uint64)
vestedAmount(address,uint64)
TokenTimelock库是是一个锁币合约。它允许指定地址在某一时间点及之后取出全部锁存的代币,实现了一个代币时间锁的功能。
本文介绍了 ERC-20 token 的概念和使用场景,例如作为交易媒介、投票权和 staking。通过 OpenZeppelin Contracts 可以轻松创建 ERC-20 token 合约,并以一个游戏中的 Gold (GLD) 代币为例,展示了如何构建、部署和转账 ERC-20 token,还讨论了 decimals 字段在处理小数方面的作用。
本文介绍了 ERC-721 标准,用于表示非同质化代币(NFT)的所有权,每个代币都是独一无二的。文章提供了一个 GameItem 合约的示例,该合约使用 ERC721URIStorage 扩展来跟踪游戏中的物品,并包含如何创建新物品以及查询物品的所有者和元数据方法。
ERC20Burnable库是ERC20的拓展。该库允许用户销毁自己和给自己授权的人名下的token。
ERC20Capped库是ERC20的拓展。该库设置了ERC20发行量的上限。
本文介绍了OpenZeppelin Subgraphs,它是一组用于轻松索引OpenZeppelin合约活动的模块。通过组合不同的模块和数据源,用户可以构建复杂的查询,以获取链上活动的信息,而无需编写大部分索引逻辑。文章还提供了关于如何构建manifest和组装schema的指导,并列出了可用的模块,如erc20、erc721、ownable等。
ERC1967Upgrade库实现了基于ERC1967标准(代理合约的slot分布)的slots读写函数,并在对应slot更新时emit出标准中相应的event。对于各种可升级合约和代理合约的实现而言,本库的作用举足轻重。
本文介绍了如何使用@amxx/graphprotocol-utils包中的graph-compile工具,为应用程序自动生成定制的 schema 和 manifest 文件。文章通过一个配置示例,演示了如何索引以太坊主网上的多个合约,并使用 OpenZeppelin Subgraphs 提供的模块来简化开发流程,最后介绍了如何使用graph-cli工具部署 subgraph。
@amxx/graphprotocol-utils
graph-compile
graph-cli
ERC1967Proxy库实现了一个基于ERC1967标准的代理合约。通过改变存储于ERC1967标准规定的_IMPLEMENTATION_SLOT号slot中的代理合约地址,代理合约便实现了合约逻辑可升级的功能。
本文介绍了 ERC20 token 合约,它可以跟踪同质化代币,即任何一个代币与任何其他代币完全相等。文章通过一个 GLDToken 的示例,展示了如何使用 OpenZeppelin Contracts 创建自己的 ERC20 token 合约,并讨论了 decimals 字段的用途,以及如何使用 preset ERC20 合约。
ReentrancyGuard库是一个用来防御函数重入的工具库。函数被修饰器nonReentrant修饰可确保其无法被嵌套(重入)调用。本库的代码逻辑上只实现了一个重入锁,所以被nonReentrant修饰的函数之间也是无法相互调用的。
nonReentrant
本文档介绍了 OpenZeppelin Contracts 的发布计划和 API 稳定性保证。OpenZeppelin Contracts 遵循语义化版本控制,旨在每个月发布一个新的小版本,每几个月或一年发布一个新的主版本。API 稳定性意味着如果你的项目今天可以正常工作,它将继续这样做。新的合约和功能将在小版本中添加,但仅以向后兼容的方式添加。