Bridge transfer failures
This section explains how to identify where a bridge transfer failed and resume the bridge transfer manually.Transaction steps overview
Each bridge transfer uses Circle’s CCTP protocol provider, which breaks each transaction into various steps:approve: Allows the contract to spend USDC.burn: Burns USDC on the source blockchain and generates an attestation.fetchAttestation: Waits for Circle to sign the burn proof.mint: Mints USDC on the destination blockchain with the attestation.
Bridge result details
When a bridge transfer fails, App Kit returns aBridgeResult object showing
which steps completed and which failed. This lets you resume the bridge transfer
manually using the CCTPv2BridgingProvider, as shown in examples for
failed attestation fetch and
failed mint.
Focus on these BridgeResult properties during recovery:
result.state- shows whether the bridge transfer succeeded or failed (pending,success,error)result.steps- each object contains:name: the name of the stepstate: the status of the steptxHash: the transaction hash if the step completederror: an error message if the step failed
result object for a transaction that failed when
fetching an attestation:
Shell
Note: The
result.source and result.destination from
BridgeResult only contain
address and blockchain properties. To use provider methods for recovery, you
need to reconstruct full wallet contexts with adapter and chain properties.Step analysis
This example shows how to check for completed steps and use a helper function to find specific steps:TypeScript
Recovery scenarios
This section describes how you can implement recovery patterns.Retry a failed bridge transfer
If a bridge transfer fails, you can retry it with theretry method. Pass the
failed BridgeResult and the to and from adapters.
This example shows how the retry method works:
TypeScript
Retry after a failed mint step
This example forces the mint step to fail and then retries with a validto
adapter:
TypeScript
Common issues
This section lists common issues and solutions.Insufficient balance
Ensure you have enough USDC in your wallet before a bridge transfer to avoid an insufficient balance error. This example checks your wallet balance:TypeScript
Transaction stuck or failed
If a transaction is stuck or failed, check the transaction on a block explorer with the returnedtxHash. For Solana bridge transfers, use Solana Explorer or
SolScan.
If the transaction failed during the bridge transfer, check the returned
result.steps to see which transaction steps
completed.
Best practices
Follow these practices for prevention, recovery, and monitoring to improve reliability. Prevention- Test your integration on testnets before deploying on mainnet.
- Monitor gas prices and adjust during network congestion.
- Use dedicated RPC providers such as Alchemy or QuickNode.
- Implement multiple RPC fallbacks.
- Wrap all bridge transfers in try-catch including adapter setup and bridge calls.
- Always save the bridge transfer state for recovery scenarios.
- Verify which steps completed before attempting recovery.
- Use appropriate timeouts and give network operations enough time to complete.
- Implement exponential backoff and use increasing delays for retry logic.
- Use block explorers to verify transaction status.
- Save intermediate results and persist bridge transfer state for recovery scenarios.