我在看以太坊网站上的代码,这个代码是做什么的?
interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); }
请访问:https://ethereum.org/token#full-coin-code
谢谢!
发布于 2017-09-25 00:21:10
它不做任何事情,因为它是一个接口。接口是一种定义约束的方法,这样您就可以与实现约束的任何对象通信,并知道接口中定义的函数将存在于实现中。
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);
}
}
如果调用失败,它将出错,这是我们需要发生的事情,以防止诸如令牌之类的事情被发送到无法对其执行任何操作的约定。因为固定性是原子的,并且以事务性的方式工作,如果契约不能接收到它,那么它将回滚所有已经执行的功能。
https://stackoverflow.com/questions/46385742
复制相似问题