我一直在尝试使用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);