【问题标题】:IERC20 approval is not setting any valueIERC20 批准未设置任何值
【发布时间】:2022-08-07 20:34:10
【问题描述】:

我一直在尝试使用带有以下代码的 IERC20 使我的合约转移代币:

审批功能

function approveTransfer(uint256 _token, uint256 _ammount) external {
        address token = tokenAddresses[_token];
        token.call(
            abi.encodeWithSignature(\"approve(address,uint256)\", address(this), _ammount)
        );
    }

我已经使用基本的IERC20(token).approval(address(this), _ammount) 进行了测试,也没有工作。此外,我尝试批准合同的_owner 而不是合同地址,因为我在某处读到可能因为我的合同是Ownable 可能会导致这种情况,但我不太确定这一点,无论如何它没有工作。

当我尝试使用以下函数获取 Allowance 值时:

function getAllowance(uint256 _token) external view returns (uint256) {
        return IERC20(tokenAddresses[_token]).allowance(msg.sender, address(this));
    }

总是返回我0 并且我已经确保令牌的地址正常工作。当我拨打balanceOf 时,它会返回我账户的确切余额。

这个问题是由于我试图进行转移而引起的,我已经在代码中将其调试到这一点。

注意:对于那些不知道这一点的人。除非是令牌的同一所有者,否则无法在 Solidity 中调用对令牌的批准。因此,您需要直接从代币合约中使用诸如以太币之类的东西来批准转移

    标签: ethereum solidity


    【解决方案1】:

    只需调用transfer 函数:

    tokenContract.transfer(_to, _amount);
    

    【讨论】:

    • 是的。我不知道不可能对不是令牌合同的另一份合同进行批准。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 2011-09-26
    相关资源
    最近更新 更多