transferFrom, the spender's allowance should be reduced by the transferred amount. The normal behavior, as implemented by OpenZeppelin and followed by most ERC20 contracts, is to emit an Approval event reflecting the new (reduced) allowance after each successful spend operation.The specific issue is that the _spendAllowance function reduces the allowance in storage but does not emit the corresponding Approval event. This creates a discrepancy between the on-chain state and the event logs that off-chain systems rely on
Likelihood: HIGH
Reason 1: This function will be called every time transferFrom is used with a non-infinite allowance. Since transferFrom is a core ERC20 function used in DeFi protocols, exchanges, and wallet interactions, this missing event will occur in virtually all token transfer scenarios.
Reason 2: Any protocol integration that tracks allowances via events will encounter this inconsistency. Given that event-based tracking is standard practice for indexers, explorers, and monitoring tools, this affects the majority of ecosystem tooling.
Impact:
Impact 1: Off-chain systems (indexers, block explorers, wallets) will display incorrect allowance values, as they rely on Approval events to update allowance state. Users and integrators will see stale allowance data.
Impact 2: DeFi protocols and smart contracts that monitor allowance changes via events may malfunction. For example, a contract that listens for allowance approvals to trigger subsequent operations will not detect allowance decreases from transferFrom calls.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.