以太坊契约中的接口功能

时间:2017-09-24 01:36:16

标签: solidity

我正在查看以太坊网站上的代码,这段代码有什么作用?

interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); }

可在:https://ethereum.org/token#full-coin-code

获取

谢谢!

1 个答案:

答案 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是原子,并且如果合同无法接收,它以事务方式工作,那么它将回滚已经执行的所有功能。