在ethereum合同中使用.send()函数发送醚时,醚来自何处

时间:2017-08-22 10:55:55

标签: token ethereum solidity

我在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(收入)表示将醚发送给卖家。我的问题是:

要发送的醚来自msg.sender还是来自令牌合同? 我认为他们来自msg.sender。但是msg.sender实际上是代表卖家的吧?这使卖家发送自己的醚。我可以知道如何理解这一点。然后我如何签订合同自动将ethers发送回用户帐户?

谢谢!

1 个答案:

答案 0 :(得分:1)

我做了一些测试来弄清楚这个问题。我发现发送到目的地址的醚来自令牌合同实例地址。

之前我很困惑,因为我不明白合同实例在构建之后如何获得ethers。现在我知道当一个帐户调用一个由合同的关键字 paid 标记的方法时,合同实例会获得ethers。当调用发生时,同时将醚发送到合同地址。在demo token code中,方法是buy()扮演将醚发送到合同地址的角色。

我是学习以太坊合约的新手。关于我意识到的可能还有一些错误。如果有,请告诉我。欣赏!

谢谢!