Any mint/burn/transfer path must update balances and totalSupply synchronously.
The internal helper functions update:
balances
allowances
totalSupply
independently, with no invariant checks.
This means certain execution paths can alter balances without adjusting total supply (or vice versa), leading to permanent supply desynchronization.
Likelihood:
Normal sequences of operations (mint → transfer → burn) can accidentally break supply invariants without malicious behavior.
Fuzzing with randomized order of internal calls will routinely surface mismatches.
Impact:
Token supply becomes unreliable (phantom tokens, lost tokens).
Integrations like DEXes, staking pools, and bridges become insolvent.
Balances no longer match the total supply.
You can implement _sumBalances() only in test builds using forge’s vm.snapshot() to avoid gas overhead in production.
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.