【发布时间】:2022-01-16 03:47:08
【问题描述】:
我需要从我的代币合约中可靠地转移 BNB,有人可以帮忙吗? 在 bsc 网络上。
【问题讨论】:
标签: solidity binance binance-smart-chain bsc
我需要从我的代币合约中可靠地转移 BNB,有人可以帮忙吗? 在 bsc 网络上。
【问题讨论】:
标签: solidity binance binance-smart-chain bsc
要将BNB从你的合约转移给接收者,你可以使用address payable的transfer()成员方法。
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);
}
}
【讨论】:
payable 关键字在这里很重要。如果用户将 BNB value 与交易一起发送,则只有 payable 函数可以接受它。将 BNB 发送到非支付功能会恢复...请注意,发送者始终需要迈出第一步 - 如果不主动发送资金,就无法从用户地址提取资金。