2017-09-24 90 views
0

我在看以太坊網站上的代碼,這段代碼做了什麼?以太坊合同中的界面功能

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

請訪問:https://ethereum.org/token#full-coin-code

謝謝!

+0

您確定這是JavaScript嗎? – tadman

+0

許多語言中的'interface'用於定義協議或對象接口,這是抽象基類的一種替代方法。任何實現該類的類都被假定爲「符合」它,並且它可以作爲一種類型。 – tadman

+1

@tadman這是固體,而不是Javascript。 – WBT

回答

2

它什麼都不做,因爲它是一個接口。接口是定義約束的一種方式,以便您可以與實現它的任何對象進行通信,並知道接口中定義的函數將存在於實現中。這

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

一個例子是一個方式,從一個合同傳達給另一個,看起來像一個收件人

在合同你想傳達給你必須有實現的tokenRecipient的ERC223實現例如

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是原子,如果合約無法接收,它將以事務方式工作,然後它將回滾所有已執行的功能。