Skip to main content

Overview

The CelerCircleBridgeFacet enables USDC transfers across chains using Circle’s Cross-Chain Transfer Protocol (CCTP) through the Celer network. This provides native USDC transfers without wrapped tokens.

Contract Interface

Constants

CIRCLE_BRIDGE_PROXY

Returns the address of the Circle bridge proxy contract.
function CIRCLE_BRIDGE_PROXY() external view returns (address)

USDC

Returns the address of the USDC token contract.
function USDC() external view returns (address)

Configuration Functions

initCelerCircleBridge

Initializes the Celer Circle Bridge facet.
function initCelerCircleBridge() external

Bridging Functions

startBridgeTokensViaCelerCircleBridge

Bridges USDC to another chain using Circle’s CCTP.
function startBridgeTokensViaCelerCircleBridge(
  BridgeData _bridgeData,
  CelerCircleData _celerCircleData
) external
_bridgeData
BridgeData
Standard bridge data containing transaction details
_celerCircleData
CelerCircleData
Celer Circle-specific bridging parameters

swapAndStartBridgeTokensViaCelerCircleBridge

Performs a token swap on the source chain before bridging via Circle’s CCTP.
function swapAndStartBridgeTokensViaCelerCircleBridge(
  BridgeData _bridgeData,
  SwapData[] _swapData,
  CelerCircleData _celerCircleData
) external payable
_bridgeData
BridgeData
Standard bridge data
_swapData
SwapData[]
Array of swap operations to execute before bridging
_celerCircleData
CelerCircleData
Celer Circle-specific parameters

Data Structures

CelerCircleData

struct CelerCircleData {
  uint256 maxFee;                  // Maximum bridge fee
  uint32 minFinalityThreshold;     // Minimum finality threshold
}

Usage Example

import { CelerCircleBridgeFacet } from '@lifi/contract-types';

const celerCircleFacet = CelerCircleBridgeFacet__factory.connect(facetAddress, signer);

const bridgeData = {
  transactionId: '0x...',
  bridge: 'celer-circle',
  integrator: 'my-dapp',
  referrer: '0x0000000000000000000000000000000000000000',
  sendingAssetId: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
  receiver: '0x...',
  minAmount: ethers.utils.parseUnits('100', 6),
  destinationChainId: 43114, // Avalanche
  hasSourceSwaps: false,
  hasDestinationCall: false
};

const celerCircleData = {
  maxFee: ethers.utils.parseUnits('0.5', 6),
  minFinalityThreshold: 12
};

const tx = await celerCircleFacet.startBridgeTokensViaCelerCircleBridge(
  bridgeData,
  celerCircleData
);

await tx.wait();

Events

The facet emits standard LiFi events:
  • LiFiTransferStarted(BridgeData bridgeData)
  • LiFiTransferCompleted
  • AssetSwapped (when using swapAndStart variant)

See Also

Build docs developers (and LLMs) love