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
| Scenario | Best fit |
|---|---|
| Single fungible token (USDT-like, governance, utility) | TRC-20 |
| NFT collection where every token is unique | TRC-721 |
| Game items where some are unique and others are stackable | TRC-1155 |
| Many fungible tokens issued by one project | TRC-1155 |
| Reducing on-chain redundancy for many similar token types | TRC-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 compatibilityTRC-1155 uses the same hook function names and selectors as Ethereum's ERC-1155:
onERC1155Receivedreturns0xf23a6e61, andonERC1155BatchReceivedreturns0xbc197c81. 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
- TRC-1155 protocol interfaces — full function and event reference
Related resources
- Token standards overview
- TRC-20 — for fungible-only contracts
- TRC-721 — for NFT-only contracts
Updated 20 days ago