可靠地从智能合约内部发送 BNB
Posted
技术标签:
【中文标题】可靠地从智能合约内部发送 BNB【英文标题】:Sending BNB from inside smart contracts with solidity 【发布时间】:2022-01-16 03:47:08 【问题描述】:我需要从我的代币合约中可靠地转移 BNB,有人可以帮忙吗? 在 bsc 网络上。
【问题讨论】:
【参考方案1】:要将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);
【讨论】:
其实我想从收件人那里拿到BNB到我的地址,然后把我的代币发给他。可以解释更多我必须做什么? @M.Alaghemand 没问题,我用一个从用户那里接收 BNB 并发送令牌的简单示例更新了我的答案。 Tnx petr,你说//这个函数可以接受BNB,然后什么都不写amd然后写foo()发送令牌,foo函数只是发送令牌,没有关于发送bnb的,在你的第一个函数而不是 1 ether 我应该写什么? @M.Alaghemandpayable
关键字在这里很重要。如果用户将 BNB value
与交易一起发送,则只有 payable
函数可以接受它。将 BNB 发送到非支付功能会恢复...请注意,发送者始终需要迈出第一步 - 如果不主动发送资金,就无法从用户地址提取资金。以上是关于可靠地从智能合约内部发送 BNB的主要内容,如果未能解决你的问题,请参考以下文章
智能合约实战 solidity 语法学习 10 [ BNB合约解读 ] 附代码