【发布时间】: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 中调用对令牌的批准。因此,您需要直接从代币合约中使用诸如以太币之类的东西来批准转移