问题描述
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 address(_seller).transfer(msg.value); 2 address(_buyer).transfer(msg.value); 3 msg.sender.transfer(msg.value);
将 1 个以太币转移到address(_seller).transfer(msg.value)
。 -
_seller
将 1 个以太币转移到address(_buyer).transfer(msg.value)
。 -
_seller
将 1 个以太币转移到msg.sender.transfer(msg.value)
。
它失败了,因为只有 1 个以太。