0

我需要从我的代币合约中可靠地转移 BNB,有人可以帮忙吗?在 bsc 网络上。

4

1 回答 1

1

要将 BNB 从您的合约中转移给收款人,您可以transfer()使用address payable.

ether单位只是将数字乘以10^18,因为该transfer()方法接受最小单位的金额 - 而不是 BNB(或 ETH,具体取决于您所在的网络)。

pragma solidity ^0.8;

contract MyContract {
    function foo() external {
        address recipient = address(0x123);
        payable(recipient).transfer(1 ether);
    }
}

如果你想接受来自发送方的 BNB,你需要将你的函数标记为payable. 然后他们将能够发送 BNB 以及执行您的功能的交易。

如果您想转移属于您的合约地址的代币,您可以执行代币合约的功能transfer()

pragma solidity ^0.8;

interface IERC20 {
    function transfer(address recipient, uint256 amount) external returns (bool);
}

contract MyContract {

    // this function can accept BNB
    // the accepted amount is in the `msg.value` global variable
    function foo() external payable {
        IERC20 tokenContract = IERC20(address(0x456));
        // sending 1 smallest unit of the token to the user executing the `foo()` function
        tokenContract.transfer(msg.sender, 1);
    }
}
于 2021-12-12T12:34:06.870 回答