TRON Developer Hub CN

TRON开发者中心

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

Get Started    

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

Java-tron 3.6.6版本更新并且35号提议通过之后,外部地址将不能使用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.