EIP 由三个接口组成,它们扮演不同的角色,在这里找到为IERC1155IERC1155MetadataURIIERC1155Receiver

ERC1155通过依赖替换机制对所有令牌类型使用相同的 URI,实现了强制IERC1155接口以及可选扩展IERC1155MetadataURI,从而显着降低了 gas 成本。

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

  • 指定可以为所有用户暂停代币传输的地址 ( ERC1155Pausable)。
  • 销毁自己的代币 ( ERC1155Burnable)。

核心代码

IERC1155

FUNCTIONS
balanceOf(account, id)
//返回account拥有的id令牌类型的令牌数量account。 
//要求: account 不能是零地址。

balanceOfBatch(accounts, ids)
//balanceOf的批处理版本。
//要求:accounts并且ids必须具有相同的长度。

setApprovalForAll(operator, approved)
//授予或撤销operator转移调用者令牌的权限approved, 
//发出一个ApprovalForAll事件。 
//要求: operator 不能是调用者。

isApprovedForAll(account, operator)
//如果operator被批准转移account的代币,则返回 true 。 
//见setApprovalForAll。

safeTransferFrom(from, to, id, amount, data)
//将amount令牌类型的令牌id从转移from到to。 
//发出一个TransferSingle事件。 
//要求: 
///to 不能是零地址。 
///如果调用者不是from,则必须已批准其from通过花费令牌setApprovalForAll。 
///from必须id至少有类型为的代币余额amount。 
///如果to指的是智能合约,它必须实现IERC1155Receiver.onERC1155Received并返回接受。

safeBatchTransferFrom(from, to, ids, amounts, data)
//safeTransferFrom的批处理版本。
//发出一个TransferBatch事件。
//要求:
///ids并且amounts必须具有相同的长度。
///如果to指的是智能合约,它必须实现IERC1155Receiver.onERC1155BatchReceived并返回接受魔法值。

IERC165
supportsInterface(interfaceId)
EVENTS
TransferSingle(operator, from, to, id, value)
//operator 发出 value数量的 id类型的token 从from转移到to

TransferBatch(operator, from, to, ids, values)
//等效于多个TransferSingle活动,在那里operator,from并且to对所有传输相同。

ApprovalForAll(account, operator, approved)
//account授予或取消权限operator转让其令牌,根据 approved。

URI(value, id)
//当id令牌类型的 URI更改为value 时发出 
//如果为 id 发出 URI 事件,则标准保证该值将等于 IERC1155MetadataURI.uri 返回的值。

IERC1155MetadataURI

FUNCTIONS
uri(id)
//返回id 令牌类型的 URI 。 
//如果 {id} 子字符串出现在 URI 中,它必须由具有实际令牌类型 ID 的客户端替换。
IERC1155
balanceOf(account, id)

balanceOfBatch(accounts, ids)

setApprovalForAll(operator, approved)

isApprovedForAll(account, operator)

safeTransferFrom(from, to, id, amount, data)

safeBatchTransferFrom(from, to, ids, amounts, data)

IERC165
supportsInterface(interfaceId)

ERC1155

FUNCTIONS
constructor(uri_)

supportsInterface(interfaceId)

uri(_)

balanceOf(account, id)

balanceOfBatch(accounts, ids)

setApprovalForAll(operator, approved)

isApprovedForAll(account, operator)

safeTransferFrom(from, to, id, amount, data)

safeBatchTransferFrom(from, to, ids, amounts, data)

_safeTransferFrom(from, to, id, amount, data)
//将amount令牌类型的令牌id从转移from到to。 
//发出一个TransferSingle事件。 
//要求: 
///to 不能是零地址。 
///如果调用者不是from,则必须已批准其from通过花费令牌setApprovalForAll。 
///from必须id至少有类型为的代币余额amount。 
///如果to指的是智能合约,它必须实现IERC1155Receiver.onERC1155Received并返回接受。

_safeBatchTransferFrom(from, to, ids, amounts, data)
//safeTransferFrom的批处理版本。
//发出一个TransferBatch事件。
//要求:
///ids并且amounts必须具有相同的长度。
///如果to指的是智能合约,它必须实现IERC1155Receiver.onERC1155BatchReceived并返回接受魔法值。

_setURI(newuri)
//通过依赖于 EIP 中定义的令牌类型 ID 替换机制,为所有令牌类型设置新的 URI。 
//通过这种机制,URI 中出现的任何 {id} 子字符串或 JSON 文件中所述 URI 处的任何金额都将被具有令牌类型 ID 的客户端替换。 
//例如,https://token-cdn-domain/{id}.json URI 将被客户端解释为 https://token-cdn-domain/4 token 4. 
//见 uri。 
//因为这些 URI 不能由 uri 事件有意义地表示,所以此函数不发出任何事件。
_mint(account, id, amount, data)
//创建令牌类型 id 的数量令牌,并将它们分配给帐户。 
//发出 TransferSingle 事件。 
//要求: account 不能是零地址。 
//如果 account 指的是智能合约,它必须实现 IERC1155Receiver.onERC1155Received 并返回接受魔法值。

_mintBatch(to, ids, amounts, data)
//_mint 的批处理版本。 
//要求: id 和数量必须具有相同的长度。 
//如果 to 指的是一个智能合约,它必须实现 IERC1155Receiver.onERC1155BatchReceived 并返回接受魔法值。

_burn(account, id, amount)
//从帐户中销毁令牌类型 id 的数量令牌 
//要求: account 不能是零地址。 
//帐户必须至少具有令牌类型 id 的令牌数量。

_burnBatch(account, ids, amounts)
//_burn 的批处理版本。 
//要求: id 和数量必须具有相同的长度。

_beforeTokenTransfer(operator, from, to, ids, amounts, data)
//在任何令牌传输之前调用的钩子。 这包括铸造和燃烧,以及批量变体。 
//在单个和批处理变体上调用相同的钩子。 
//对于单次转账,id 和 amount 数组的长度将为 1。 
//调用条件(对于每个 id 和数量对): 
///当 from 和 to 都非零时,to 的令牌类型 id 的 from 令牌数量将被转移到。 
///当 from 为零时,令牌类型 id 的数量令牌将被铸造为 to。 
///当 to 为零时,令牌类型 id 的 from 令牌数量将被烧毁。 
///from 和 to 永远不会都为零。 
///id 和数量具有相同的非零长度。

IERC1155Receiver

FUNCTIONS
onERC1155Received(operator, from, id, value, data)
//处理单个 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(operator, from, ids, values, data)

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

ERC1155Pausable

ERC1155 代币,可暂停代币转移、铸造和燃烧。

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

FUNCTIONS
_beforeTokenTransfer(operator, from, to, ids, amounts, data)
//见ERC1155._beforeTokenTransfer。
//要求:合同不得暂停。
PAUSABLE
constructor()

paused()

_pause()

_unpause()

ERC1155
supportsInterface(interfaceId)

uri(_)

balanceOf(account, id)

balanceOfBatch(accounts, ids)

setApprovalForAll(operator, approved)

isApprovedForAll(account, operator)

safeTransferFrom(from, to, id, amount, data)

safeBatchTransferFrom(from, to, ids, amounts, data)

_safeTransferFrom(from, to, id, amount, data)

_safeBatchTransferFrom(from, to, ids, amounts, data)

_setURI(newuri)

_mint(account, id, amount, data)

_mintBatch(to, ids, amounts, data)

_burn(account, id, amount)

_burnBatch(account, ids, amounts)

ERC1155Burnable

允许代币持有者销毁他们自己的代币和他们已获准使用的代币。

FUNCTIONS
burn(account, id, value)

burnBatch(account, ids, values)

ERC1155
constructor(uri_)

supportsInterface(interfaceId)

uri(_)

balanceOf(account, id)

balanceOfBatch(accounts, ids)

setApprovalForAll(operator, approved)

isApprovedForAll(account, operator)

safeTransferFrom(from, to, id, amount, data)

safeBatchTransferFrom(from, to, ids, amounts, data)

_safeTransferFrom(from, to, id, amount, data)

_safeBatchTransferFrom(from, to, ids, amounts, data)

_setURI(newuri)

_mint(account, id, amount, data)

_mintBatch(to, ids, amounts, data)

_burn(account, id, amount)

_burnBatch(account, ids, amounts)

_beforeTokenTransfer(operator, from, to, ids, amounts, data)

ERC1155Supply

ERC1155 的扩展,增加了对每个 ID 的总供应量的跟踪。

对于必须明确识别可替代和不可替代令牌的场景很有用。注意:虽然 totalSupply 为 1 可能意味着对应的是 NFT,但不能保证不会铸造具有相同 id 的其他令牌。

FUNCTIONS
totalSupply(id)
//具有给定 id 的令牌总数。

exists(id)
//指示是否存在具有给定 id 的任何令牌。

_mint(account, id, amount, data)

_mintBatch(to, ids, amounts, data)

_burn(account, id, amount)

_burnBatch(account, ids, amounts)

ERC1155
constructor(uri_)

supportsInterface(interfaceId)

uri(_)

balanceOf(account, id)

balanceOfBatch(accounts, ids)

setApprovalForAll(operator, approved)

isApprovedForAll(account, operator)

safeTransferFrom(from, to, id, amount, data)

safeBatchTransferFrom(from, to, ids, amounts, data)

_safeTransferFrom(from, to, id, amount, data)

_safeBatchTransferFrom(from, to, ids, amounts, data)

_setURI(newuri)

_beforeTokenTransfer(operator, from, to, ids, amounts, data)

ERC1155PresetMinterPauser

ERC1155 令牌,包括:

  • 持有者燃烧(销毁)其代币的能力
  • 允许令牌铸造(创建)的铸造者角色
  • 允许停止所有代币传输的暂停角色

该合约用于AccessControl使用不同角色锁定许可功能 – 前往其文档了解详细信息。

部署合约的账户将被授予铸币者和暂停者角色,以及默认的管理员角色,这将允许它向其他账户授予铸币者和暂停者角色。

FUNCTIONS
constructor(uri)
//向部署合约的帐户授予DEFAULT_ADMIN_ROLEMINTER_ROLEPAUSER_ROLE。 mint(to, id, amount, data)
//amount为to, 令牌类型创建新令牌id。 
//见ERC1155._mint。 
//要求: 调用者必须拥有MINTER_ROLE. mintBatch(to, ids, amounts, data)
//mint的批处理版本。 pause()
//暂停所有代币传输。
//见ERC1155Pausable和Pausable._pause。
//要求:调用者必须拥有PAUSER_ROLE. unpause()
//取消暂停所有令牌传输。
//见ERC1155Pausable和Pausable._unpause。
//要求:调用者必须拥有PAUSER_ROLE. supportsInterface(interfaceId) _beforeTokenTransfer(operator, from, to, ids, amounts, data) PAUSABLE paused() _pause() _unpause() ERC1155BURNABLE burn(account, id, value) burnBatch(account, ids, values) ERC1155 uri(_) balanceOf(account, id) balanceOfBatch(accounts, ids) setApprovalForAll(operator, approved) isApprovedForAll(account, operator) safeTransferFrom(from, to, id, amount, data) safeBatchTransferFrom(from, to, ids, amounts, data) _safeTransferFrom(from, to, id, amount, data) _safeBatchTransferFrom(from, to, ids, amounts, data) _setURI(newuri) _mint(account, id, amount, data) _mintBatch(to, ids, amounts, data) _burn(account, id, amount) _burnBatch(account, ids, amounts) ACCESSCONTROLENUMERABLE getRoleMember(role, index) getRoleMemberCount(role) grantRole(role, account) revokeRole(role, account) renounceRole(role, account) _setupRole(role, account) ACCESSCONTROL hasRole(role, account) _checkRole(role, account) getRoleAdmin(role) _setRoleAdmin(role, adminRole) 

ERC1155Holder

FUNCTIONS
onERC1155Received(_, _, _, _, _)

onERC1155BatchReceived(_, _, _, _, _)

ERC1155RECEIVER
supportsInterface(interfaceId)

 

发表评论

后才能评论