An IBC transfer showing a timeout is not proof that the source-chain refund has already been processed. For a standard ICS20-style transfer, identify the packet and check whether a timeout or error acknowledgement was actually handled on the sending chain. An elapsed timer in the wallet, destination receipt and source-side refund are separate observations. Resolve the original packet before sending another transfer.
Identify the packet behind the wallet entry
Keep the source chain, destination chain, sending and receiving addresses, token denomination, amount and original transaction hash. For a classic channel-based route, preserve its port, channel and packet sequence where available. These references connect the sending transaction to the cross-chain result. A ticker and approximate time alone may not distinguish several similar transfers.
This article concerns ordinary ICS20-style token transfer semantics, with special care for classic channel-based routes. Newer IBC versions, custom applications and forwarding middleware can expose different identifiers or recovery paths. Identify the actual route before applying a generic instruction. A multi-hop application should not be reduced to one direct packet between your two visible wallets.
The ICS20 token-transfer specification separates sending, receiving, acknowledgement and timeout handling. Its refund callbacks are part of application processing, not merely a countdown reaching zero in a user interface. Read the wallet's label alongside the actual protocol records.
Classify the last verified stage
| Evidence found | What it establishes | Next check |
|---|---|---|
| Source send succeeded | The transfer request was recorded | The packet and destination result |
| Wallet timer elapsed | The application considers a waiting bound passed | Whether a protocol timeout was submitted and handled |
| Destination receipt succeeded | The destination processed the transfer | Acknowledgement state, not an assumed missing-payment refund |
| Error acknowledgement exists | The receiving action reported failure | Source-side handling of that acknowledgement |
| Timeout processing is pending | The source action is not yet established | Relaying and client/status information through official support |
| Successful source refund handling | The sending application processed the return | The correct source asset and wallet display |
| Forwarded or multi-hop route | Several linked stages may exist | Which application and account currently hold the unresolved stage |
A missing acknowledgement is not automatically a missing destination payment. The packet may have been received while the return communication remains unresolved. Conversely, a source success does not establish destination receipt. The packet-lifecycle explanation describes relayers carrying proofs between chains so each side can verify the other's relevant state.
A timeout must become a processed source action
The source does not learn that a receiving deadline was missed simply because your laptop clock advanced. Protocol timeout handling requires the relevant proof and source-side transaction. Relayer delays or chain/client problems can therefore matter after an app displays a timeout. Ask which record is missing rather than assuming the wallet has already reversed the token movement.
The ibc-go transfer implementation shows refund handling for a timeout and for an error acknowledgement. A successful acknowledgement is a different case. This is a reference implementation, not a claim that every fork, middleware route or deployed chain has identical behavior. Check the actual application's state when the simple model does not fit.
A recipient cannot validly receive a packet and also supply an unrelated non-receipt story as though it were the same unresolved stage. The protocol's proofs and packet identity matter. For an ordinary user, the practical consequence is to preserve the identifiers and let official chain or wallet support distinguish reception, acknowledgement and timeout. Do not try to force a refund based only on the word failed in an app.
Check the source asset after refund handling
If the source return was processed, inspect the original sending account and denomination. A source-side token return should not be searched for only under the expected destination ticker. IBC token representations can carry route-specific denomination information. A familiar symbol is not enough to prove that two displayed asset rows are the same balance.
Also distinguish token quantity from network costs. In a fictional same-asset example, an account starts with 20 units, sends 5 and pays a separate 0.02 transaction fee. Its remaining quantity is 14.98. Returning the 5 transfer units would make 19.98, excluding any other activity. The example does not state a real chain fee or promise that every fee is reimbursed.
If an interface remains stale, compare its view with the relevant source-chain record rather than initiating another transfer to test it. Keep later spending in the investigation: a current balance is not the same thing as a historical return event. For custodial or forwarded origins, the protocol's sender may also differ from the end user's visible account, requiring application-level allocation.
Escalate to the party managing the relevant stage
Keplr's IBC support explanation discusses network and relayer delays and contacting the relevant chain team. Its short normal-time estimate is not a universal deadline for every route. Use current chain status and the actual packet evidence. Avoid giving recovery words to someone offering to restart a relayer for you.
For a fictional packet Ash, suppose source sending succeeded and the app now says timeout, but no processed source timeout is visible. The useful question is whether the required source-side handling is pending. For packet Birch, suppose destination reception succeeded and acknowledgement remains open. That is a different state and not a reason to request the same missing-payment refund.
- Save the sending hash, chains, addresses, amount and precise source asset.
- Identify the packet and classic channel/sequence if that route uses them.
- Check destination reception separately from acknowledgement and timeout.
- Locate the actual source-side timeout or error-acknowledgement handling.
- If refund processing completed, reconcile the source account, denomination, fees and subsequent activity.
- Send legitimate support the last verified stage and public references before authorizing a new transfer.
Use the Mintscan guide for chain records and Cosmos fees for the cost distinction. A no-account swap has its own asset and network instructions; it is not automatically the same route as a wallet's IBC transfer. Diagnose the existing packet and account for any return before creating another order or send.
FAQ
Does a timed-out Keplr IBC transfer mean the refund is already visible?
Not necessarily; check whether source-side timeout handling was actually processed. A wallet's elapsed timer and the application refund are separate observations.
Can an IBC transfer be received while acknowledgement is still pending?
The destination receipt and return acknowledgement are separate stages. Verify both before treating the transfer as an undelivered packet eligible for timeout handling.
Should I repeat a Keplr IBC transfer to recover the first one?
A new send creates another transfer rather than resolving the original packet. Locate the original timeout or acknowledgement result and reconcile any return first.
Related on KOT.CASH
Sources
- github.com/cosmos/ibc/blob/main/spec/app/ics-020-fungible-token-transfer/README.md
- github.com/cosmos/ibc/blob/main/docs/2-how-ibc-works/6-packet-lifecycle.md
- github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/keeper/relay.go
- help.keplr.app/general-faq/5R3bMyjtr3tXNeJo8ojSDV/ibc-protocol--ibc-transfer/5So5gM41LhshQCejAWVoBq