IERC20批准未设置任何值



我一直在尝试使用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中调用对代币的批准。因此,您需要直接从代币合同中使用类似以太坊的东西来批准转账

只需调用transfer函数:

tokenContract.transfer(_to, _amount);

最新更新