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

在智能合约中转账 TRC-10 代币

介绍

与 TRC-20 代币相比,TRC-10 代币面临用户体验灵活性问题。 在Odyssey 3.2中,开发人员及其智能合约调用者可以根据合约逻辑,在智能合约中进行TRC-10代币转账,从而使他们能够更好地在业务场景中控制代币执行。 与TRC-20代币不同,发送TRC-10代币与在合同中传输TRX方法类似, TRON开发者在solidity中增加了专门用于TRC-10的转账和查询的接口。

TRC-10在合约中转账示例

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);
    }
}

TRC-10 代币类型

Odyssey_v3.2 为TRC-10 代币定义了一种新类型(trcToken),它代表代币转账操作中的 tokenId。 TRC10 代币可以转换为 uint256 类型,反之亦然。

trcToken id = 1000001;

合约中 TRC-10 转账

address.transferToken(uint256 tokenValue, trcToken tokenId) 

Odyssey_v3.2 为 TRON solidity 编译器中的 TRC10 代币转账定义了一个新的 transferToken 函数,并且在 java-tron 中也得到了支持。 TransferToken 函数与 transfer(uint256)函数一样,只有 2300 能量被发送到此函数,及其相关的回退函数。

合约中查询 TRC-10 余额

address.tokenBalance(trcToken) returns(uint256 tokenAmount)

Odyssey_v3.2为 TRC-10 代币余额查询定义了一个新的 tokenBalance 函数。

TokenValue & TokenID

Msg.tokenvalue 表示当前 msg 调用中的标记值,默认值为 0。 Msg.tokenid 表示当前 msg 调用中的标记 Id,默认值为 0。