Velvet Star Monitor

Standout celebrity highlights with iconic style.

general

ERC20: transfer amount exceeds allowance, even when it is approved

Writer Mia Lopez

Returned error: 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" } }
]

2 Answers

ERC20Tokens[tokenTicker].token.approve(ERC20Tokens[tokenTicker].tokenHolder, 10);

This line approves the tokenHolder to spend your contract's tokens. Not the other way around.

So the transferFrom() fails because your contract is trying to spend the tokenHolder's tokens.


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. Not through a contract in between.

7

For me, it was a mistake of using transferFrom instead of transfer when transferring tokens from the contract.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy