在以太坊合约中使用 .send() 函数发送以太币时,以太币从哪里来
Where do the ethers come from when sending ethers with .send() function in ethereum contract
我正在学习 here 之后的以太坊代币合约。我对下面的代码感到困惑:
function sell(uint amount) returns (uint revenue){
if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell
balanceOf[this] += amount; // adds the amount to owner's balance
balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance
revenue = amount * sellPrice;
if (!msg.sender.send(revenue)) { // sends ether to the seller: it's important
throw; // to do this last to prevent recursion attacks
} else {
Transfer(msg.sender, this, amount); // executes an event reflecting on the change
return revenue; // ends function and returns
}
}
行msg.sender.send(revenue)表示向卖家发送以太币。我的问题是:
要发送的以太币是来自msg.sender还是来自代币合约?
我认为它们来自 msg.sender。不过msg.sender其实是代表卖家的吧?这使得卖家向自己发送以太币。我可以知道如何理解这一点。然后如何让合约自动将以太币发送回用户帐户?
谢谢!
我做了一些测试来弄清楚这个问题。我发现发送到目标地址的以太币来自令牌合约实例地址。
我之前很困惑,因为我不明白合约实例在构造后如何获得以太币。现在我了解到,当帐户调用由合约关键字 payable 标记的方法时,合约实例会获得以太币。当调用发生时,以太币同时被发送到合约地址。在demo token code中,buy()方法起到了发送以太币到合约地址的作用。
我刚开始学习以太坊合约。我的认识可能还有一些错误。如果有请告诉我。非常感谢!
谢谢!
我正在学习 here 之后的以太坊代币合约。我对下面的代码感到困惑:
function sell(uint amount) returns (uint revenue){
if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell
balanceOf[this] += amount; // adds the amount to owner's balance
balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance
revenue = amount * sellPrice;
if (!msg.sender.send(revenue)) { // sends ether to the seller: it's important
throw; // to do this last to prevent recursion attacks
} else {
Transfer(msg.sender, this, amount); // executes an event reflecting on the change
return revenue; // ends function and returns
}
}
行msg.sender.send(revenue)表示向卖家发送以太币。我的问题是:
要发送的以太币是来自msg.sender还是来自代币合约? 我认为它们来自 msg.sender。不过msg.sender其实是代表卖家的吧?这使得卖家向自己发送以太币。我可以知道如何理解这一点。然后如何让合约自动将以太币发送回用户帐户?
谢谢!
我做了一些测试来弄清楚这个问题。我发现发送到目标地址的以太币来自令牌合约实例地址。
我之前很困惑,因为我不明白合约实例在构造后如何获得以太币。现在我了解到,当帐户调用由合约关键字 payable 标记的方法时,合约实例会获得以太币。当调用发生时,以太币同时被发送到合约地址。在demo token code中,buy()方法起到了发送以太币到合约地址的作用。
我刚开始学习以太坊合约。我的认识可能还有一些错误。如果有请告诉我。非常感谢!
谢谢!