首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向第二个合同发送代币;合同是如何知道的?

向第二个合同发送代币;合同是如何知道的?
EN

Ethereum用户
提问于 2018-10-13 11:02:51
回答 1查看 83关注 0票数 0

我有一个令牌交换(合同A)和另一个合同(合同B),它已经可以接受令牌并在接收令牌时运行逻辑。现在,我想知道如何向不运行逻辑的契约发送令牌。相反,它只应增加合同(B)令牌余额。合同是如何知道它(B)在我刚刚发送令牌时有多少令牌的?

这是目前的结构:

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Ethereum用户

发布于 2018-10-13 12:55:09

如果您只是将余额从一个契约发送到另一个契约,则可以使用token.transfer(to, amount);方法更新合同的余额。对于像ERC677这样的令牌,对于向契约的简单传输不会调用回退方法,这需要transferAndCall触发回退。

当使用令牌的transfer方法时,接收契约不知道它已经将令牌转移到它,因为实际上您只与令牌契约本身交互,更新余额。但是,您仍然可以使用一个方法来检查它与token.balanceOf(address(this))之间的平衡。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/60524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档