可靠地从智能合约内部发送 BNB

Posted

技术标签:

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

我需要从我的代币合约中可靠地转移 BNB,有人可以帮忙吗? 在 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 发送到非支付功能会恢复...请注意,发送者始终需要迈出第一步 - 如果不主动发送资金,就无法从用户地址提取资金。

以上是关于可靠地从智能合约内部发送 BNB的主要内容,如果未能解决你的问题,请参考以下文章

智能合约实战 solidity 语法学习 10 [ BNB合约解读 ] 附代码

智能合约实战 solidity 语法学习 10 [ BNB合约解读 ] 附代码

如何向合约中质押bnb

恢复发送到自部署合约的 BNB

在智能合约中接受以太币

使用智能合约自动处理公司内部系统?