Transfer failures
This section explains how to identify where a transfer failed and resume the transfer manually.Transaction steps overview
Bridge transfers use Circle’s CCTP protocol provider, which breaks each transaction into 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.
Transfer result details
When a transfer fails, Bridge Kit returns aBridgeResult object showing which
steps completed and which failed. This lets you resume the 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 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 transfer
If a 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 transferring 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 transfers, use Solana Explorer or
SolScan.
If the transaction failed mid-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 transfer operations in try-catch including adapter setup and bridge calls.
- Always save the 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 transfer state for recovery scenarios.