其他非ethc-20令牌转移操作的合同合同

时间:2017-12-28 10:52:55

标签: blockchain ethereum solidity go-ethereum

我使用官方代码创建令牌合同,并创建了一份新合同。现在我希望使用这个新合同来调用令牌合同,将令牌从A账户转移到B账户,并遇到无可转让配额的问题。

pragma solidity ^0.4.17;

interface Token {
    function approve(address spender, uint256 value) public returns (bool);
    function transferFrom(address from, address to, uint256 value) public returns (bool);   
}


/**
 * The TrxCoin contract does this and that...
 */
contract TrxCoin {

    Token token = Token(0xAc08fe3C9F442990C52904dE997D9972499bD3E6);

    function getContractAddr() view public returns (address) {
        return this;
    }

    function approve(address spender, uint256 value) public {
        require(token.approve(spender, value));
    }

    function transfer(address _to, uint value) public payable {
        require(token.transferFrom(msg.sender, _to, value));
    }
}

当我使用令牌合约直接调用批准方法时,我可以通过新合约进行转移,但我无法通过调用新合同的批准方法直接分配配额。

这是为什么?谢谢你的回答!

1 个答案:

答案 0 :(得分:1)

您之所以遇到此问题是因为您尝试批准合同中的令牌转移,而不是实际所有者的地址。

ERC20 approve方法写入其状态,请求者允许让花费者执行交易。它通过类似allowed[msg.sender][_spender] = _value;

的方式实现

当您从帐户(A)调用令牌合同(C)时,msg.sender设置为address(A)。但是,当您从TrxCoin调用令牌合同时,您现在已经引入了一份新合同(B)作为中间人。链现在是A-> B-> C.在这种情况下,C接收的msg.sender现在是地址(B)。此时,令牌合同状态仍设置为不允许A拥有的任何令牌转移到spender

没有理由通过TrxCoin合同进行审批。只需直接调用令牌合约即可。