The examples below are focused recovery snippets, not complete runnable scripts.
They assume you have already configured
kit, sourceAdapter, and
destinationAdapter. See Adapter setups
for setup options.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, the App Kit SDK returns aBridgeResult object
showing which steps completed and which failed. Use this result to decide
whether to retry the transfer, inspect a transaction on a block explorer, or
surface a recoverable state to your application.
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
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 pattern shows how to retry when the mint step fails. ThefailingDestinationAdapter placeholder represents a bad destination signer or
RPC setup used to exercise the retry path:
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 EVM 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.