I've checked this so many times, also went back to my older codes (that works), I do not understand why this is giving an allowance of zero. I've been stuck all day, what did I miss here?
const approve = await usdc.approve(contract.address, 1000);
const numAllw = await usdc.allowance(user1.address, contract.address);
console.log(numAllow) // is zero
I know increaseAllowance can just performed both, but my returned allowance is still zero. await usdc.connect(user1).increaseAllowance(user1.address, contract.address);
await contract.connect(user1).doStuff(1000)
contract Contract {
///...
function doStuff(uint amount) public returns (bool) {
// user send usdc
USDC.transferFrom(msg.sender, address(this), amount);
emit SendUSDC(msg.sender, amount);
}
}
reverted with reason string 'ERC20: insufficient allowance'
It should work so something you are doing isn’t correct, however without posting the exact code and transaction it’s hard to say what.
There approve function should return a true or false value telling you if it succeeded. Maybe the Usdc address is incorrect or different between you client side and Usdc address set in your contract?
Just checked, it returns true on approved.
Also checked usdc totalSupply calling from the contract, also returned a value. So the usdc address isn't incorrect.
This is all strange now . But thanks, it gives me some direction to debug into.