2
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)不起作用。

请帮我解决这个问题。

4

1 回答 1

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 以太币。

  1. address(_seller).transfer(msg.value)将 1 个以太币转移到_seller.
  2. address(_buyer).transfer(msg.value)将 1 个以太币转移到_seller.
  3. msg.sender.transfer(msg.value)将 1 个以太币转移到_seller.

它失败了,因为只有 1 个以太。

于 2021-03-19T16:24:28.970 回答