Files
smom-dbis-138/docs/operations/integrations/CCIP_ROUTER_SETUP.md
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

4.3 KiB

CCIP Router Setup Guide

Overview

This guide explains how to set up and deploy the Chainlink CCIP Router for cross-chain oracle updates.

Prerequisites

  • Chainlink CCIP Router contract deployed on source and target chains
  • LINK tokens for paying CCIP fees
  • Access to deploy contracts
  • Validator keys for signing transactions

Deployment Steps

Step 1: Get CCIP Router Addresses

CCIP Router addresses vary by chain:

  • Ethereum Mainnet: 0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D
  • Polygon: 0x3C3D92629A02a8D95D5CB9650fe49C3544f69B43
  • Avalanche: 0xF694E193200268f9a4868e4Aa017A0118C9a8177
  • Arbitrum: 0x1619DE6B6B20eD217a58d00f37B9d47C7663feca
  • Optimism: 0x261c05167db67Be2E2dc4a347C4E6B000C677852

For ChainID 138, deploy a custom CCIP Router or use a compatible implementation.

Step 2: Deploy CCIP Router (if needed)

If deploying a custom CCIP Router:

# Deploy CCIP Router
forge script script/DeployCCIPRouter.s.sol --rpc-url $RPC_URL --broadcast

Step 3: Configure Router Address

Update contract configurations:

// In CCIPSender.sol
address public constant CCIP_ROUTER = 0x...; // Your router address

// In CCIPReceiver.sol
constructor(address _router, address _oracleAggregator) {
    router = IRouterClient(_router);
    // ...
}

Step 4: Set Chain Selectors

Configure chain selectors for target chains:

// Chain selectors
uint64 constant ETHEREUM_MAINNET = 5009297550715157269;
uint64 constant POLYGON = 4051577828743386545;
uint64 constant AVALANCHE = 6433500567565415381;
uint64 constant ARBITRUM = 4949039107694359620;
uint64 constant OPTIMISM = 3734403246176062136;

Ensure contracts have sufficient LINK tokens for fees:

# Transfer LINK to sender contract
cast send $SENDER_CONTRACT "transfer(address,uint256)" $LINK_TOKEN $AMOUNT --rpc-url $RPC_URL --private-key $PRIVATE_KEY

Step 6: Verify Deployment

# Check router address
cast call $SENDER_CONTRACT "router()" --rpc-url $RPC_URL

# Check chain selector
cast call $SENDER_CONTRACT "targetChainSelector()" --rpc-url $RPC_URL

Configuration Files

Kubernetes Deployment

Deploy CCIP Router service (if running as a service):

# k8s/ccip/router-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ccip-router
  namespace: besu-network
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ccip-router
  template:
    metadata:
      labels:
        app: ccip-router
    spec:
      containers:
        - name: ccip-router
          image: chainlink/ccip-router:v1.0.0
          env:
            - name: RPC_URL
              value: "http://besu-rpc:8545"
            - name: PRIVATE_KEY
              valueFrom:
                secretKeyRef:
                  name: ccip-router-secrets
                  key: private_key

Environment Variables

# .env
CCIP_ROUTER_ADDRESS=0x...
TARGET_CHAIN_SELECTOR=5009297550715157269
LINK_TOKEN_ADDRESS=0x...

Testing

Test CCIP Router Connection

# Test router is accessible
cast call $CCIP_ROUTER "getSupportedTokens(uint64)" $CHAIN_SELECTOR --rpc-url $RPC_URL

Test Message Sending

# Send test message
forge script script/TestCCIPSend.s.sol --rpc-url $RPC_URL --broadcast

Monitoring

Monitor CCIP Router health:

  • Router availability
  • Message processing rate
  • Fee consumption
  • Error rates

See monitoring/prometheus/alerts/ccip.yml for alerting rules.

Troubleshooting

Router Not Found

  1. Verify router address is correct
  2. Check router is deployed on the chain
  3. Verify network/chain ID matches
  1. Check LINK balance
  2. Transfer more LINK tokens
  3. Monitor fee consumption

Message Delivery Failures

  1. Check target chain selector
  2. Verify receiver contract address
  3. Check target chain router is operational
  4. Review error logs

Security

  1. Access Control: Restrict router configuration to authorized addresses
  2. Fee Limits: Set maximum fee limits to prevent excessive spending
  3. Rate Limiting: Implement rate limiting for message sending
  4. Monitoring: Monitor for unusual activity

References