Надежная отправка 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);
    }
}
Другие вопросы по тегам