TRC10 Transfer in Smart Contracts


TRC10 token is a system-level token type in TRON. Compared to TRC20 tokens, TRC10 tokens face a user experience flexibility issue. In Odyssey 3.2, developers and their smart contract callers can interact with TRC10 token via smart contracts according to the contract logic, do TRC10 token transfers in smart contracts, giving them more control to implement their token in business scenarios. Unlike a TRC20 token, sending TRC10 tokens is consistent with transferring TRX in a contract, TRON developers added an interface specifically for TRC10 transfers and queries in solidity.

Example of transferring trc10 in a contract

pragma solidity ^0.5.0;

contract transferTokenContract {
    constructor() payable public{}
    function() payable external {}
    function transferTokenTest(address payable toAddress, uint256 tokenValue, trcToken id) payable public    {
        toAddress.transferToken(tokenValue, id);
    function msgTokenValueAndTokenIdTest() public payable returns(trcToken, uint256){
        trcToken id = msg.tokenid;
        uint256 value = msg.tokenvalue;
        return (id, value);
    function getTokenBalanceTest(address accountAddress) payable public returns (uint256){
        trcToken id = 1000001;
        return accountAddress.tokenBalance(id);

TRC10 token type
Odyssey_v3.2 defined a new type (trcToken) for TRC10 token, which represents the tokenId in a token transfer operation. TRC10 token can be converted to uint256 type and vice versa.

trcToken id = 1000001;

TRC10 transfer in contract

address.transferToken(uint256 tokenValue, trcToken tokenId)

Query the TRC10 balance in the contract

address.tokenBalance(trcToken) returns(uint256 tokenAmount)

Odyssey_v3.2 defines a new tokenBalance function for TRC10 token balance query.

TokenValue & TokenID
Msg.tokenvalue, represents the token value in the current msg call, with a default value of 0. Msg.tokenid, represents the token id in current msg call, with a default value of 0.