Home指南API 参考手册
指南API 参考手册社区Discord博客FAQ漏洞赏金公告中心English(英文版)Log In
指南

合约接口

必须实现的接口

每个符合 TRC-1155 标准的智能合约都必须实现 TRC-1155 与 TRC-165 接口。

pragma solidity ^0.4.20;

  interface TRC1155 {
    // Events
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value);
    event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values);
    event URI(string _value, uint256 indexed _id);
    // Required Functions
    function setApprovalForAll(address _operator, bool _approved) external;
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
    function balanceOf(address _owner, uint256 _id) external view returns (uint256);
    function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);
    function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external;
    function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external;
}
  interface TRC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

1.setApprovalForAll(address _operator, bool _approved)
调用者给别人授权此TRC-1155中所有的token或者取消授权。

@_operator:被授权或者被取消授权的地址
@_approved:授权true / 取消授权false
抛出事件:ApprovalForAll

2.isApprovedForAll(address _owner, address _operator)
查询 _operator 是否有 _owner 的授权。

3.balanceOf(address _owner, uint256 _id)
查询某个地址 _owner 拥有某个token _id的数量。

4.balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids)
批量查询一组地址对一组token的持有数量。

5.safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data)
从持有者地址给接收者地址发送指定数量的某个token

@_from:持有地址
@_to:接收地址
@_id:token id
@_value:数量,大于等于0
@_data:无固定格式的额外数据
抛出事件:TransferSingle

6.safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data)
从持有者地址给接收者地址批量发送一组token。

@_ids:一组token
@_values:一组对应的数量
抛出事件:TransferBatch

7.ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)
setApprovalForAll 成功后会触发 ApprovalForAll 事件

@_operator:被授权或者被取消授权的地址

8.TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value)
safeTransferFrom 成功后将触发 TransferSingle 事件。
@_operator:调用函数safeTransferFrom的地址

9.TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values);
safeBatchTransferFrom 成功后将触发 TransferBatch 事件。
@_operator:调用函数safeBatchTransferFrom的地址

10.event URI(string _value, uint256 indexed _id):
更新某个token的URI时抛出此事件。
@_value:描述此TRC-1155中这个token _id的URI地址

11.supportsInterface(bytes4 interfaceID)
查询是否支持某个接口(interfaceID)

如果某个合约想要接收TRC-1155,合约必须实现以下接口[TBD]:

interface TRC1155TokenReceiver {

function onTRC1155Received(address _operator, address _from, uint256 _id, uint256 _value, bytes calldata _data) external returns(bytes4);
function onTRC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external returns(bytes4);
}
  • onTRC1155Received(address _operator, address _from, uint256 _id, uint256 _value, bytes calldata _data) external returns(bytes4)
    _operator:调用方法 safeTransferFrom 的地址
    返回:bytes4(keccak256("onTRC1155Received(address,address,uint256,uint256,bytes)"))`,0xf23a6e61

  • onTRC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external returns(bytes4)
    _operator:调用方法 safeBatchTransferFrom 的地址
    返回:bytes4(keccak256("onTRC1155BatchReceived(address,address,uint256[],uint256[],bytes)")),0xbc197c81

metadata extension接口(可选)

metadata extension接口对于TRC-1155智能合约来说是可选的。

interface TRC1155Metadata_URI {
     function uri(uint256 _id) external view returns (string memory);
}

uri(uint256 _id)
查询某个token的URI。

URI对应TRC-1155 Metadata JSON file,基于TRC721 Metadata JSON Schema,应该包括以下属性:

{
    "title": "Token Metadata",
    "type": "object",
    "properties": {
        "name": {
            "type": "string",
            "description": "Identifies the asset to which this token represents"
        },
        "decimals": {
            "type": "integer",
            "description": "The number of decimal places that the token amount should display - e.g. 18, means to divide the token amount by 1000000000000000000 to get its user representation."
        },
        "description": {
            "type": "string",
            "description": "Describes the asset to which this token represents"
        },
        "image": {
            "type": "string",
            "description": "A URI pointing to a resource with mime type image/* representing the asset to which this token represents. Consider making any images at a width between 320 and 1080 pixels and aspect ratio between 1.91:1 and 4:5 inclusive."
        },
        "properties": {
            "type": "object",
            "description": "Arbitrary properties. Values may be strings, numbers, object or arrays."
        }
    }
}

enumeration extension接口(可选)

interface TRC1155Enumerable  {
    function isFungible(uint256 _id) public pure returns(bool)
    function isNonFungible(uint256 _id) public pure returns(bool)
    function getNonFungibleIndex(uint256 _id) public pure returns(uint256)
    function getNonFungibleBaseType(uint256 _id) public pure returns(uint256)
    function burn(address _from, uint256[] _ids, uint256[] _values)
    function mintFungible(uint256 _id, address[] calldata _to, uint256[] calldata _values, bytes calldata _data) external;
    function mintNonFungible(uint256 _id, address _to) external;
    function serNewUri(string _uri, uint256 indexed _id) external;  
}

1.isFungible(uint256 _id)
查询token是否可分割

2.isNonFungible(uint256 _id)
查询token是否不可分割

3.getNonFungibleIndex(uint256 _id)
获取NFT的index

4.getNonFungibleBaseType(uint256 _id)
获取NFT的base

5.burn(address _from, uint256[] _ids, uint256[] _values)
燃烧某个用户的多个token

6.mintFungible(uint256 _id, address[] calldata _to, uint256[] calldata _values, bytes calldata _data)
mint一个可分割的token给多个人

7.mintNonFungible(uint256 _id, address _to)
mint一个NFT给一个人

8.serNewUri(string _uri, uint256 indexed _id)
更新某个token的URI