跳到主要内容

openzeppelin合约明细

· 阅读需 8 分钟

本文主要介绍 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.sendermsg.data

  • Counters.sol 提供递增、递减或重置的计数器

  • Create2.sol 封装了 create2的常用操作,包括部署合约,计算合约地址。

  • Multicall.sol 批量调用相关

  • StorageSlot.sol 存储槽,用在可升级合约时,避免存储冲突

  • Strings.sol 字符串工具函数,提供了 将 uint 装换为 stringhexString的功能

  • 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 用于管理 uint256bool 的映射

    • DoubleEndedQueue.sol 双端队列算法

    • EnumerableSet.sol Set类型模拟, 并且是可枚举的,用来存储不重复的 bytes32addressuint 类型的数据

    • 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 存储 tokenURI
      • IERC1155MetadataURI.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 实现 ERC4626
      • IERC20Metadata.sol ERC20 基础数据接口,包括 namesymboldecimals
    • presets
      • ERC20PresetFixedSupply.sol 示例代码: 继承自ERC20Burnable, 转移初始供应到 owner
      • ERC20PresetMinterPauser.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 版税标准扩展 ERC721
      • ERC721URIStorage.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