如何在solidity 0.5.0中将etherenum发送到msg.sender

问题描述

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

请帮我解决这个问题。

解决方法

在这个区块(添加行号)中,msg.value 是调用函数时转移到合约的以太币数量。

在第 1 行,它已经将所有以太币转移给了 _seller。 第 2 行和第 3 行将失败,因为没有更多的以太币了。

<Response [415]>
no

示例: 我调用 purchaseProduct() 函数,值为 1 个以太。

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...