> ## Documentation Index
> Fetch the complete documentation index at: https://docs.enso.build/llms.txt
> Use this file to discover all available pages before exploring further.

# Crosschain Bridges

> Execute complex crosschain operations using CCIP, Relay, Stargate, or CCTP bridges

export const date_0 = "2025-02-03"

Enso supports four bridge protocols for crosschain operations, each with different characteristics. Use the Bundle API to explicitly select a bridge protocol and (where supported) define post-bridge callbacks.

<CardGroup cols={2}>
  <Card title="CCIP" icon="link" href="/pages/use-cases/bridges/ccip-bridge-callback">
    **Chainlink CCIP** - Best for ERC20 tokens with larger callback payloads (up to 30KB). Higher security through Chainlink's oracle network. Note: waits for source chain finalization.
  </Card>

  <Card title="CCTP" icon="coins" href="/pages/use-cases/bridges/cctp-bridge">
    **Circle CCTP v2** - Native USDC burn/mint across chains. Fast Transfer
    (sub-15s) or Standard + Forwarding Service. No callbacks.
  </Card>

  <Card title="Relay" icon="bolt" href="/pages/use-cases/bridges/relay-bridge-callback">
    **Relay** - Best for flexible bridging with dynamic amounts. No callback data
    limit, supports native tokens.
  </Card>

  <Card title="Stargate" icon="layer-group" href="/pages/use-cases/bridges/stargate-double-bridge">
    **LayerZero Stargate** - Best for native token bridging and LayerZero
    ecosystem. Tight callback limit (\~9.5KB).
  </Card>

  <Card title="Mixed Protocols" icon="shuffle" href="/pages/use-cases/bridges/mixed-bridge-protocols">
    **Stargate + CCIP** - Combine multiple bridges for complex crosschain workflows with nested callbacks across chains.
  </Card>
</CardGroup>

## When to Use Each Bridge

| Protocol | Best For                               | Callback Limit      | Native Token | Token Coverage      | Finalization                                |
| -------- | -------------------------------------- | ------------------- | ------------ | ------------------- | ------------------------------------------- |
| CCIP     | Large callback payloads, high security | \~30KB              | No           | ERC20 (whitelisted) | Waits for source chain finality             |
| Relay    | Dynamic amounts, flexible routing      | Unlimited           | Yes          | ERC20 + native      | Fast                                        |
| Stargate | LayerZero ecosystem, native bridging   | \~9.5KB             | Yes          | OFT-enabled tokens  | Fast                                        |
| CCTP     | Native USDC across chains              | No callback support | No           | USDC only           | Fast (where available) or wait for finality |

<Note>
  **CCIP finalization**: CCIP waits for source chain finalization before
  executing callbacks. Timing varies by chain (sub-second to hours). See
  [Chainlink's Finality By
  Blockchain](https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain)
  for current times. Consider this for time-sensitive swaps with slippage
  protection on slower chains.
</Note>

<Note>
  **CCTP transfer modes**: Every CCTP transfer is auto-relayed by Circle's
  Forwarding Service — receivers never need destination gas. Fast Transfer
  attests after a few confirmations (sub-15s typical) and pays a small protocol
  fee on top of the forwarding fee; Standard waits for full source-chain
  finality and pays the forwarding fee only. The bundle action silently falls
  back to Standard when Fast is unavailable on the source.
</Note>

## Discovery APIs

* **CCIP**: Use [`GET /ccip/router`](/api-reference/integration/ccip-router) to get the CCIP router address
* **Stargate**: Use [`GET /layerzero/pool`](/api-reference/integration/layerzero-pool) to get the OFT pool address
* **Relay**: Use the token address directly as `primaryAddress`
* **CCTP**: Use [`GET /cctp/bridge/tokenmessengerv2`](/pages/build/get-started/bridge-status) to get the CCTP token messenger address

<div className="text-right text-xs gray-200 font-semibold w-full" style={{marginTop: '0'}}>
  <p style={{
        color: "#b2b2b2"  
    }}>Updated {date_0}</p>
</div>
