本文主要介绍 openzepplin@4.7.0 合约库的各个合约的功能
目录
-
access权限控制 -
crosschain -
governance -
metatx -
finance金融相关 -
proxy可升级合约 -
security安全性相关 -
token代币标准 -
utils提供工具函数 -
vendor
utils
工具函数
-
Address.sol地址相关工具函数,包括了判断是否和合约地址、转账、调用合约函数等 -
Arrays.sol数组相关的工具函数,只有一个功能:二分法搜索排序后的array,并返回第一个包含大于或等于element值的索引 -
Base64.solbase64的加密 -
Checkpoints.sol用于检查不同时间点的数值变化 - TODO -
Context.sol提供关于当前执行环境的信息,包括msg.sender和msg.data -
Counters.sol提供递增、递减或重置的计数器 -
Create2.sol封装了create2的常用操作,包括部署合约,计算合约地址。 -
Multicall.sol批量调用相关 -
StorageSlot.sol存储槽,用在可升级合约时,避免存储冲突 -
Strings.sol字符串工具函数,提供了 将uint装换为string或hexString的功能 -
Timers.sol时间相关的函数,本质是存储了deadline时间,并以此衍生出的函数,包括是否截止、是否开始、是否过期等。 -
cryptography
ECDSA.sol椭圆曲线数字签名算法操作,用来验证一个消息是由一个给定地址的私钥的持有者签署的MerkleProof.sol默克尔证明算法。SignatureChecker.sol签名验证
-
escrow
Escrow.sol用于托管合约,主要有两个功能 存入资金deposit和 提现withdrawConditionalEscrow.sol继承自Escrow.sol添加了条件,只有withdrawalAllowed函数返回true才能提现RefundEscrow.sol为单个受益人保管资金的托管,可由多人存入。
-
introspection
-
IERC165.solERC165 标准接口 -
ERC165.solERC165 实现 -
ERC165Checker.sol检测合约地址是否支持 IERC165 接口 -
ERC165Storage.sol基于存储的 IERC165 接口的实现。 -
ERC1820Implementer.sol -
IERC1820Implementer.sol -
IERC1820Registry.sol
-
-
math
-
Math.sol数学相关的工具库,提供的功能有: 两个数的最大最小值、两个数的均值、开根号等 -
SafeCast.sol处理uintXX/intXX的类型转换 -
SafeMath.sol算术相关的工具库,包括相加、相减、相乘、相除、取余等, 溢出时报错 -
SignedMath.sol -
SignedSafeMath.sol
-
-
structs
-
BitMaps.sol用于管理uint256到bool的映射 -
DoubleEndedQueue.sol双端队列算法 -
EnumerableSet.solSet类型模拟, 并且是可枚举的,用来存储不重复的bytes32、address、uint类型的数据 -
EnumerableMap.sol可枚举的mapping,增强了mapping的功能,包括移除元素,判断包含,获取长度等
-
access
AccessControl.sol提供了一个一般的基于角色的访问控制机制AccessControlCrossChain.sol支持跨链访问管理AccessControlEnumerable.sol可枚举每个角色的成员的权限控制Ownable.sol授权合约所有者对特定功能的访问
crosschain
- amb
CrossChainEnabledAMB.solLibAMB.sol
- arbitrum
CrossChainEnabledArbitrumL1.solCrossChainEnabledArbitrumL2.solLibArbitrumL1.solLibArbitrumL2.sol
- polygon
- CrossChainEnabledPolygonChild.sol
- optimism
- CrossChainEnabledOptimism.sol
- LibOptimism.sol
- CrossChainEnabled.sol
- errors.sol
finance
PaymentSplitter.sol允许在一组账户之间分割 eth 付款VestingWallet.sol线性释放 token 给某个受益人
governance
IGovernor.soldao 类Governor.solTimelockController.solcompatibilityGovernorCompatibilityBravo.solIGovernorCompatibilityBravo.sol
- extensions
GovernorCountingSimple.solGovernorPreventLateQuorum.solGovernorProposalThreshold.solGovernorSettings.solGovernorTimelockCompound.solGovernorTimelockControl.solGovernorVotes.solGovernorVotesComp.solGovernorVotesQuorumFraction.solIGovernorTimelock.sol
- utils
IVotes.solVotes.sol
##metatx
ERC2771Context.sol支持 ERC2771 的上下文MinimalForwarder.sol简单的最小转发器
proxy
Proxy.sol代理合约,用于可升级合约中Clones.soleip-1167 标准,低成本的复制合约- beacon
BeaconProxy.sol管理代理合约的合约IBeacon.solBeaconProxy接口UpgradeableBeacon.sol内置权限的可升级 beacon 合约
- ERC1967
ERC1967Proxy.solerc-1967 标准代理合约实现ERC1967Upgrade.sol控制升级相关方法
- transparent
ProxyAdmin.sol控制合约升级以及合约升级的权限控制TransparentUpgradeableProxy.sol由 admin 控制的透明代理升级模式
- utils
Initializable.sol可升级合约的初始化方法,通常由代理合约调用UUPSUpgradeable.solUUPS 代理升级模式
security
Pausable.sol通过变量_paused来设置是否暂停PullPayment.sol拉动式支付策略,合约不与用户账户直接互动,而是与托管合约交互,由托管合约与用户账户交互,可以防止重入。ReentrancyGuard.sol提供了防止重入攻击的modifier
token
- common
ERC2981.solerc-2198 实现,兼容 ERC721 和 ERC1155 中关于 NFT 版税相关
- ERC1155
ERC1155.solerc-1155 标准实现IERC1155.solerc-1155 标准接口IERC1155Receiver.sol定义接收到token相关的接口- extensions
ERC1155Burnable.sol允许代币持有者销毁代币ERC1155Pausable.sol暂停代币转移,铸造和燃烧ERC1155Supply.sol增加了对每个 ID 的代币总供应量ERC1155URIStorage.sol存储 tokenURIIERC1155MetadataURI.solmetadata 接口
- presets
ERC1155PresetMinterPauser.sol示例
- utils
ERC1155Holder.sol实现IERC1155Receiver接口ERC1155Receiver.sol
- ERC20
IERC20.solerc-20 标准接口ERC20.solerc-20 标准实现- extensions
ERC20Burnable.sol允许代币持有者销毁代币ERC20Capped.sol为代币的供应增加了一个上限ERC20FlashMint.sol添加flashLoan方法,它在 token 级别提供闪电贷支持ERC20Pausable.sol暂停代币转移,铸造和燃烧ERC20Snapshot.sol快照被创建时,记录余额和总供应量ERC20Votes.sol保存每个账号的投票的历史ERC20VotesComp.sol支持coupound投票ERC20Wrapper.sol存储基础代币并收到对应数量的包装代币ERC4626.sol实现 ERC4626IERC20Metadata.solERC20 基础数据接口,包括name、symbol、decimals
- presets
ERC20PresetFixedSupply.sol示例代码: 继承自ERC20Burnable, 转移初始供应到 ownerERC20PresetMinterPauser.sol示例代码:增加可暂停和可 mint 的角色,并对函数做出限制
- utils
SafeERC20.sol对 ERC20 的操作封装,添加更新细致的错误处理TokenTimelock.sol到期转移代币到受益人
- ERC721
IERC721.solerc-721 标准接口ERC721.solerc-721 实现IERC721Receiver.sol定义接收到token相关的接口- extensions
ERC721Burnable.sol允许代币所有者或授权人销毁代币ERC721Enumerable.sol增加了代币的可枚举性ERC721Pausable.sol暂停代币转移,铸造和燃烧ERC721Royalty.sol用 ERC2981 NFT 版税标准扩展 ERC721ERC721URIStorage.soltokenId对应的tokenURI管理draft-ERC721Votes.sol
- presets
ERC721PresetMinterPauserAutoId.sol示例代码
- utils
ERC721Holder.sol实现IERC721Receiver接口
- ERC777
IERC777.solERC777 标准接口ERC777.solERC777 实现IERC777Recipient.sol定义 ERC777TokensRecipient 标准的接口IERC777Sender.sol定义 ERC777TokensSender 标准的接口- presets
ERC777PresetFixedSupply.sol示例
vendor
- amb
- IAMB.sol
- arbitrum
- IArbSys.sol
- IBridge.sol
- IInbox.sol
- IMessageProvider.sol
- IOutbox.sol
- compound
- ICompoundTimelock.sol
- optimism
- ICrossDomainMessenger.sol
- polygon
- IFxMessageProcessor.sol