Home
» Ecosystem
»
Cross-Chain Bridge Finality: Why a Completed Source Transaction May Still Be Pending
Cross-Chain Bridge Finality: Why a Completed Source Transaction May Still Be Pending
A cross-chain transfer can look contradictory: the source-chain explorer says the transaction succeeded, yet the bridge still shows “pending.” In many cases, that is expected rather than a sign that the transfer failed.
The reason is that a bridge has to make a second decision after the source transaction is included in a block: is that block final enough to safely trigger an action on another chain? That decision may involve waiting for protocol-level finality, a minimum block depth, validator or guardian attestations, message delivery, and destination-chain execution.
A successful source-chain transaction may still need to pass bridge-specific finality, attestation, relay, and destination-execution stages before funds become available on the destination chain.
The first misconception: “Confirmed” always means “final”
What is verified: block inclusion and finality are not the same concept on many networks. Ethereum, for example, distinguishes between a transaction being included in the canonical chain and its block being finalized. Ethereum’s proof-of-stake documentation says finality is reached through checkpoint voting by a supermajority of staked ETH. The network also documents that a block can be considered finalized only after the relevant consensus conditions are met.
That difference matters to bridges because a bridge may not want to release, mint, or execute assets on a second chain while the source event could still be reorganized out of the source chain. Chainlink’s CCIP documentation explicitly states that, by default, it waits for full source-chain finality before validating and executing a cross-chain message. Wormhole likewise documents configurable consistency levels that determine how long guardians wait before attesting to a message.
What to do: do not treat the word “Success” or “Confirmed” on a block explorer as proof that the bridge has reached its own release threshold. Check the bridge’s transaction tracker or protocol documentation for its required finality level.
Why bridges deliberately wait after a successful source transaction
1. Reorganization risk has not necessarily disappeared
What is verified: a recently included block can, depending on the chain and its consensus model, still be replaced by a different canonical history. For a cross-chain system, that creates a serious problem: if the destination chain releases assets first and the source transaction later disappears in a reorganization, the destination action may no longer have valid backing.
This is why bridge protocols often trade speed for reorganization resistance. Wormhole’s current finality documentation explicitly describes this trade-off: faster consistency levels reduce latency but increase reorg exposure, while a finalized setting provides stronger protection at the cost of additional wait time. Chainlink makes the same distinction in its Faster-Than-Finality documentation and warns that acting before full finality can create risks such as duplicate execution or unbacked tokens, depending on the transfer design.
What to do: if the bridge status says it is waiting for confirmations, finality, guardians, or verification, allow that stage to complete before assuming the transfer is stuck.
2. The bridge may use a stricter threshold than your wallet or explorer
What depends on the protocol: there is no universal number of confirmations that means “safe enough” for every bridge. Some systems use a chain’s finalized JSON-RPC tag. Others use a configured number of blocks. Some support lower-latency modes with explicitly different security assumptions.
Chainlink’s finality documentation says CCIP can determine finality either from a finality tag or by waiting for a defined block depth when necessary. Wormhole uses a consistency level chosen for the source chain and message. Those examples show why two bridges can legitimately display different pending times for the same source network.
What to do: compare the status against the specific bridge and route you used, not against a generic “X confirmations should be enough” rule from another protocol.
3. L2 transactions can have more than one meaningful notion of finality
What is verified: Layer 2 networks can expose a fast local or sequencer-level view before the underlying settlement system reaches stronger finality. Chainlink’s chain-finality guide explicitly separates soft finality from hard finality for L2s and notes that the two-layer model can affect cross-chain timing.
For users, this means a transaction on an L2 may look settled almost immediately in the L2 explorer while a bridge still waits for the data or state commitment to reach the security threshold it relies on.
What to do: if the source is an L2, check whether the bridge tracks L2 local confirmation, L1 settlement, or another protocol-specific finality signal. Do not infer bridge completion from the sequencer’s confirmation alone.
Finality is only one stage of the bridge lifecycle
A transfer can remain pending even after source finality is reached. Cross-chain systems usually have additional stages between “source final” and “destination complete.” The exact names vary, but the following sequence is common.
Stage
What may be happening
What you can check
Source inclusion
Your transaction was accepted into a source-chain block.
Source transaction hash and block status.
Finality or confirmation wait
The bridge is waiting for its required security threshold.
Bridge status page; source block age or finalized status.
Attestation or verification
Guardians, validators, oracle networks, or proof systems verify the source event.
Message or attestation status if the bridge exposes it.
Relay or proof delivery
A signed message, Merkle root, proof, or relay transaction is sent toward the destination.
Bridge explorer or message identifier.
Destination execution
The destination contract releases, mints, swaps, or calls the requested action.
Destination transaction hash and receipt.
Attestation can add latency after finality
What is verified: Wormhole describes guardians observing source-chain messages and producing a signed Verifiable Action Approval only after the configured consistency requirement has been met. Chainlink CCIP similarly describes a committing network that waits for source finality before relaying a commitment toward the destination chain.
That means “finalized on source” and “message available for destination execution” can be separate timestamps.
What to do: if the protocol offers a message explorer or attestation endpoint, check that next. A completed source transaction alone does not reveal whether the cross-chain message has been signed or committed.
Destination execution can fail or wait even after the message arrives
What is verified: the destination step can have its own execution conditions. Chainlink’s CCIP documentation includes manual-execution flows for messages that reached the destination path but failed during execution, for example because of gas or receiver-logic issues. Its newer finality controls also document cases where a destination receiver rejects a message whose requested finality configuration it does not allow.
What depends on the bridge: other protocols may use relayers, solvers, liquidity providers, canonical bridges, proof generators, or user-triggered claims. A “pending” label can therefore mean very different things after source finality.
What to do: look for a destination transaction hash. If there is none, the message may still be in verification or relay. If there is a destination hash but it reverted or failed, use the bridge’s documented retry or support path rather than resubmitting the original source transaction.
A faster bridge is not always using weaker source finality
This is another common misunderstanding.
What is verified: some intent-based bridges can give the recipient funds before the protocol’s slower settlement process is finished. Across, for example, documents an intent model in which relayers or solvers can fill a user on the destination chain quickly and get repaid later. Its documentation separately describes settlement flows that may wait for Ethereum finality and proof generation.
So a fast user experience does not automatically mean the bridge ignored finality. It may mean an intermediary advanced destination liquidity while assuming the settlement risk.
What to do: distinguish between user fill time and protocol settlement time. If the recipient already has the expected assets, a later settlement status may concern the relayer’s reimbursement rather than your access to funds.
When pending is normal and when to investigate
The source transaction hash by itself cannot tell you whether a pending bridge transfer is healthy. The useful question is: which stage is waiting, and has it exceeded the protocol’s documented range?
Usually normal: the source transaction is recent and the bridge explicitly says it is waiting for confirmations, finality, verification, or an attestation.
Needs closer checking: the documented finality window has passed but no bridge message or destination transaction appears.
Potential execution issue: a destination transaction exists but failed or reverted.
Potential routing or liquidity issue: an intent-based bridge shows no fill even though the source deposit is accepted and the quoted fill window has passed.
Potential service issue: the bridge’s own status page reports a relayer, validator, sequencer, proof-generation, or RPC incident.
What to do: record the source transaction hash, source chain, destination chain, token, amount, bridge name, and bridge message ID if one exists. Those details are far more useful to support than a screenshot that only says “pending.”
A practical status-check order
Verify that the source transaction succeeded and interacted with the expected bridge contract.
Check whether the source block has reached the bridge’s required finality or confirmation threshold.
Check the bridge’s own tracker for an attestation, message, proof, relay, or fill status.
Look for a destination transaction hash.
If a destination transaction exists, inspect whether it succeeded or reverted.
If the documented timing has been exceeded, check the protocol’s official status page or support channel before sending another transfer.
Do not send a duplicate transfer merely because the first one appears pending. A delayed cross-chain message can still execute later, and duplicating the source action may create a second valid transfer.
What remains unknowable without the exact bridge and route
No generic article can tell you the exact wait time for every cross-chain transfer. Timing changes with the source chain, destination chain, bridge architecture, requested finality setting, token model, relayer design, proof system, congestion, and operational incidents.
A completed source transaction proves that your source-chain action was accepted. It does not necessarily prove that the bridge has reached its required finality, produced its attestation or proof, relayed the message, or completed destination execution.
When a bridge remains pending, identify the exact stage before taking action. That single habit prevents two costly mistakes: assuming a normal finality wait is a failure, and resubmitting a transfer that may still complete normally.