Skip to main content
Crypto Readout

Crypto markets, protocols and policy

When Is a Cross-Chain Transfer Actually Complete?

A cross-chain transfer is complete only after the destination chain records the delivery; a source-chain confirmation shows the request began, not that the asset arrived.

By Crypto Readout Editorial3 min read#090fe6

Cover artwork for When Is a Cross-Chain Transfer Actually Complete?

A cross-chain transfer is complete when the destination chain records the intended delivery, not merely when the source transaction is confirmed. First, a wallet submits a transaction to a contract on the source chain. That contract may lock or burn the asset, or request a transfer through a liquidity pool. The source chain includes the transaction in a block. Then a bridge or messaging protocol waits for evidence that the source event is valid. A relayer, validator set, or proof system carries that evidence to the destination. Finally, a destination contract checks it and releases, mints, or sends the asset. Each step has its own status, and “confirmed” can refer to only one of them.

This sequence also explains why an omnichain app can show progress while the asset is still in transit: the source action may be done before the destination action can run. The linked explainer covers the wider design of apps and assets spanning chains. For a transfer, the practical question is narrower: did the destination contract execute the requested action?

What does a source-chain confirmation prove?

A source-chain confirmation proves that the sending transaction was included in a block on that chain. It does not prove that a bridge accepted the event, that a message reached the destination, or that the destination contract succeeded. A block can also be less secure before the chain’s own finality threshold is met. Finality rules differ by chain: some systems treat blocks as increasingly difficult to reverse over time, while others have an explicit finalized state.

Look up the source transaction hash in the source chain’s explorer. Check that the transaction succeeded, that it called the expected bridge or application contract, and that the event names the intended amount and destination. A failed transaction may still have a hash and consume a fee, but it does not start a successful transfer. A pending or recently included transaction may need more time before the bridge treats its event as reliable.

How can you verify delivery on the destination chain?

Find the destination transaction or message record and confirm its execution status. A message marked sent, observed, or relayed has moved through an intermediate stage; it may still be waiting for destination execution. The decisive evidence is a successful destination transaction and the resulting state change: the expected token balance, recipient, and amount are present on the destination chain. If the transfer was meant to trigger an app action, check that action’s result too.

Use the bridge’s status page to follow the handoff, then verify the destination transaction in the destination chain’s explorer. An interface may label a transfer “complete” when its own process ends, but the destination record is the check that shows what actually happened onchain. This distinction matters when the destination transaction reverts: the source event can be valid even though delivery failed and needs a retry or recovery path.

What should you check if the transfer is stuck?

Match the transaction records before taking another action. A useful check is to compare:

  • The source transaction’s success status and destination chain.
  • The bridge or message status, including whether it is waiting for finality or execution.
  • The destination transaction’s result and the recipient’s token balance.
  • The token contract and network, since the same ticker can refer to different assets.

If the source transaction succeeded but no destination execution appears, the transfer is in transit or needs attention through the bridge’s stated recovery process. Avoid repeating the transfer until you know whether the original message can still execute; otherwise, you could send the value twice. A transfer is complete for practical purposes when the destination chain shows the intended result and the asset is available to the intended recipient.