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

在智能合约中转账 TRX

在智能合约中,可以通过调用 Solidity 内置的地址成员函数,向其它地址转移存储在合约中的 TRX。

在 Solidity 中,有三种主要方法可以用于在合约中发起 TRX 转账:transfer(), send(), 和 call()

  • 对于简单的 TRX 转账,推荐使用最安全的 transfer() 方法。
  • 关于这些地址成员函数的详细技术说明和差异,请参考 Solidity 官方文档

本文将以 transfer() 方法为例进行说明。

pragma solidity ^0.8.0;

contract SimpleTransfer {

    receive() external payable {}
    fallback() external payable {}

    event TRXTransferred(address indexed recipient, uint amount);

    // 函数:向指定地址转账指定数量的 TRX
    function safeTransferTRX(address payable _recipient, uint _amount) external payable {
        // 确保转账金额大于 0
        require(_amount > 0, "Amount must be greater than zero.");
        
        // 确保合约余额足够
        require(address(this).balance >= _amount, "Insufficient TRX balance in contract.");

        // 使用 transfer() 进行转账。
        // 如果转账失败(例如:目标合约拒绝接收),交易将自动 Revert。
        _recipient.transfer(_amount); 
      emit TRXTransferred(_recipient, _amount);
    }

    // 查询合约当前的 TRX 余额
    function getBalance() public view returns (uint) {
        return address(this).balance;
    }
}