Files
smom-dbis-138/docs/ccip-integration/reference/CCIP_BRIDGE_USER_GUIDE.md

5.9 KiB

CCIP Bridge User Guide

Date: 2025-01-27
Network: ChainID 138 (DeFi Oracle Meta Mainnet)


Overview

This guide explains how to use the CCIP bridges to transfer WETH9 and WETH10 tokens between ChainID 138 and other supported chains.


Prerequisites

  • Wallet connected to ChainID 138
  • WETH9 or WETH10 tokens in your wallet
  • LINK tokens (if using LINK for fees) or native ETH (if using native fees)
  • Sufficient balance for gas fees

Bridge Addresses

ChainID 138

  • CCIPWETH9Bridge: See .env or documentation for deployed address
  • CCIPWETH10Bridge: See .env or documentation for deployed address

Ethereum Mainnet

  • CCIPWETH9Bridge: 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6
  • CCIPWETH10Bridge: 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e

Step-by-Step Guide

Step 1: Prepare Tokens

Option A: You have native ETH

Wrap ETH to WETH:

// For WETH9
weth9.deposit{value: amount}();

// For WETH10
weth10.deposit{value: amount}();

Option B: You already have WETH

Ensure you have sufficient WETH balance.

Step 2: Approve Bridge

Approve the bridge to spend your tokens:

// For WETH9
weth9.approve(bridgeAddress, amount);

// For WETH10
weth10.approve(bridgeAddress, amount);

Step 3: Calculate Fees

Estimate the CCIP fee:

uint256 fee = bridge.calculateFee(destinationChainSelector, amount);

Step 4: Approve Fee Token

If using LINK for fees:

linkToken.approve(bridgeAddress, fee);

If using native ETH, ensure you have sufficient balance.

Step 5: Send Cross-Chain

Send tokens to destination chain:

bytes32 messageId = bridge.sendCrossChain(
    destinationChainSelector,  // e.g., 5009297550715157269 for Ethereum Mainnet
    recipientAddress,           // Address on destination chain
    amount                      // Amount to transfer
);

Step 6: Monitor Transfer

Track the transfer using the messageId:

  • Check events: CrossChainTransferInitiated
  • Wait for confirmation on destination chain
  • Check events: CrossChainTransferCompleted

Example: Transfer WETH9 from ChainID 138 to Ethereum Mainnet

// 1. Wrap ETH to WETH9
weth9.deposit{value: 1 ether}();

// 2. Approve bridge
weth9.approve(bridgeAddress, 1 ether);

// 3. Calculate fee
uint256 fee = bridge.calculateFee(5009297550715157269, 1 ether);

// 4. Approve fee (if using LINK)
linkToken.approve(bridgeAddress, fee);

// 5. Send cross-chain
bytes32 messageId = bridge.sendCrossChain(
    5009297550715157269,  // Ethereum Mainnet selector
    recipientAddress,     // Your address on Ethereum Mainnet
    1 ether
);

// 6. Monitor transfer
// Check events or use messageId to track

Using with Web3 Libraries

ethers.js

const bridge = new ethers.Contract(bridgeAddress, bridgeABI, signer);

// Approve
await weth9.approve(bridgeAddress, amount);

// Calculate fee
const fee = await bridge.calculateFee(destinationSelector, amount);

// Approve fee token (if LINK)
await linkToken.approve(bridgeAddress, fee);

// Send cross-chain
const tx = await bridge.sendCrossChain(
    destinationSelector,
    recipientAddress,
    amount
);
const receipt = await tx.wait();
const messageId = receipt.events.find(e => e.event === 'CrossChainTransferInitiated').args.messageId;

web3.js

// Approve
await weth9.methods.approve(bridgeAddress, amount).send({ from: account });

// Calculate fee
const fee = await bridge.methods.calculateFee(destinationSelector, amount).call();

// Approve fee token (if LINK)
await linkToken.methods.approve(bridgeAddress, fee).send({ from: account });

// Send cross-chain
const tx = await bridge.methods.sendCrossChain(
    destinationSelector,
    recipientAddress,
    amount
).send({ from: account });

Supported Destination Chains

Network Chain ID Chain Selector
Ethereum Mainnet 1 5009297550715157269
BSC 56 11344663589394136015
Polygon 137 4051577828743386545
Avalanche 43114 6433500567565415381
Base 8453 15971525489660198786
Arbitrum 42161 4949039107694359620
Optimism 10 3734403246176062136

Fees

Fee Structure

  • Base Fee: Fixed fee per message
  • Data Fee: Fee per byte of message data
  • Token Fee: Percentage of token amount (if applicable)

Fee Payment

  • Native ETH: Fees paid in native token (if configured)
  • LINK Token: Fees paid in LINK token (if configured)

Estimating Fees

Always calculate fees before sending:

uint256 fee = bridge.calculateFee(destinationSelector, amount);

Troubleshooting

Issue: Transfer Fails

Possible Causes:

  • Insufficient token balance
  • Insufficient fee balance
  • Destination not configured
  • Invalid recipient address

Solutions:

  1. Check token and fee balances
  2. Verify destination is enabled
  3. Verify recipient address is valid
  4. Check recent bridge events

Issue: Transfer Stuck

Possible Causes:

  • Destination chain issues
  • Router problems
  • Network congestion

Solutions:

  1. Check destination chain status
  2. Monitor bridge events
  3. Contact support if persistent

Issue: High Fees

Possible Causes:

  • Large transfer amount
  • Network congestion
  • Fee configuration

Solutions:

  1. Check fee calculation
  2. Consider smaller amounts
  3. Wait for lower network activity

Security Considerations

  1. Verify Addresses: Always verify bridge and token addresses
  2. Check Fees: Verify fee calculations before sending
  3. Monitor Transfers: Track your transfers using messageId
  4. Use Official Sources: Only use addresses from official documentation


Last Updated: 2025-01-27