如何在solidity 0.5.0中将etherenum发送到msg.sender
Posted
技术标签:
【中文标题】如何在solidity 0.5.0中将etherenum发送到msg.sender【英文标题】:How to send etherenum to msg.sender in solidity 0.5.0 【发布时间】:2021-06-16 12:18:49 【问题描述】:mapping(uint => Product) public products;
struct Product
uint id;
string name;
uint price;
address payable owner;
bool purchased;
function purchaseProduct(unit _id) public payable
Product memory _product = products[_id];
address payable _seller = _product.owner;
address payable _buyer = msg.sender;
address(_seller).transfer(msg.value)
效果很好。
但是msg.sender.transfer(msg.value)
和address(_buyer).transfer(msg.value)
不起作用。
请帮我解决这个问题。
【问题讨论】:
你的合约余额是否足以发送 3 次 msg.value ? 【参考方案1】:在这个区块(添加的行号)中,msg.value 是调用函数时转入合约的以太币数量。
在第 1 行,它已经将所有的以太币转移给了 _seller。 第 2 行和第 3 行将失败,因为没有更多的以太币了。
1 address(_seller).transfer(msg.value);
2 address(_buyer).transfer(msg.value);
3 msg.sender.transfer(msg.value);
示例: 我调用 purchaseProduct() 函数,值为 1 以太币。
address(_seller).transfer(msg.value)
将 1 个以太币转移到 _seller
。
address(_buyer).transfer(msg.value)
将 1 个以太币转移到 _seller
。
msg.sender.transfer(msg.value)
将 1 个以太币转移到 _seller
。
失败是因为只有 1 个以太币。
【讨论】:
以上是关于如何在solidity 0.5.0中将etherenum发送到msg.sender的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 HardHat 调用应付账款 Solidity 函数?
智能合约实战 solidity 语法学习 09 [ 以太坊 ether ERC20标准API介绍及示例 ]name symbol decimals totalSupply balanceOf...
智能合约实战 solidity 语法学习 09 [ 以太坊 ether ERC20标准API介绍及示例 ]name symbol decimals totalSupply balanceOf...
智能合约实战 solidity 语法学习 09 [ 以太坊 ether ERC20标准API介绍及示例 ]name symbol decimals totalSupply balanceOf...(代