TRON Developer Hub CN

TRON开发者中心

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

Get Started    

TRC10和TRX转账

介绍

在TRON中TRX和TRC10转账涉及4种类型的合同:

  • TransferContract
  • TransferAssetContract
  • CreateSmartContract
  • TriggerSmartContract

已经被打包上链的交易可以使用 GetTransactionbyId接口可以获取某个交易的详细信息,可以使用 GetTransactionInfoById 获取指定的交易的执行结果。转账确认请参考:转账确认

TransferContract 用于外部账户转账trx资产给外部账户,TransferAssetContract
用于外部账户转账TRC10资产给外部账户。

TransferContract

  • owner_address Bytes)TRX发送者地址

  • to_address Bytes)TRX接受者地址

  • amount int64)要发送的TRX金额

TransferAssetContract

  • asset_name String)TRC10 ID

  • owner_address Bytes)TRC10发送方地址

  • to_address Bytes)TRC10接收方地址

  • amount int64)发送的TRC10金额

CreateSmartContract用于部署智能合约,部署智能合约同时可以给合约转账trx和TRC10资产。TriggerSmartContract是用于调用合约函数,调用合约的同时可以给合约转账trx和TRC10资产。

CreateSmartContract

  • owner_address Bytes)合约部署方地址

  • SmartContract.contract_address Bytes)合约地址

  • SmartContract.call_value int64)发送到智能合约的TRX金额

  • call_value int64)发送到合同地址的TRX金额

  • call_token_value int64)发送到智能合的TRC10金额

  • token_id String)发送的TRC10 ID

TriggerSmartContract

  • owner_address Bytes)调用方地址

  • contract_address Bytes)合约地址

  • call_value int64)发送到合同地址的TRX金额

  • call_token_value int64)发送到合同地址的TRC10金额

  • token_id String)要发送的TRC10 ID

外部地址向合约地址转账TRX和TRC10

Java-tron 3.6.5版本更新并且32号提议通过之后,外部地址将不能使用TransferContract 和TransferAssetContract转账到合约。

如果用户仍然用TransferContract 和TransferAssetContract向合约转账,将返回ContractValidateException类型的异常,异常消息分别是“Cannot transfer TRX to a smartContract.”和“Cannot transfer asset to smartContract.”。用户可以通过判断这两个返回值来确定是否正在向一个合约进行错误的转账。

注意:也可以通过/wallet/getaccount接口确定一个地址是否为合约地址,然后决定使用什么样的方式向该地址转账。/wallet/getaccount接口返回值中如果有一个type字段,且字段的值是 "Contract"说明是合约地址。

如果外部地址确实需要向合约地址进行转账,可以通过如下方式,对已部署的智能合约进行TRX/TRC10转账:

1. 合约存在payable修饰的fallback方法

可以通过调用合约的fallback方法对合约进行转账,如下示例,指定function_selector为"()":

curl -X POST \
  https://api.shasta.trongrid.io/wallet/triggersmartcontract \
    -d '{
    "contract_address": "417FFF5C4448DD213EDAF4BEA5A342265BB0E364FD",
    "function_selector": "()",
    "parameter": "",
    "fee_limit": 1000000,
    "call_value": 1000,
    "call_token_id":1000123,
    "call_token_value":1,
    "owner_address": "41173EBB4F23DBDC69F31065D7F8D2DACAB32E004F"
}'

2. 合约不存在任何的payable入口

原则上建议开发者对合约预留转账的function。对于已经部署的合约,可以部署以下合约代码,采用suicide的方式对目标合约进行转账,selfdestruct函数会销毁一个合约,并强制将TRX或者TRC10余额转账给toAddress:

// solidity source code
pragma solidity 0.5.8;
contract ForceTransfer{
       constructor(address payable toAddress) public payable{
              selfdestruct(toAddress);
       }
}

调用wallet/deploycontract部署合约,并触发selfdestruct强制转账:

curl -X POST \
  https://api.shasta.trongrid.io/wallet/deploycontract \
  -d '{
    "owner_address": "4108c5b06bc93d2f6749991057f8189a31d525e392",
    "fee_limit": 1000000000,
    
    "consume_user_resource_percent": "100",
    "origin_energy_limit": "1000000",
    "abi": "[{\"inputs\":[{\"name\":\"toAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"constructor\"}]",
    "bytecode": "6080604052604051602080604c83398101806040526020811015602157600080fd5b81019080805190602001909291905050508073ffffffffffffffffffffffffffffffffffffffff16fffe",
    "parameter": "00000000000000000000000008c5b06bc93d2f6749991057f8189a31d525e392",
    "name": "ForceTransfer",
    "call_value": 10,
    "token_id": 1000008,
    "call_token_value": 100
}'

Updated about a month ago

TRC10和TRX转账


Suggested Edits are limited on API Reference Pages

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