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

01

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.

02

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.

03

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.

04

A pending transaction already spent it

An earlier transfer that has not yet confirmed may already have committed the balance.

05

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

  1. Confirm which network the transaction is on and check the token balance on that network.
  2. Confirm you are sending the token version you actually hold, by contract address rather than by symbol.
  3. Check the decimals and convert the amount properly before submitting.
  4. 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.

PUT IT TO USEConvert a raw token amount

Sources & further reading

  1. Ethereum: ERC-20 token standard

    Balance storage as integers and the decimals value.

  2. ERC-6093: custom errors for commonly-used tokens

    Standardised token error conditions, including insufficient balance.

  3. Etherscan: reasons for failed transactions

    How a reverted transaction is displayed and what state is rolled back.

  4. 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.