我在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发送回用户帐户?
谢谢!
答案 0 :(得分:1)
我做了一些测试来弄清楚这个问题。我发现发送到目的地址的醚来自令牌合同实例地址。
之前我很困惑,因为我不明白合同实例在构建之后如何获得ethers。现在我知道当一个帐户调用一个由合同的关键字 paid 标记的方法时,合同实例会获得ethers。当调用发生时,同时将醚发送到合同地址。在demo token code中,方法是buy()扮演将醚发送到合同地址的角色。我是学习以太坊合约的新手。关于我意识到的可能还有一些错误。如果有,请告诉我。欣赏!
谢谢!