接口 - OpenZeppelin 文档

该⽂档介绍了openzeppelin 合约库中提供的各种标准化的智能合约接口,包括 ERC20、ERC721、ERC1155 等代币标准,以及 ERC165 接口检测、ERC1820 注册表、ERC2981 NFT Royalty标准等。⽂档详细列出了每个接⼝的函数、事件和错误类型,并提供了相关链接。

接口

https://docs.openzeppelin.com/contracts/api/interfaces 上查看此文档效果更佳

标准化接口列表

这些接口可以作为 .sol 文件使用,也可以作为编译器 .json ABI 文件使用(通过 npm 包)。这些接口对于与实现它们的第三方合约进行交互非常有用。

详细的 ABI

IERC20Errors

import "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";

标准 ERC-20 错误 ERC-6093 中为 ERC-20 token 定义的自定义错误的接口。

错误

ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed) 错误

表示与 sender 的当前 balance 相关的错误。用于转账。

ERC20InvalidSender(address sender) 错误

表示 token sender 失败。用于转账。

ERC20InvalidReceiver(address receiver) 错误

表示 token receiver 失败。用于转账。

ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed) 错误

表示 spenderallowance 失败。用于转账。

ERC20InvalidApprover(address approver) 错误

表示要批准的 token 的 approver 失败。用于批准。

ERC20InvalidSpender(address spender) 错误

表示要批准的 spender 失败。用于批准。

IERC721Errors

import "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";

标准 ERC-721 错误 ERC-6093 中为 ERC-721 token 定义的自定义错误的接口。

错误

ERC721InvalidOwner(address owner) 错误

表示地址不能是所有者。 例如,address(0) 是 ERC-20 中禁止的所有者。 用于余额查询。

ERC721NonexistentToken(uint256 tokenId) 错误

表示 owner 为零地址的 tokenId

ERC721IncorrectOwner(address sender, uint256 tokenId, address owner) 错误

表示与特定 token 的所有权相关的错误。 用于转账。

ERC721InvalidSender(address sender) 错误

表示 token sender 失败。用于转账。

ERC721InvalidReceiver(address receiver) 错误

表示 token receiver 失败。用于转账。

ERC721InsufficientApproval(address operator, uint256 tokenId) 错误

表示 operator 的批准失败。用于转账。

ERC721InvalidApprover(address approver) 错误

表示要批准的 token 的 approver 失败。用于批准。

ERC721InvalidOperator(address operator) 错误

表示要批准的 operator 失败。用于批准。

IERC1155Errors

import "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";

标准 ERC-1155 错误 ERC-6093 中为 ERC-1155 token 定义的自定义错误的接口。

错误

ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId) 错误

表示与 sender 的当前 balance 相关的错误。用于转账。

ERC1155InvalidSender(address sender) 错误

表示 token sender 失败。用于转账。

ERC1155InvalidReceiver(address receiver) 错误

表示 token receiver 失败。用于转账。

ERC1155MissingApprovalForAll(address operator, address owner) 错误

表示 operator 的批准失败。用于转账。

ERC1155InvalidApprover(address approver) 错误

表示要批准的 token 的 approver 失败。用于批准。

ERC1155InvalidOperator(address operator) 错误

表示要批准的 operator 失败。用于批准。

ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength) 错误

表示在 safeBatchTransferFrom 操作中,id 和 value 之间的数组长度不匹配。 用于批量转账。

IERC1271

import "@openzeppelin/contracts/interfaces/IERC1271.sol";

ERC-1271 标准签名验证方法的接口,如 ERC-1271 中定义。

函数

isValidSignature(bytes32 hash, bytes signature) → bytes4 magicValue external

应返回提供的签名对于提供的数据是否有效

IERC1363

import "@openzeppelin/contracts/interfaces/IERC1363.sol";

ERC-1363 标准的接口,如 ERC-1363 中定义。

定义了 ERC-20 token 的扩展接口,该接口支持在单笔交易中,在 transfertransferFrom 后执行接收合约上的代码,或在 approve 后在消费合约上执行代码。

函数

IERC165

IERC20

事件

IERC20

transferAndCall(address to, uint256 value) → bool external

value 数量的 token 从调用者的帐户移动到 to, 然后在 to 上调用 IERC1363Receiver.onTransferReceived

transferAndCall(address to, uint256 value, bytes data) → bool external

value 数量的 token 从调用者的帐户移动到 to, 然后在 to 上调用 IERC1363Receiver.onTransferReceived

transferFromAndCall(address from, address to, uint256 value) → bool external

使用授权机制将 value 数量的 token 从 from 移动到 to, 然后在 to 上调用 IERC1363Receiver.onTransferReceived

transferFromAndCall(address from, address to, uint256 value, bytes data) → bool external

使用授权机制将 value 数量的 token 从 from 移动到 to, 然后在 to 上调用 IERC1363Receiver.onTransferReceived

approveAndCall(address spender, uint256 value) → bool external

value 数量的 token 设置为 spender 对 调用者的 token 的授权,然后在 spender 上调用 IERC1363Spender.onApprovalReceived

approveAndCall(address spender, uint256 value, bytes data) → bool external

value 数量的 token 设置为 spender 对 调用者的 token 的授权,然后在 spender 上调用 IERC1363Spender.onApprovalReceived

IERC1363Receiver

import "@openzeppelin/contracts/interfaces/IERC1363Receiver.sol";

任何想要支持来自 ERC-1363 token 合约的 transferAndCalltransferFromAndCall 的合约的接口。

函数

onTransferReceived(address operator, address from, uint256 value, bytes data) → bytes4 external

每当 ERC-1363 token 通过 operatorfrom 通过 transferAndCalltransferFromAndCall 转移到此合约时, 将调用此函数。

要接受转账,必须返回<br>bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))<br>(即 0x88a7ca5c,或其自身函数选择器)。

IERC1363Spender

import "@openzeppelin/contracts/interfaces/IERC1363Spender.sol";

任何想要支持来自 ERC-1363 token 合约的 approveAndCall 的合约的接口。

函数

onApprovalReceived(address owner, uint256 value, bytes data) → bytes4 external

每当 ERC-1363 token owner 通过 approveAndCall 批准此合约 花费他们的 token 时,将调用此函数。

要接受批准,必须返回<br>bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))<br>(即 0x7b04a2d0,或其自身函数选择器)。

IERC1820Implementer

import "@openzeppelin/contracts/interfaces/IERC1820Implementer.sol";

ERC-1820 实现者的接口,如 ERC 中定义。 由将在 IERC1820Registry 中注册为实现者的合约使用。

函数

canImplementInterfaceForAddress(bytes32 interfaceHash, address account) → bytes32 external

如果此合约为 account 实现了 interfaceHash,则返回一个特殊值(ERC1820_ACCEPT_MAGIC)。

请参阅 IERC1820Registry.setInterfaceImplementer

IERC1820Registry

import "@openzeppelin/contracts/interfaces/IERC1820Registry.sol";

全局 ERC-1820 注册表的接口,如 ERC 中定义。帐户可以在此注册表中注册接口的 implementer,以及查询支持情况。

Implementer 可以由多个帐户共享,并且还可以为每个帐户实现多个接口。合约可以为自己实现接口,但外部拥有的帐户(EOA)必须将此委托给合约。

IERC165 接口也可以通过注册表查询。

有关深入的解释和源代码分析,请参阅 ERC 文本。

函数

事件

setManager(address account, address newManager) external

newManager 设置为 account 的管理器。帐户的管理器能够为其设置接口 implementer。

默认情况下,每个帐户都是其自身的管理器。在 newManager 中传递 0x0 值会将管理器重置为此初始状态。

发出 ManagerChanged 事件。

要求:

  • 调用者必须是 account 的当前管理器。
getManager(address account) → address external

返回 account 的管理器。

请参阅 setManager

setInterfaceImplementer(address account, bytes32 _interfaceHash, address implementer) external

implementer 合约设置为 account 针对 interfaceHash 的 implementer。

account 为零地址是调用者地址的别名。零地址也可用于 implementer 以删除旧的地址。

请参阅 interfaceHash 以了解如何创建这些 hash。

发出 InterfaceImplementerSet 事件。

要求:

getInterfaceImplementer(address account, bytes32 _interfaceHash) → address external

返回 accountinterfaceHash 的 implementer。如果未注册此类 implementer,则返回零地址。

如果 interfaceHash 是一个 IERC165 接口 id(即,它以 28 个零结尾),则将查询 account 以获得对其的支持。

account 为零地址是调用者地址的别名。

interfaceHash(string interfaceName) → bytes32 external

返回 interfaceName 的接口哈希,如相应的 ERC 的部分 中定义。

updateERC165Cache(address account, bytes4 interfaceId) external
implementsERC165Interface(address account, bytes4 interfaceId) → bool external
implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) → bool external
InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer) event
ManagerChanged(address indexed account, address indexed newManager) event

IERC1822Proxiable

import "@openzeppelin/contracts/interfaces/draft-IERC1822.sol";

ERC-1822:通用可升级代理标准(UUPS)记录了一种通过简化的代理实现可升级性的方法,该代理的升级完全由当前实现控制。

函数

proxiableUUID() → bytes32 external

返回 proxiable 合约假定用于存储实现地址的存储槽。

指向 proxiable 合约的代理本身不应被视为 proxiable,因为这会冒着<br>通过委托给自己直到 gas 耗尽来破坏升级到它的代理的风险。因此,如果通过代理调用此函数,则至关重要。<br>revert。

IERC2612

import "@openzeppelin/contracts/interfaces/IERC2612.sol";

函数

IERC20Permit

IERC2981

import "@openzeppelin/contracts/interfaces/IERC2981.sol";

NFT 版税标准的接口。

一种标准化的方式来检索非同质化 token(NFT)的版税支付信息,以实现对所有 NFT 市场和生态系统参与者的版税支付的通用支持。

函数

IERC165

royaltyInfo(uint256 tokenId, uint256 salePrice) → address receiver, uint256 royaltyAmount external

根据可以任何交换单位标价的销售价格,返回欠多少版税以及欠给谁。版税金额应以相同的交换单位标价并支付。

ERC-2981 允许将版税设置为价格的 事件

IERC20

asset() → address assetTokenAddress external

返回用于 Vault 进行记账、存入和取款的基础代币的地址。

  • 必须是一个 ERC-20 代币合约。

  • 必须不能 revert。

totalAssets() → uint256 totalManagedAssets external

返回 Vault “管理”的基础资产的总量。

  • 应该包括任何来自收益的复利。

  • 必须包括对 Vault 中的资产收取的任何费用。

  • 必须不能 revert。

convertToShares(uint256 assets) → uint256 shares external

返回在满足所有条件的理想情况下,Vault 可以兑换为提供的资产数量的份额数量。

  • 必须不包括对 Vault 中的资产收取的任何费用。

  • 必须不显示任何取决于调用者的变化。

  • 必须不反映滑点或其他链上条件,在执行实际交换时。

  • 必须不能 revert。

此计算 可能不 反映“按用户”的每股价格,而应反映“平均用户”的每股价格,这意味着平均用户在兑换时应该看到什么。
convertToAssets(uint256 shares) → uint256 assets external

返回在满足所有条件的理想情况下,Vault 可以兑换为提供的份额数量的资产数量。

  • 必须不包括对 Vault 中的资产收取的任何费用。

  • 必须不显示任何取决于调用者的变化。

  • 必须不反映滑点或其他链上条件,在执行实际交换时。

  • 必须不能 revert。

此计算 可能不 反映“按用户”的每股价格,而应反映“平均用户”的每股价格,这意味着平均用户在兑换时应该看到什么。
maxDeposit(address receiver) → uint256 maxAssets external

返回可以通过 deposit 调用存入到 Vault 中给接收者的基础资产的最大数量。

  • 如果 receiver 受到某些存款限制,则必须返回一个有限的值。

  • 如果可以存入的最大资产数量没有限制,则必须返回 2 ** 256 - 1。

  • 必须不能 revert。

previewDeposit(uint256 assets) → uint256 shares external

允许链上或链下用户在给定当前链上条件的情况下,模拟其在当前区块的存款效果。

  • 必须返回尽可能接近且不超过在同一交易中的 deposit 调用中将铸造的 Vault 份额的确切数量。即,如果在同一交易中调用,deposit 应该返回与 previewDeposit 相同或更多的份额。

  • 必须不考虑像 maxDeposit 返回的存款限制,并且应该始终表现得好像存款将被接受,无论用户是否有足够的代币被批准等。

  • 必须包括存款费用。集成商应该意识到存款费用的存在。

  • 必须不能 revert。

convertToShares 和 previewDeposit 之间的任何不利差异 应该 被认为是份额价格的滑点或某种其他类型的条件,这意味着存款人将因存款而损失资产。
deposit(uint256 assets, address receiver) → uint256 shares external

通过存入准确数量的基础代币,向 receiver 铸造股份 Vault 份额。

  • 必须发出 Deposit 事件。

  • 可以支持另一种流程,其中基础代币在 deposit 执行之前由 Vault 合约拥有,并在 deposit 期间进行核算。

  • 如果无法存入所有资产(由于达到存款限制、滑点、用户未批准足够的底层代币给 Vault 合约等),则必须 revert。

大多数实现将需要在 Vault 的基础资产代币上预先批准 Vault。
maxMint(address receiver) → uint256 maxShares external

返回可以通过 mint 调用为接收者铸造的最大 Vault 份额数量。 - 如果接收者受到某些铸币限额的限制,则必须返回一个有限的值。 - 如果可以铸造的最大份额量没有限制,则必须返回 2 ** 256 - 1。 - 必须不能 revert。

previewMint(uint256 shares) → uint256 assets external

允许链上或链下用户在给定当前链上条件的情况下,模拟其在当前区块的 mint 效果。

  • 必须返回尽可能接近且不少于在同一交易的 mint 调用中将存入的资产的确切数量。即,如果在同一交易中调用,mint 应该返回与 previewMint 相同或更少的资产。

  • 必须不考虑像 maxMint 返回的 mint 限制,并且应该始终表现得好像 mint 将被接受,无论用户是否有足够的代币被批准等。

  • 必须包括存款费用。集成商应该意识到存款费用的存在。

  • 必须不能 revert。

convertToAssets 和 previewMint 之间的任何不利差异 应该 被认为是份额价格的滑点或某种其他类型的条件,这意味着存款人将因 mint 而损失资产。
mint(uint256 shares, address receiver) → uint256 assets external

通过存入一定数量的基础代币,向接收者铸造准确数量的 shares Vault 份额。

  • 必须发出 Deposit 事件。

  • 可以支持另一种流程,其中基础代币在 mint 执行之前由 Vault 合约拥有,并在 mint 期间进行核算。

  • 如果无法铸造所有份额(由于达到存款限制、滑点、用户未批准足够的底层代币给 Vault 合约等),则必须 revert。

大多数实现将需要在 Vault 的基础资产代币上预先批准 Vault。
maxWithdraw(address owner) → uint256 maxAssets external

返回可以通过 withdraw 调用从 Vault 中的 owner 余额中提取的基础资产的最大数量。

  • 如果 owner 受到某些提款限制或时间锁定的约束,则必须返回一个有限的值。

  • 必须不能 revert。

previewWithdraw(uint256 assets) → uint256 shares external

允许链上或链下用户在给定当前链上条件的情况下,模拟其在当前区块的提款效果。

  • 必须返回尽可能接近且不少于在同一交易的 withdraw 调用中将销毁的 Vault 份额的确切数量。即,如果在同一交易中调用,withdraw 应该返回与 previewWithdraw 相同或更少的份额。

  • 必须不考虑像 maxWithdraw 返回的提款限制,并且应该始终表现得好像提款将被接受,无论用户是否有足够的份额等。

  • 必须包括提款费用。集成商应该意识到提款费用的存在。

  • 必须不能 revert。

convertToShares 和 previewWithdraw 之间的任何不利差异 应该 被认为是份额价格的滑点或某种其他类型的条件,这意味着存款人将因存款而损失资产。
withdraw(uint256 assets, address receiver, address owner) → uint256 shares external

从 owner 处销毁份额,并将准确数量的基础代币资产发送给 receiver。

  • 必须发出 Withdraw 事件。

  • 可以支持另一种流程,其中基础代币在 withdraw 执行之前由 Vault 合约拥有,并在 withdraw 期间进行核算。

  • 如果无法提取所有资产(由于达到提款限制、滑点、owner 没有足够的份额等),则必须 revert。

请注意,某些实现将需要在执行提款之前预先请求 Vault。这些方法应单独执行。

maxRedeem(address owner) → uint256 maxShares external

返回可以通过 redeem 调用从 Vault 中的 owner 余额中赎回的最大 Vault 份额数量。

  • 如果 owner 受到某些提款限制或时间锁定的约束,则必须返回一个有限的值。

  • 如果 owner 不受任何提款限制或时间锁定的约束,则必须返回 balanceOf(owner)。

  • 必须不能 revert。

previewRedeem(uint256 shares) → uint256 assets external

允许链上或链下用户在给定当前链上条件的情况下,模拟其在当前区块的赎回效果。

  • 必须返回尽可能接近且不超过在同一交易的 redeem 调用中将提取的资产的确切数量。即,如果在同一交易中调用,redeem 应该返回与 previewRedeem 相同或更多的资产。

  • 必须不考虑像 maxRedeem 返回的赎回限制,并且应该始终表现得好像赎回将被接受,无论用户是否有足够的份额等。

  • 必须包括提款费用。集成商应该意识到提款费用的存在。

  • 必须不能 revert。

convertToAssets 和 previewRedeem 之间的任何不利差异 应该 被认为是份额价格的滑点或某种其他类型的条件,这意味着存款人将因赎回而损失资产。
redeem(uint256 shares, address receiver, address owner) → uint256 assets external

从 owner 处销毁准确数量的 shares,并将基础代币的 assets 发送给 receiver。

  • 必须发出 Withdraw 事件。

  • 可以支持另一种流程,其中基础代币在 redeem 执行之前由 Vault 合约拥有,并在 redeem 期间进行核算。

  • 如果无法赎回所有 shares(由于达到提款限制、滑点、owner 没有足够的 shares 等),则必须 revert。

某些实现将需要在执行提款之前预先请求 Vault。<br>这些方法应单独执行。
Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares) event
Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares) event

IERC4906

import "@openzeppelin/contracts/interfaces/IERC4906.sol";

Functions

IERC721

IERC165

Events

IERC721

MetadataUpdate(uint256 _tokenId) event

当token的元数据更改时,会发出此事件。 以便诸如NFT市场之类的第三方平台可以及时更新NFT的图像和相关属性。

BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId) event

当一系列token的元数据更改时,会发出此事件。 以便诸如NFT市场之类的第三方平台可以及时更新NFT的图像和相关属性。

IERC5267

import "@openzeppelin/contracts/interfaces/IERC5267.sol";

Functions

Events

eip712Domain() → bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions external

返回描述此合约用于 EIP-712 签名的域分隔符的字段和值。

EIP712DomainChanged() event

可以发出信号表明域可能已更改。

IERC5313

import "@openzeppelin/contracts/interfaces/IERC5313.sol";

Light合约所有权标准接口。

识别控制合约的账户所需的标准化最小接口

Functions

owner() → address external

获取所有者的地址。

IERC5805

import "@openzeppelin/contracts/interfaces/IERC5805.sol";

Functions

IVotes

IERC6372

Events

IVotes

Errors

IVotes

IERC6372

import "@openzeppelin/contracts/interfaces/IERC6372.sol";

Functions

clock() → uint48 external

用于标记检查点的时钟。可以被覆盖以实现基于时间戳的检查点(和投票)。

CLOCK_MODE() → string external

时钟的描述

IERC6909

import "@openzeppelin/contracts/interfaces/draft-IERC6909.sol";

符合 ERC-6909 的合约的必需接口,如 ERC 中定义。

Functions

IERC165

Events

balanceOf(address owner, uint256 id) → uint256 external

返回 owner 拥有的 id 类型的代币数量。

allowance(address owner, address spender, uint256 id) → uint256 external

返回 spender 被允许代表 owner 花费的 id 类型的代币数量。

不包括 operator 许可。
isOperator(address owner, address spender) → bool external

如果 spender 被设置为 owner 的 operator,则返回 true。

approve(address spender, uint256 id, uint256 amount) → bool external

spender 设置来自调用者代币的 id 类型的代币的 amount 的许可。amounttype(uint256).max 表示无限制的许可。

必须返回 true。

setOperator(address spender, bool approved) → bool external

授予或撤销调用者的代币的任何代币 id 的无限传输权限给 spender

必须返回 true。

transfer(address receiver, uint256 id, uint256 amount) → bool external

id 类型的 amount 个代币从调用者的账户转移到 receiver

必须返回 true。

transferFrom(address sender, address receiver, uint256 id, uint256 amount) → bool external

id 类型的 amount 个代币从 sender 转移到 receiver

必须返回 true。

Approval(address indexed owner, address indexed spender, uint256 indexed id, uint256 amount) event

当为 spender 设置 ownerid 类型的代币的许可时发出。 新的许可是 amount

OperatorSet(address indexed owner, address indexed spender, bool approved) event

owner 授予或撤销 spender 的 operator 状态时发出。

Transfer(address caller, address indexed sender, address indexed receiver, uint256 indexed id, uint256 amount) event

当由 caller 发起的从 sender 移动到 receiverid 类型的 amount 个代币时发出。

IERC6909ContentURI

import "@openzeppelin/contracts/interfaces/draft-IERC6909.sol";

IERC6909 的可选扩展,添加了 content URI 功能。

Functions

IERC6909

IERC165

Events

IERC6909

contractURI() → string external

返回合约的 URI。

tokenURI(uint256 id) → string external

返回 id 类型的代币的 URI。

IERC6909Metadata

import "@openzeppelin/contracts/interfaces/draft-IERC6909.sol";

IERC6909 的可选扩展,添加了元数据功能。

Functions

IERC6909

IERC165

Events

IERC6909

name(uint256 id) → string external

返回 id 类型的代币的名称。

symbol(uint256 id) → string external

返回 id 类型的代币的交易代码。

decimals(uint256 id) → uint8 external

返回 id 类型的代币的小数位数。

IERC6909TokenSupply

import "@openzeppelin/contracts/interfaces/draft-IERC6909.sol";

IERC6909 的可选扩展,添加了代币供应功能。

Functions

IERC6909

IERC165

Events

IERC6909

totalSupply(uint256 id) → uint256 external

返回 id 类型的代币的总供应量。

IERC7674

import "@openzeppelin/contracts/interfaces/draft-IERC7674.sol";

ERC-20 的临时批准扩展 ( ERC-7674)

Functions

IERC20

Events

IERC20

  • 原文链接: docs.openzeppelin.com/co...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
OpenZeppelin
OpenZeppelin
江湖只有他的大名,没有他的介绍。