Files
smom-dbis-138/docs/ccip-integration/chain138/DEPLOYMENT_GUIDE.md

5.9 KiB

CCIP Deployment Guide for ChainID 138

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


Overview

This guide provides step-by-step instructions for deploying and configuring Chainlink CCIP on ChainID 138. Follow these steps in order to ensure proper configuration.


Prerequisites

  • ChainID 138 network running and accessible
  • RPC endpoint configured (RPC_URL_138 or CHAIN138_RPC_URL)
  • Private key configured (PRIVATE_KEY)
  • Sufficient native token balance for deployment
  • Foundry/Forge installed
  • cast command available (from Foundry)

Phase 1: Calculate Chain Selector

Step 1.1: Calculate Chain Selector

Run the chain selector calculation script:

./scripts/ccip/calculate-chain-selector.sh

This will:

  • Calculate the recommended chain selector for ChainID 138
  • Update .env with CHAIN138_SELECTOR=0x000000000000008a (or 138)

Result: Chain selector is 138 (hex: 0x000000000000008a)


Phase 2: Deploy CCIP Router

Step 2.1: Decide on Fee Token

Choose one:

  • Option A: Use native ETH (recommended for simplicity)
    • Set CCIP_CHAIN138_LINK_TOKEN=0x0000000000000000000000000000000000000000
  • Option B: Deploy LINK token
    • Deploy ERC-20 LINK token contract
    • Set CCIP_CHAIN138_LINK_TOKEN=<deployed_link_address>

Step 2.2: Configure Environment Variables

Add to .env:

# CCIP Router Configuration
CCIP_CHAIN138_LINK_TOKEN=0x0000000000000000000000000000000000000000  # Use native ETH
CCIP_BASE_FEE=1000000000000000  # 0.001 ETH (1e15 wei)
CCIP_DATA_FEE_PER_BYTE=100000000  # 0.1 gwei per byte (1e8 wei)

Step 2.3: Deploy CCIP Router

forge script script/DeployCCIPRouter.s.sol \
  --rpc-url $RPC_URL_138 \
  --broadcast \
  --private-key $PRIVATE_KEY

Step 2.4: Update Environment

After deployment, update .env:

CCIP_CHAIN138_ROUTER=<deployed_router_address>

Step 2.5: Configure Router

Run the configuration script:

./scripts/deployment/configure-ccip-router.sh

This will:

  • Add Ethereum Mainnet as a supported chain
  • Add WETH9 and WETH10 as supported tokens

Phase 3: Deploy CCIP Bridges

Step 3.1: Deploy CCIPWETH9Bridge

# Ensure CCIP_CHAIN138_ROUTER is set in .env
forge script script/DeployCCIPWETH9Bridge.s.sol \
  --rpc-url $RPC_URL_138 \
  --broadcast \
  --private-key $PRIVATE_KEY

Update .env:

CCIPWETH9_BRIDGE_CHAIN138=<deployed_bridge_address>

Step 3.2: Deploy CCIPWETH10Bridge

forge script script/DeployCCIPWETH10Bridge.s.sol \
  --rpc-url $RPC_URL_138 \
  --broadcast \
  --private-key $PRIVATE_KEY

Update .env:

CCIPWETH10_BRIDGE_CHAIN138=<deployed_bridge_address>

Phase 4: Configure Bridge Destinations

Step 4.1: Configure CCIPWETH9Bridge

Run the configuration script:

./scripts/deployment/configure-weth9-bridge.sh

Or manually:

# Add ChainID 138 destination on Ethereum Mainnet bridge
cast send $CCIPWETH9_BRIDGE_MAINNET \
  "addDestination(uint64,address)" \
  138 \
  $CCIPWETH9_BRIDGE_CHAIN138 \
  --rpc-url $ETHEREUM_MAINNET_RPC \
  --private-key $PRIVATE_KEY

# Add Ethereum Mainnet destination on ChainID 138 bridge
cast send $CCIPWETH9_BRIDGE_CHAIN138 \
  "addDestination(uint64,address)" \
  5009297550715157269 \
  $CCIPWETH9_BRIDGE_MAINNET \
  --rpc-url $RPC_URL_138 \
  --private-key $PRIVATE_KEY

Step 4.2: Configure CCIPWETH10Bridge

Run the configuration script:

./scripts/deployment/configure-weth10-bridge.sh

Or manually (similar to WETH9 above).


Phase 5: Verification

Step 5.1: Verify Deployment

Run the verification script:

./scripts/deployment/verify-ccip-deployment.sh

This will check:

  • All contracts are deployed
  • Router configuration
  • Bridge configuration
  • Chain selector

Step 5.2: Manual Verification

Verify each contract on the explorer:

# Check router
cast code $CCIP_CHAIN138_ROUTER --rpc-url $RPC_URL_138

# Check bridges
cast code $CCIPWETH9_BRIDGE_CHAIN138 --rpc-url $RPC_URL_138
cast code $CCIPWETH10_BRIDGE_CHAIN138 --rpc-url $RPC_URL_138

Phase 6: Testing

Step 6.1: Test Router Message Sending

// Test sending a message via router
router.ccipSend(
    5009297550715157269, // Ethereum Mainnet selector
    message
);

Step 6.2: Test Bridge Token Transfer

# Test WETH9 bridge transfer
# 1. Approve bridge to spend WETH9
# 2. Call sendCrossChain()
# 3. Verify on destination chain

Environment Variables Summary

After complete deployment, your .env should include:

# ChainID 138 CCIP Configuration
CHAIN138_SELECTOR=0x000000000000008a
CCIP_CHAIN138_ROUTER=<deployed_router_address>
CCIP_CHAIN138_LINK_TOKEN=0x0000000000000000000000000000000000000000  # or LINK address
CCIPWETH9_BRIDGE_CHAIN138=<deployed_bridge_address>
CCIPWETH10_BRIDGE_CHAIN138=<deployed_bridge_address>

# Router Configuration
CCIP_BASE_FEE=1000000000000000
CCIP_DATA_FEE_PER_BYTE=100000000

Troubleshooting

Issue: Router deployment fails

Solution:

  • Check RPC connectivity
  • Verify sufficient balance
  • Check gas price settings

Issue: Bridge deployment fails

Solution:

  • Ensure router is deployed first
  • Verify router address in environment
  • Check WETH addresses match genesis

Issue: Configuration fails

Solution:

  • Verify contract addresses
  • Check chain selectors are correct
  • Ensure admin key has permissions

Next Steps

After deployment:

  1. Update Documentation: Update all docs with deployed addresses
  2. Contract Verification: Verify contracts on explorer
  3. Testing: Run comprehensive tests
  4. Monitoring: Set up monitoring and alerting
  5. Security: Review security measures


Last Updated: 2025-01-27