Надежная отправка BNB из смарт-контрактов
Мне нужно надежно перевести BNB из моего токен-контракта, может ли кто-нибудь помочь с этим? В сети bsc.
1 ответ
Чтобы перевести BNB из вашего контракта получателю, вы можете использовать членский метод
address payable
.
The
ether
единица просто умножает число на
10^18
, потому что метод принимает сумму в наименьших единицах, а не в 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);
}
}