TRC-1155

TRC-1155 is the TRON multi-token standard — a single contract can manage fungible, non-fungible, and semi-fungible tokens with batch transfers and approvals.

📘

Prerequisites

TRC-1155 is the multi-token standard on TRON. A single TRC-1155 contract can represent and manage many tokens at once — fungible (like TRC-20), non-fungible (like TRC-721), and semi-fungible. It also supports batch operations for transfers, approvals, and balance queries.

TRC-1155 is fully compatible with Ethereum's ERC-1155 standard at the interface level, including the receiver hook selectors. ERC-1155 contracts port to TRON without changes to the receiver hook return values — see the compatibility callout below.

When to use TRC-1155 vs TRC-20 / TRC-721

ScenarioBest fit
Single fungible token (USDT-like, governance, utility)TRC-20
NFT collection where every token is uniqueTRC-721
Game items where some are unique and others are stackableTRC-1155
Many fungible tokens issued by one projectTRC-1155
Reducing on-chain redundancy for many similar token typesTRC-1155

Key features

Multiple token types in one contract

A single TRC-1155 contract can hold many token types, identified by id. Compared to deploying one TRC-20 contract per fungible token, this dramatically reduces on-chain space. Compared to TRC-721 (where every NFT in a collection shares the same configuration), TRC-1155 lets each id have its own metadata, supply, and properties.

When the supply of a given id is exactly 1, that token is effectively an NFT.

Batch transfer

In addition to single-token safeTransferFrom, TRC-1155 provides safeBatchTransferFrom — transfer multiple different tokens to a destination in one call, saving resource consumption.

Batch approval

TRC-1155 does not support per-amount approvals. Instead, setApprovalForAll(operator, true|false) authorizes (or revokes authorization for) an operator to manage every token under the contract on the caller's behalf.

Batch balance query

balanceOfBatch queries the balance of multiple tokens across multiple accounts in a single call.

Receive hooks

TRC-1155 contracts that receive tokens must implement the TRC1155TokenReceiver interface, and the hook function must return the predefined 4-byte selector. See TRC-1155 receive hooks.

interface TRC1155TokenReceiver {
  function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _value, bytes calldata _data) external returns (bytes4);
  function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external returns (bytes4);
}

When TRC-1155 tokens are transferred to a contract, the matching hook function is called. If the hook returns the correct value, the contract receives the tokens normally; otherwise the transfer reverts. The hook is what makes safe transfer safe.

📘

ERC-1155 compatibility

TRC-1155 uses the same hook function names and selectors as Ethereum's ERC-1155: onERC1155Received returns 0xf23a6e61, and onERC1155BatchReceived returns 0xbc197c81. This is different from TRC-721, which uses a TRON-specific receiver hook selector. ERC-1155 contracts can be ported to TRON without changing the receiver hook implementation.

Safe transfer rules

The TRC-1155 standard defines safe-transfer requirements for each interface. For the full specification, see TIP-1155.


In this section

Related resources