我有一个令牌交换(合同A)和另一个合同(合同B),它已经可以接受令牌并在接收令牌时运行逻辑。现在,我想知道如何向不运行逻辑的契约发送令牌。相反,它只应增加合同(B)令牌余额。合同是如何知道它(B)在我刚刚发送令牌时有多少令牌的?
这是目前的结构:
contract A {
/**
* Transfer token to a specified address and forward the data to recipient
* ERC-677 standard
* https://github.com/ethereum/EIPs/issues/677
* @param _to Receiver address.
* @param _value Amount of tokens that will be transferred.
* @param _data Transaction metadata.
*/
function transferAndCall(address _to, uint256 _value, bytes _data)
external
returns (bool)
{
require(_to != address(0));
require(canAcceptTokens_[_to] == true); // security check that contract approved by the platform
require(transfer(_to, _value)); // do a normal token transfer to the contract
if (isContract(_to)) {
B receiver = B(_to);
require(receiver.tokenFallback(msg.sender, _value, _data));
}
return true;
}
}
contract B {
/**
* @dev Standard ERC677 function that will handle incoming token transfers.
*
* @param _from Token sender address.
* @param _value Amount of tokens.
* @param _data Transaction metadata.
*/
function tokenFallback(address _from, uint256 _value, bytes _data)
onlyTokenContract()
external
returns (bool)
{
// allocate tokens
tokenBalanceLedger_[_from] = SafeMath.add(tokenBalanceLedger_[_from], _value);
tokenSupply_ = SafeMath.add(tokenSupply_, _value);
return true;
}
}发布于 2018-10-13 12:55:09
如果您只是将余额从一个契约发送到另一个契约,则可以使用token.transfer(to, amount);方法更新合同的余额。对于像ERC677这样的令牌,对于向契约的简单传输不会调用回退方法,这需要transferAndCall触发回退。
当使用令牌的transfer方法时,接收契约不知道它已经将令牌转移到它,因为实际上您只与令牌契约本身交互,更新余额。但是,您仍然可以使用一个方法来检查它与token.balanceOf(address(this))之间的平衡。
https://ethereum.stackexchange.com/questions/60524
复制相似问题