Most ERC-20 transaction failures happen for three reasons: the token transfer failed during contract execution, the gas settings were too low, or the token contract itself has restrictions. In most failed transfers, your tokens do not leave your wallet, but the gas fee is still spent. If a transaction is only pending rather than failed, the usual fix is to replace it with a new transaction using the same nonce and a higher fee.
ERC-20 transfers may look simple in a wallet, but they are smart contract interactions on Ethereum-compatible networks. That means a transfer can fail even when the wallet interface appears normal. Broadly, failed ERC-20 transactions fall into three buckets: execution failure on-chain, fee problems that leave the transaction stuck or replaced, and token-specific contract restrictions.
A true failed transaction means the network executed the attempt but the contract reverted or ran out of gas. In that case, the intended token amount usually stays in the sender's wallet, while the gas used for computation is still charged. A pending transaction is different: it has been broadcast but not confirmed yet. In that case, the transfer may still succeed later, or it may be replaced by another transaction with the same nonce.
For users tracking transfers and balances across wallets or exchange deposits, it helps to verify the transaction hash on a block explorer before taking any action. For general account and wallet access, some users manage transfers and exchange activity from the WEEX Exchange alongside their self-custody wallet history, but the diagnosis of an ERC-20 failure still depends on the on-chain transaction status.
When a transaction status shows Fail, it usually means Ethereum validators included the transaction in a block, attempted to execute it, and the execution did not complete successfully. This is not the same as a dropped transaction and not the same as a transaction that is still waiting in the mempool.
| Status | What It Means | What Usually Happens to Tokens | What Happens to Gas |
|---|---|---|---|
| Failed | Execution reached the chain but reverted or ran out of gas | Usually remain in sender wallet | Gas is charged |
| Pending | Broadcast but not yet confirmed | Not settled yet | Not finalized yet |
| Dropped | Removed from mempool or not accepted anymore | No transfer completed | Usually no final on-chain gas charge |
| Dropped and Replaced | Another transaction with the same nonce was accepted instead | Depends on replacement transaction | Gas applies to the confirmed replacement |
This distinction matters because the correct fix depends on the status. If the transaction already failed on-chain, you need to identify the reason before retrying. If it is only pending, you may be able to speed it up or cancel it by submitting a replacement transaction.
Several direct causes appear repeatedly in ERC-20 transfers.
Insufficient token balance: the wallet may not hold enough of the token you are trying to send. This can happen after a partial transfer, a token burn, or a wallet UI desync.
Token contract is locked: some tokens are temporarily non-transferable. The project may have paused transfers, activated restrictions, or not enabled trading yet.
Non-standard token behavior: not every token follows the ERC-20 standard cleanly. Some contracts do not emit expected events or use unusual logic, which can make explorers and wallets show confusing errors.
Contract execution error: a message such as Bad Instruction usually points to token contract logic failing during execution. In plain language, something inside the contract said no.
Out of Gas: the transaction did not have enough gas to complete execution. This is especially common when users manually lower gas limits or when wallet estimates are disrupted by unusual token logic.
Every Ethereum transaction needs computational fuel called gas. For a basic ERC-20 transfer, the wallet estimates how much gas the contract call should use. If the gas limit is set too low, execution can stop midway and revert.
This issue can happen for two different reasons that users often confuse:
| Issue | What Went Wrong | Typical Result |
|---|---|---|
| Gas limit too low | The transaction did not have enough execution room | Failed on-chain, gas spent |
| Fee too low | The transaction was not attractive enough to be picked quickly | Pending, delayed, or replaced |
On Ethereum, network demand changes continuously. If you manually edit advanced settings without understanding them, you can create a transfer that is cheap but impractical to process. For ERC-20 tokens with extra transfer logic, a bare-minimum gas limit can be especially risky.
If your transaction is still pending, do not immediately assume it failed. Ethereum processes transactions partly by fee competitiveness. A low-fee transaction can remain stuck for a long time while newer, higher-fee transactions move first.
The main fix is a replacement transaction. To replace a pending ERC-20 transaction correctly, you must submit a new transaction with the same nonce as the original one and a higher fee. If you send a new transaction with a different nonce, it will not replace the stuck transaction. You will simply create another transaction and may make the queue problem worse.
Many wallets hide this process behind buttons such as Speed Up or Cancel. Speed Up resends the same action with a higher fee. Cancel usually sends a zero-value transaction to your own address using the same nonce, so the original pending transaction can no longer be confirmed.
Before doing either, check the original transaction hash on a block explorer and confirm that the status is still pending. If the transaction has already failed or been dropped, the next step is different.
The nonce is the sequence number of transactions sent from your wallet address. Ethereum uses it to keep transactions in order. If transaction number 25 is stuck, transaction 26 usually cannot be confirmed ahead of it from the same wallet.
That is why replacing a pending transaction requires the exact same nonce. The network treats the newer, higher-fee version as a replacement candidate for the earlier one. If the replacement is accepted, the original transaction is effectively superseded.
Some wallets let you customize nonce values manually. Others do not expose this setting unless you enable advanced options. If your wallet has built-in Speed Up or Cancel controls, those are usually safer than editing nonce fields directly.
Dropped and replaced means the network stopped considering the original pending transaction because another transaction from the same wallet with the same nonce took its place. This is commonly seen after a speed-up attempt or a cancellation request.
For users, this usually means the first transaction is no longer the one that matters. You should inspect the replacement transaction hash and follow that record instead. If the replacement confirmed successfully, the wallet state will reflect the replacement, not the original broadcast.
This status can also appear if a wallet automatically resubmits transactions in the background with more competitive fees. The important part is not the old hash but which transaction finally settled the nonce.
Yes. This is one of the most serious ERC-20 risks because it may not show up as a normal failed transaction. The ERC-20 standard does not require receiving contracts to implement a token-handling function. As a result, if you send tokens to a contract that cannot manage incoming ERC-20 balances, the tokens may become permanently stuck.
A well-known example is sending a token to the token contract address itself or to another smart contract that was never designed to recover arbitrary ERC-20 deposits. In that case, the transfer may succeed on-chain, but the assets become inaccessible.
This is why checking the destination address matters as much as checking gas. A successful transaction is not always a recoverable transaction.
If a token transfer keeps failing while your balance and fees look normal, the token contract may have built-in restrictions. Some contracts can pause transfers, blacklist addresses, limit trading before launch, or reject transfers under certain conditions.
Practical signs include repeated failures with similar error messages, community reports that the token is temporarily non-transferable, or unusual explorer warnings. In these situations, increasing gas will not solve the underlying issue. The problem is not fee level but contract logic.
When the error points to contract behavior rather than wallet settings, the realistic next step is to review the token's rules or contact the project team. Retrying the same transfer over and over only burns more gas.
A useful response checklist is simple:
Most user-side problems are solved by distinguishing a real execution failure from a simple pending transaction. That single step prevents many unnecessary retries and extra fee losses.
Use the wallet's default gas estimation unless you understand why you are changing it. Double-check the token amount, recipient address, and network before confirming. If you are sending to a dApp or contract, verify that it is designed to receive ERC-20 tokens.
It also helps to avoid sending multiple new transactions from the same wallet while one earlier transaction is stuck, because nonce ordering can block everything behind it. If you need to trade around volatile conditions, many users separate exchange activity from self-custody transfer management so deposits, withdrawals, and token approvals are easier to track on one timeline.
As of now, ERC-20 transfer troubleshooting remains mostly about execution logic, fee management, and address verification rather than about any recent protocol-wide rule change. Understanding those three areas solves the majority of failed-transfer cases.
This article is for general informational purposes only and does not constitute financial, investment, legal, or technical advice.
This content is provided for general informational purposes only and doesn't constitute financial, investment, legal, or tax advice. Any events, rewards, online promotions, or related information mentioned herein should not be considered a recommendation, solicitation, or invitation to purchase, sell, trade, or otherwise deal in any crypto assets. Crypto assets are highly volatile and may result in loss. The availability of WEEX services, products, and related events may vary by region. You are responsible for ensuring that your participation is in accordance with applicable local laws and regulations.

Buy crypto for $1