如何在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 个以太币转移到 _selleraddress(_buyer).transfer(msg.value) 将 1 个以太币转移到 _sellermsg.sender.transfer(msg.value) 将 1 个以太币转移到 _seller

失败是因为只有 1 个以太币。

【讨论】:

以上是关于如何在solidity 0.5.0中将etherenum发送到msg.sender的主要内容,如果未能解决你的问题,请参考以下文章

使用ethers.js部署Solidity智能合约

Solidity 0.5.0 变量太多

如何使用 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...(代