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

问题描述 投票:0回答:1

我使用官方代码创建了一个令牌合同,并且我创建了一个新合同。现在我希望使用这个新合同来调用令牌合同,将令牌从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));
    }
}

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

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

blockchain ethereum solidity go-ethereum
1个回答
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合同授权批准。只需直接调用令牌合约即可。

© www.soinside.com 2019 - 2024. All rights reserved.