What it means
This is a revert from the token contract itself. Before moving tokens, the contract checks that the sender holds at least the requested amount; when that check fails, it aborts with this message and rolls everything back.
The comparison is made in raw integer units, not in the figure your wallet displays. That is where most confusion starts.
Why it happens
The decimals were misread
Token balances are stored as whole numbers and scaled by the contract’s decimals value. A token with six decimals stores one unit as 1000000. Supplying a raw amount where a human amount was expected — or the reverse — misstates the transfer by orders of magnitude. The token amount converter shows both forms.
You are holding a different version of the token
Bridged and native versions of the same-named token are separate contracts with separate balances. A balance in one does not fund a transfer of the other. See USDC vs USDC.e.
You are on a different network
The same token symbol exists on many networks as separate deployments. The balance you are looking at may be on a network other than the one the transaction is running on.
A pending transaction already spent it
An earlier transfer that has not yet confirmed may already have committed the balance.
A fee-on-transfer token
Some tokens deduct on every transfer, so sending an exact full balance can come up short.
How to fix it
- Confirm which network the transaction is on and check the token balance on that network.
- Confirm you are sending the token version you actually hold, by contract address rather than by symbol.
- Check the decimals and convert the amount properly before submitting.
- Try sending slightly less than the full balance.
How to avoid it
Read balances by contract address on the network in question, not by ticker. When working with raw amounts — in a contract call, a script or a block explorer — convert them explicitly rather than assuming eighteen decimals.
Frequently asked
My wallet shows enough. Why does the contract disagree?
Most often because the amount was expressed in the wrong scale, or because the balance you are reading is a different token version or a different network from the one the transaction runs on.
What are token decimals?
A value published by the contract saying how many integer units make one whole token. USDC commonly uses six, so one USDC is stored as 1000000. Many tokens use eighteen.
Was I charged?
Yes, if the transaction was broadcast and reverted on chain. If your wallet caught it during simulation and refused to send, nothing was charged.
Sources & further reading
- Ethereum: ERC-20 token standard
Balance storage as integers and the decimals value.
- ERC-6093: custom errors for commonly-used tokens
Standardised token error conditions, including insufficient balance.
- Etherscan: reasons for failed transactions
How a reverted transaction is displayed and what state is rolled back.
- Circle: USDC contract addresses
Per-network deployments whose balances are separate.
Sources checked on 18 September 2026. Network features and platform support can change; check the relevant provider before acting.
AI-assisted editorial content; no independent expert review is claimed. Error behaviour varies between wallets, networks and client versions. This is educational information, not investment advice. Read our editorial policy.