TRON Developer Hub CN

TRON开发者中心

欢迎来到TRON开发者中心。您将找到全面的指南和文档,以帮助您尽快开始使用TRON Developer Hub,并在遇到困难时提供支持。让我们跳进去吧!

Get Started    

TRC10智能合约转让

介绍

TRC10 代币是波场中的系统级代币类型。与 TRC20 代币相比,TRC10 代币面临用户体验灵活性问题。 在Odyssey 3.2中,开发人员及其智能合约调用者可以根据合同逻辑,通过智能合约与TRC10代币交互,从而使他们能够更好地在业务场景中控制代币执行。 与TRC20代币不同,发送TRC10代币与在合同中传输TRX一致,这意味着TRC10的使用量类似于TRX使用量。

将 TRC10 转到智能合约账户

TRC10 代币可以通过合约调用转移到智能合约。 合同调用使用DeployContract和TriggerContract的两个gRPC API。

钱包-CLI和示例

部署合约

deployContract <contractName> <abi> <bytecode> <constructor signature>   <constructor params> <isHex> <feeLimit> <consumer_percentage> <energyLimit> <callValue> <tokenValue> <tokenId>
deployContract testContract [{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"f1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"i","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}] 6080604052600160005534801561001557600080fd5b50d3801561002257600080fd5b50d2801561002f57600080fd5b5060ef8061003e6000396000f30060806040526004361060485763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166382e7eb3d8114604d578063e5aa3d5814607c575b600080fd5b348015605857600080fd5b50d38015606457600080fd5b50d28015607057600080fd5b50607a60043560b8565b005b348015608757600080fd5b50d38015609357600080fd5b50d28015609f57600080fd5b5060a660bd565b60408051918252519081900360200190f35b600055565b600054815600a165627a7a72305820cd4cf61efb71c4c984be5b1e4d84459871b6b10a93a80874a8a96fa3685cccb10029 # # false 1000000000 0 100000000 0 0 1000001

触发合约

triggercontract <contractAddress> <function signature> <function_parameters> <isHex>  <feeLimit> <callValue> <tokenValue> <tokenId>
triggercontract TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6 set(uint256, uint256) 1,1 false  1000000       0            10             1000001  

新参数说明

tokenValue
调用方希望从调用方帐户发送到合约帐户的代币金额。

tokenId
目标代币标识符,是ProtoBuf中的int64类型。 在钱包客户端中,使用#表示 tokenId 的无效字段。

注意

OriginEnergyLimit是Odyssey_v3.2中的一项新功能。它可以限制呼叫者花费开发人员能量时的能量成本。 这意味着合约所有者可以设置最大能源成本值,以避免其他用户过度使用所有者的资源。

TokenId也是 Odyssey_v3.2 中的新功能。它可以在帐户中名为 assetV2 的新地图字段中找到。 使用 GetAccount(Account)获取 tokenId 及其值。 TokenId 由系统从数字 1_000_001 开始设置。 创建新的 TRC10 代币时,数字加 1 并设置此代币的 ID。

智能合约中的TRC10交互

TRC10 合约示例

pragma solidity ^0.4.24;
contract transferTokenContract {
    constructor() payable public{}
    function() payable public{}
    function transferTokenTest(address 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 代币类型

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

转移代币

address.transferToken(uint256 tokenValue, trcToken tokenId)

Odyssey_v3.2 为 TRON solidity 编译器中的 TRC10 代币传输定义了一个新的 transferToken 函数,并且在 JAVA-TRON 中也得到了支持。 地址类型变量调用此本机函数。这意味着当前合同希望将特定数量的目标代币从合同的帐户,转移到此地址的帐户。 TransferToken 函数与 transfer(uint256)函数共享类似的机制。 只有 2300 能量被发送到此函数,及其相关的回退函数。

代币余额查询

address.tokenBalance(trcToken) returns(uint256 tokenAmount)

Odyssey_v3.2为 TRC10 代币余额查询定义了一个新的 tokenBalance 函数。 地址类型变量调用此本机函数,该函数返回地址帐户拥有的目标代币数量。

TokenValue & TokenID

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

Solidity 编译器

GitHub

Odyssey v3.2

重要提示

在 JAVA-TRON Odyssey_v3.2 中的 ALLOW_TVM_TRANSFER_TRC10 提案获得批准之前,新 TRON / solidity Odyssey_v3.2 编译器生成的字节码将无法工作。 因此,TRON-Studio 和依赖于 TRON 编译器的任何其他工具不应导入版本 3.2 编译器并向公众公开,直到链上批准 ALLOW_TVM_TRANSFER_TRC10 提议为止。

TRC10智能合约转让


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.