[英]ERC20: transfer amount exceeds allowance, even when it is approved
Returned error: VM Exception while processing transaction: revert ERC20: transfer amount exceeds allowance返回错误:VM Exception while processing transaction: revert ERC20: transfer amount exceeds allowance
Code:代码:
ERC20Tokens[tokenTicker].token.approve(ERC20Tokens[tokenTicker].tokenHolder, 10);
emit tokenOwnerBalance(ERC20Tokens[tokenTicker].token.balanceOf(ERC20Tokens[tokenTicker].tokenHolder));
ERC20Tokens[tokenTicker].token.transferFrom(ERC20Tokens[tokenTicker].tokenHolder, address(this), 1);
Logs:日志:
[
{
"from":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"topic":"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
"event":"Approval",
"args":{
"0":"0x7A2946b37399fa3F1C9EF81c7Bcf94AE1099D18F",
"1":"0x95Ba4cF87D6723ad9C0Db21737D862bE80e93911",
"2":"10",
"owner":"0x7A2946b37399fa3F1C9EF81c7Bcf94AE1099D18F",
"spender":"0x95Ba4cF87D6723ad9C0Db21737D862bE80e93911",
"value":"10"
}
},
{
"from":"0x7A2946b37399fa3F1C9EF81c7Bcf94AE1099D18F",
"topic":"0xcff530ae4ada35c1dd7ac314ef643b9eb7ae40665958ad5899e2fbc18865444a",
"event":"tokenOwnerBalance",
"args":{
"0":"31000000"
}
}
]
ERC20Tokens[tokenTicker].token.approve(ERC20Tokens[tokenTicker].tokenHolder, 10);
This line approves the tokenHolder
to spend your contract's tokens.此行批准tokenHolder
花费您合约的代币。 Not the other way around.不是相反。
So the transferFrom()
fails because your contract is trying to spend the tokenHolder
's tokens.所以transferFrom()
失败了,因为你的合约正试图花费tokenHolder
的代币。
If you want your contract to be able to spend tokenHolder
's tokens, the tokenHolder
needs to execute the approve()
function on the token
from their address directly.如果您希望您的合约能够花费tokenHolder
的代币,则tokenHolder
需要直接从他们的地址对代token
执行approve()
function。 Not through a contract in between.不是通过两者之间的合同。
For me, it was a mistake of using transferFrom
instead of transfer
when transferring tokens from the contract.对我来说,从合约中转移代币时使用transferFrom
而不是transfer
是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.