【问题标题】:Sending BNB from inside smart contracts with solidity可靠地从智能合约内部发送 BNB
【发布时间】:2022-01-16 03:47:08
【问题描述】:

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

【问题讨论】:

    标签: solidity binance binance-smart-chain bsc


    【解决方案1】:

    要将BNB从你的合约转移给接收者,你可以使用address payabletransfer()成员方法。

    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);
        }
    }
    

    【讨论】:

    • 其实我想从收件人那里拿到BNB到我的地址,然后把我的代币发给他。可以解释更多我必须做什么?
    • @M.Alaghemand 没问题,我用一个从用户那里接收 BNB 并发送令牌的简单示例更新了我的答案。
    • Tnx petr,你说//这个函数可以接受BNB,然后什么都不写amd然后写foo()发送令牌,foo函数只是发送令牌,没有关于发送bnb的,在你的第一个函数而不是 1 ether 我应该写什么?
    • @M.Alaghemand payable 关键字在这里很重要。如果用户将 BNB value 与交易一起发送,则只有 payable 函数可以接受它。将 BNB 发送到非支付功能会恢复...请注意,发送者始终需要迈出第一步 - 如果不主动发送资金,就无法从用户地址提取资金。
    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2021-07-10
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    相关资源
    最近更新 更多