本文主要介绍 openzepplin@4.7.0
合约库的各个合约的功能
目录
-
access
权限控制 -
crosschain
-
governance
-
metatx
-
finance
金融相关 -
proxy
可升级合约 -
security
安全性相关 -
token
代币标准 -
utils
提供工具函数 -
vendor
utils
工具函数
-
Address.sol
地址相关工具函数,包括了判断是否和合约地址、转账、调用合约函数等 -
Arrays.sol
数组相关的工具函数,只有一个功能:二分法搜索排序后的array
,并返回第一个包含大于或等于element
值的索引 -
Base64.sol
base64
的加密 -
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
和 提现withdraw
ConditionalEscrow.sol
继承自Escrow.sol
添加了条件,只有withdrawalAllowed
函数返回true
才能提现RefundEscrow.sol
为单个受益人保管资金的托管,可由多人存入。
-
introspection
-
IERC165.sol
ERC165 标准接口 -
ERC165.sol
ERC165 实现 -
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.sol
Set
类型模拟, 并且是可枚举的,用来存储不重复的bytes32
、address
、uint
类型的数据 -
EnumerableMap.sol
可枚举的mapping
,增强了mapping
的功能,包括移除元素,判断包含,获取长度等
-
access
AccessControl.sol
提供了一个一般的基于角色的访问控制机制AccessControlCrossChain.sol
支持跨链访问管理AccessControlEnumerable.sol
可枚举每个角色的成员的权限控制Ownable.sol
授权合约所有者对特定功能的访问
crosschain
- amb
CrossChainEnabledAMB.sol
LibAMB.sol
- arbitrum
CrossChainEnabledArbitrumL1.sol
CrossChainEnabledArbitrumL2.sol
LibArbitrumL1.sol
LibArbitrumL2.sol
- polygon
- CrossChainEnabledPolygonChild.sol
- optimism
- CrossChainEnabledOptimism.sol
- LibOptimism.sol
- CrossChainEnabled.sol
- errors.sol
finance
PaymentSplitter.sol
允许在一组账户之间分割 eth 付款VestingWallet.sol
线性释放 token 给某个受益人
governance
IGovernor.sol
dao 类Governor.sol
TimelockController.sol
compatibility
GovernorCompatibilityBravo.sol
IGovernorCompatibilityBravo.sol
- extensions
GovernorCountingSimple.sol
GovernorPreventLateQuorum.sol
GovernorProposalThreshold.sol
GovernorSettings.sol
GovernorTimelockCompound.sol
GovernorTimelockControl.sol
GovernorVotes.sol
GovernorVotesComp.sol
GovernorVotesQuorumFraction.sol
IGovernorTimelock.sol
- utils
IVotes.sol
Votes.sol
##metatx
ERC2771Context.sol
支持 ERC2771 的上下文MinimalForwarder.sol
简单的最小转发器
proxy
Proxy.sol
代理合约,用于可升级合约中Clones.sol
eip-1167 标准,低成本的复制合约- beacon
BeaconProxy.sol
管理代理合约的合约IBeacon.sol
BeaconProxy
接口UpgradeableBeacon.sol
内置权限的可升级 beacon 合约
- ERC1967
ERC1967Proxy.sol
erc-1967 标准代理合约实现ERC1967Upgrade.sol
控制升级相关方法
- transparent
ProxyAdmin.sol
控制合约升级以及合约升级的权限控制TransparentUpgradeableProxy.sol
由 admin 控制的透明代理升级模式
- utils
Initializable.sol
可升级合约的初始化方法,通常由代理合约调用UUPSUpgradeable.sol
UUPS 代理升级模式
security
Pausable.sol
通过变量_paused
来设置是否暂停PullPayment.sol
拉动式支付策略,合约不与用户账户直接互动,而是与托管合约交互,由托管合约与用户账户交互,可以防止重入。ReentrancyGuard.sol
提供了防止重入攻击的modifier
token
- common
ERC2981.sol
erc-2198 实现,兼容 ERC721 和 ERC1155 中关于 NFT 版税相关
- ERC1155
ERC1155.sol
erc-1155 标准实现IERC1155.sol
erc-1155 标准接口IERC1155Receiver.sol
定义接收到token
相关的接口- extensions
ERC1155Burnable.sol
允许代币持有者销毁代币ERC1155Pausable.sol
暂停代币转移,铸造和燃烧ERC1155Supply.sol
增加了对每个 ID 的代币总供应量ERC1155URIStorage.sol
存储 tokenURIIERC1155MetadataURI.sol
metadata 接口
- presets
ERC1155PresetMinterPauser.sol
示例
- utils
ERC1155Holder.sol
实现IERC1155Receiver
接口ERC1155Receiver.sol
- ERC20
IERC20.sol
erc-20 标准接口ERC20.sol
erc-20 标准实现- extensions
ERC20Burnable.sol
允许代币持有者销毁代币ERC20Capped.sol
为代币的供应增加了一个上限ERC20FlashMint.sol
添加flashLoan
方法,它在 token 级别提供闪电贷支持ERC20Pausable.sol
暂停代币转移,铸造和燃烧ERC20Snapshot.sol
快照被创建时,记录余额和总供应量ERC20Votes.sol
保存每个账号的投票的历史ERC20VotesComp.sol
支持coupound
投票ERC20Wrapper.sol
存储基础代币并收到对应数量的包装代币ERC4626.sol
实现 ERC4626IERC20Metadata.sol
ERC20 基础数据接口,包括name
、symbol
、decimals
- presets
ERC20PresetFixedSupply.sol
示例代码: 继承自ERC20Burnable
, 转移初始供应到 ownerERC20PresetMinterPauser.sol
示例代码:增加可暂停和可 mint 的角色,并对函数做出限制
- utils
SafeERC20.sol
对 ERC20 的操作封装,添加更新细致的错误处理TokenTimelock.sol
到期转移代币到受益人
- ERC721
IERC721.sol
erc-721 标准接口ERC721.sol
erc-721 实现IERC721Receiver.sol
定义接收到token
相关的接口- extensions
ERC721Burnable.sol
允许代币所有者或授权人销毁代币ERC721Enumerable.sol
增加了代币的可枚举性ERC721Pausable.sol
暂停代币转移,铸造和燃烧ERC721Royalty.sol
用 ERC2981 NFT 版税标准扩展 ERC721ERC721URIStorage.sol
tokenId
对应的tokenURI
管理draft-ERC721Votes.sol
- presets
ERC721PresetMinterPauserAutoId.sol
示例代码
- utils
ERC721Holder.sol
实现IERC721Receiver
接口
- ERC777
IERC777.sol
ERC777 标准接口ERC777.sol
ERC777 实现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