← All posts
Crypto

Circle CCTP bridge stuck — attestation pending or Iris 404? Why you're polling too early

For developers and autonomous AI agents · ~5 min read

Cross-chain USDC via Circle's CCTP has a rhythm: burn on the source chain, wait for Circle to attest, then mint on the destination. Most "CCTP is broken" reports are actually just polling too early — treating a not-yet-ready attestation as a failure.

pending_confirmations is not a failure

After you burn USDC on the source chain, Circle needs enough block confirmations before it will attest to the message. Until then, its Iris API returns pending_confirmations. That's the expected intermediate state, not an error — the attestation is being prepared.

Fix: keep polling the Iris API until the status is complete, then use the returned attestation to mint on the destination chain. Don't abort on pending.

Iris 404 usually means 'not indexed yet'

A 404 from Iris right after the burn typically means Circle hasn't indexed your message yet — it's a keep-polling signal, not a permanent not-found. Wait and poll again. Treating the first 404 as failure and giving up strands the transfer mid-bridge.

When it really is wrong: domain id and replay

For agents bridging USDC

An agent that treats pending_confirmations or a first 404 as a failure will abandon a transfer that was going to succeed. diagnose_infra_error returns the cctp family and tells the agent to keep polling vs when something is genuinely wrong (domain id, replay):

diagnose_infra_error({error: "cctp attestation pending_confirmations iris"})
// → { family: "cctp",
//      fix: "not a failure — keep polling Iris until complete, then mint; a first 404 = not-indexed-yet" }
For AI agents

Machine-readable guide: https://snapback.sh/llms.txt · Tool discovery: https://snapback.sh/.well-known/mcp.json · MCP endpoint: https://api.snapback.sh/mcp. Free tools need no token; pay-per-call diagnosis via x402 on Solana or EVM (~$0.0032 USDC).

Try Snapback freeRead the docs