【EIP】ERC-1155 多代币标准

概述

ERC1155用于多种代币管理的合约标准接口。 单个部署的合约可以包括同质化代币、非同质化代币或其他配置(如半同质化代币)的任何组合。 这样一来,ERC-1155 代币就具有与 ERC-20和erc-721代币相同的功能,甚至可以同时使用这两者的功能。 它改进了 ERC-20 和 ERC-721 标准的功能,提升了效率并纠正了实现中的明显错误。

功能和特点

批量传输

批量传输与常规 ERC-20 传输非常相似。ERC-1155 中唯一的区别是我们将值作为数组传递,同时也传递了 ids 数组。

// ERC-20
function transferFrom(address from, address to, uint256 value) external returns (bool);

// ERC-1155
function safeBatchTransferFrom(
    address _from,
    address _to,
    uint256[] calldata _ids,
    uint256[] calldata _values,
    bytes calldata _data
) external;
批量余额

可以在单次调用中获取多个余额,参数中传递所有者帐户数组和代币的 id 数组。

// ERC-20
function balanceOf(address owner) external view returns (uint256);

// ERC-1155
function balanceOfBatch(
    address[] calldata _owners,
    uint256[] calldata _ids
) external view returns (uint256[] memory);
批量审批

审批过程与 ERC-20 略有不同。 这里不是批准特定金额,而是通过 setApprovalForAll 函数设置操作帐户为已批准或未批准。查看当前的审批状态可以通过 isApprovedForAll 完成。要么全部批准,要么不批准。 不能定义要批准代币的数量,甚至代币类型。你只能批准一个地址的所有代币。

// ERC-1155
function setApprovalForAll(
    address _operator,
    bool _approved
) external;

function isApprovedForAll(
    address _owner,
    address _operator
) external view returns (bool);
接收钩子
function onERC1155BatchReceived(
    address _operator,
    address _from,
    uint256[] calldata _ids,
    uint256[] calldata _values,
    bytes calldata _data
) external returns(bytes4);

ERC-1155 只支持智能合约的接收钩子函数。 钩子函数必须返回一个事先预定义的 4 字节值,这个值被指定为: 

bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))

当接收合约返回这一值时,意味着合约知道如何处理 ERC-1155 代币并接受转账。

支持非同质化代币

当供应量仅为 1 时,代币本质上就是一个非同质化的代币 (NFT)。 按照 ERC-721 的标准,你可以定义一个元数据网址。

安全转账规则
  1. 调用者必须获得批准才能从 _from 的帐户地址消费代币,或者调用者帐户地址必须与 _from 的帐户地址相同。
  2. 在以下情况下,转账调用将回退_to 地址为 0;
  • _ids 的长度与 _values 的长度不同;
  • _ids 中代币持有者的任何余额低于发送给接收者的相应 _value 金额。
  • 出现任何其他错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值