我正在查看以太坊网站上的代码,这段代码有什么作用?
interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); }
可在:https://ethereum.org/token#full-coin-code
获取谢谢!
答案 0 :(得分:3)
它没有任何作用,因为它是一个界面。接口是一种定义约束的方法,以便您可以与实现此约束的任何对象进行通信,并且知道接口中定义的函数将存在于实现中。
interface tokenRecipient {
function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData);
}
这方面的一个例子是从一个合同到另一个合同的方式,看起来像是收件人的ERC223实现
在您想与之沟通的合同中,您必须实施tokenRecipient,例如
pragma solidity ^0.4.0;
interface tokenRecipient {
function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData);
}
contract MyContract is tokenRecipient {
function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) {
// functionality
}
}
因此,如果我们现在实施合同,我知道我们可以与任何具有tokenRecipient的合同进行交互,例如。
pragma solidity ^0.4.0;
interface tokenRecipient {
function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData);
}
contract RemoteContract {
function func(address _addr, uint _value) {
tokenRecipient _tokenRecipient = tokenRecipient(_addr);
_tokenRecipient.receiveApproval(msg.sender, _value, address(this), empty);
}
}
如果调用失败将会出错,这是我们需要发生的事情,以防止诸如令牌被发送到无法对其执行任何操作的合同之类的事情。由于Solidity是原子,并且如果合同无法接收,它以事务方式工作,那么它将回滚已经执行的所有功能。