ERC 1155 - OpenZeppelin 文档

该文档介绍了 OpenZeppelin Contracts 3.x 版本中与 ERC1155 多重代币标准相关的接口和合约。

你没有在阅读此文档的当前版本。5.x 是当前版本。

ERC 1155

最好在 https://docs.openzeppelin.com/contracts/api/token/erc1155 上查看此文档

这组接口和合约都与 ERC1155 多代币标准 有关。

EIP 由三个接口组成,它们履行不同的角色,在此处可以找到 IERC1155IERC1155MetadataURIIERC1155Receiver

ERC1155 实现了强制性的 IERC1155 接口,以及可选的扩展 IERC1155MetadataURI,它依赖于替换机制来为所有代币类型使用相同的 URI,从而显着降低 Gas 成本。

此外,还有多个自定义扩展,包括:

这组核心合约旨在保持公正,允许开发人员访问 ERC1155 中的内部函数(例如 _mint)并以他们喜欢的方式将其公开为外部函数。另一方面,ERC1155 预设(例如 ERC1155PresetMinterPauser)使用固定的模式进行设计,以便为开发人员提供随时可用、可部署的合约。

核心

IERC1155

符合 ERC1155 标准的合约的必需接口,如 EIP 中所定义。

自 v3.1 起可用。

函数

IERC165

事件

balanceOf(address account, uint256 id) → uint256 external

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

要求:

  • account 不能为零地址。
balanceOfBatch(address[] accounts, uint256[] ids) → uint256[] external

balanceOf批量 版本。

要求:

  • accountsids 的长度必须相同。
setApprovalForAll(address operator, bool approved) external

根据 approved 授予或撤销 operator 转移调用者的代币的权限。

发出一个 ApprovalForAll 事件。

要求:

  • operator 不能是调用者。
isApprovedForAll(address account, address operator) → bool external

如果 operator 被批准转移 account 的代币,则返回 true。

请参阅 setApprovalForAll

safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes data) external

amount 个代币类型的代币 idfrom 转移到 to

发出一个 TransferSingle 事件。

要求:

  • to 不能为零地址。

  • 如果调用者不是 from,则必须已通过 setApprovalForAll 批准花费 from 的代币。

  • from 必须具有类型为 id 的代币余额,至少为 amount

  • 如果 to 是指智能合约,它必须实现 IERC1155Receiver.onERC1155Received 并返回 接受魔法值。

safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] amounts, bytes data) external

safeTransferFrom批量 版本。

发出一个 TransferBatch 事件。

要求:

TransferSingle(address operator, address from, address to, uint256 id, uint256 value) event

operatorvalue 个代币类型 id 的代币从 from 转移到 to 时发出。

TransferBatch(address operator, address from, address to, uint256[] ids, uint256[] values) event

等效于多个 TransferSingle 事件,其中 operatorfromto 对于所有 转移都是相同的。

ApprovalForAll(address account, address operator, bool approved) event

account 授予或撤销 operator 转移其代币的权限时,根据 approved 发出。

URI(string value, uint256 id) event

当代币类型 id 的 URI 更改为 value 时发出,如果它是非程序化的 URI。

如果为 id 发出了 URI 事件,则标准 保证 value 将等于 IERC1155MetadataURI.uri 返回的值。

IERC1155MetadataURI

可选的 ERC1155MetadataExtension 接口的接口,如 EIP 中所定义。

自 v3.1 起可用。

函数

IERC1155

IERC165

事件

IERC1155

uri(uint256 id) → string external

返回代币类型 id 的 URI。

如果 {id} 子字符串存在于 URI 中,则客户端必须将其替换为 实际代币类型 ID。

ERC1155

基本标准多代币的实现。 请参阅 https://learnblockchain.cn/docs/eips/EIPS/eip-1155 最初基于 Enjin 的代码:https://github.com/enjin/erc-1155

自 v3.1 起可用。

函数

ERC165

事件

IERC1155

constructor(string uri_) public

请参阅 _setURI

uri(uint256) → string external

请参阅 IERC1155MetadataURI.uri

此实现为所有代币类型返回相同的 URI。它依赖于代币类型 ID 替换机制 在 EIP 中定义

调用此函数的客户端必须将 {id} 子字符串替换为 实际代币类型 ID。

balanceOf(address account, uint256 id) → uint256 public

请参阅 IERC1155.balanceOf

要求:

  • account 不能为零地址。
balanceOfBatch(address[] accounts, uint256[] ids) → uint256[] public

请参阅 IERC1155.balanceOfBatch

要求:

  • accountsids 的长度必须相同。
setApprovalForAll(address operator, bool approved) public

请参阅 IERC1155.setApprovalForAll

isApprovedForAll(address account, address operator) → bool public

请参阅 IERC1155.isApprovedForAll

safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes data) public

请参阅 IERC1155.safeTransferFrom

safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] amounts, bytes data) public

请参阅 IERC1155.safeBatchTransferFrom

_setURI(string newuri) internal

通过依赖于代币类型 ID 替换机制,为所有代币类型设置新的 URI 在 EIP 中定义

通过这种机制,URI 或 URI 处 JSON 文件中任何数量的 {id} 子字符串的任何出现都将被客户端替换为代币类型 ID。

例如,https://token-cdn-domain/{id}.json URI 将被客户端解释为 https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json 对于代币类型 ID 0x4cce0。

请参阅 uri

因为这些 URI 不能通过 uri 事件有意义地表示, 此函数不会发出任何事件。

_mint(address account, uint256 id, uint256 amount, bytes data) internal

创建 amount 个代币类型 id 的代币,并将它们分配给 account

发出一个 TransferSingle 事件。

要求:

_mintBatch(address to, uint256[] ids, uint256[] amounts, bytes data) internal

_mint批量 版本。

要求:

_burn(address account, uint256 id, uint256 amount) internal

account 中销毁 amount 个代币类型 id 的代币

要求:

  • account 不能为零地址。

  • account 必须至少有 amount 个代币类型 id 的代币。

_burnBatch(address account, uint256[] ids, uint256[] amounts) internal

_burn批量 版本。

要求:

  • idsamounts 的长度必须相同。
_beforeTokenTransfer(address operator, address from, address to, uint256[] ids, uint256[] amounts, bytes data) internal

在任何代币转账之前调用的Hook。这包括铸造 和销毁,以及批量变体。

相同的Hook在单个和批量变体上都被调用。对于单个 转移,idamount 数组的长度将为 1。

调用条件(对于每个 idamount 对):

  • fromto 都不为零时,amountfrom 的代币 代币类型 id 将被转移到 to

  • from 为零时,将为 to 铸造 amount 个代币类型 id 的代币。

  • to 为零时,amountfrom 的代币类型 id 的代币 将被销毁。

  • fromto 永远不会都为零。

  • idsamounts 具有相同的不为零的长度。

要了解有关Hook的更多信息,请访问 使用Hook

IERC1155Receiver

函数

IERC165

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

处理单个 ERC1155 代币类型的收到。在余额更新后,在 safeTransferFrom 结束时调用此函数。 要接受转移,这必须返回 bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")) (即 0xf23a6e61,或其自己的函数选择器)。 @param operator 发起转移的地址(即 msg.sender) @param from 之前拥有代币的地址 @param id 正在转移的代币的 ID @param value 正在转移的代币数量 @param data 没有指定格式的附加数据 @return bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")) 如果允许转移

onERC1155BatchReceived(address operator, address from, uint256[] ids, uint256[] values, bytes data) → bytes4 external

处理多个 ERC1155 代币类型的收到。在余额更新后,在 safeBatchTransferFrom 结束时调用此函数。 要接受转移,这必须返回 bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")) (即 0xbc197c81,或其自己的函数选择器)。 @param operator 发起批量转移的地址(即 msg.sender) @param from 之前拥有代币的地址 @param ids 包含每个正在转移的代币的 id 的数组(顺序和长度必须与 values 数组匹配) @param values 包含每个正在转移的代币的数量的数组(顺序和长度必须与 ids 数组匹配) @param data 没有指定格式的附加数据 @return bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")) 如果允许转移

扩展

ERC1155Pausable

具有可暂停代币转账、铸造和销毁的 ERC1155 代币。

适用于诸如在评估期结束之前阻止交易的场景,或者在出现重大错误时具有冻结所有代币转账的紧急开关。

自 v3.1 起可用。

函数

Pausable

ERC1155

ERC165

Events

IERC1155

burn(address account, uint256 id, uint256 value) public
burnBatch(address account, uint256[] ids, uint256[] values) public

Convenience

便利

ERC1155Holder

自 v3.1 版本可用。

Functions

函数

ERC1155Receiver

ERC1155接收器

ERC165

onERC1155Received(address, address, uint256, uint256, bytes) → bytes4 public
onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) → bytes4 public

← ERC 777

GSN →

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

0 条评论

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