# CCIP Operational Runbooks for ChainID 138 **Date**: 2025-01-27 **Network**: ChainID 138 (DeFi Oracle Meta Mainnet) --- ## Overview This document provides operational runbooks for common CCIP operations, troubleshooting, and emergency procedures. --- ## Table of Contents 1. [Deployment Runbook](#deployment-runbook) 2. [Configuration Runbook](#configuration-runbook) 3. [Troubleshooting Guide](#troubleshooting-guide) 4. [Emergency Response](#emergency-response) --- ## Deployment Runbook ### Prerequisites Check ```bash # 1. Verify network connectivity cast block-number --rpc-url $RPC_URL_138 # 2. Verify account balance cast balance $DEPLOYER_ADDRESS --rpc-url $RPC_URL_138 # 3. Verify environment variables grep -E "CCIP_CHAIN138|CHAIN138_SELECTOR" .env ``` ### Deployment Steps 1. **Calculate Chain Selector** ```bash ./scripts/ccip/calculate-chain-selector.sh ``` 2. **Deploy CCIP Router** ```bash forge script script/DeployCCIPRouter.s.sol \ --rpc-url $RPC_URL_138 \ --broadcast \ --private-key $PRIVATE_KEY ``` 3. **Configure Router** ```bash ./scripts/deployment/configure-ccip-router.sh ``` 4. **Deploy Bridges** ```bash forge script script/DeployCCIPWETH9Bridge.s.sol \ --rpc-url $RPC_URL_138 \ --broadcast \ --private-key $PRIVATE_KEY forge script script/DeployCCIPWETH10Bridge.s.sol \ --rpc-url $RPC_URL_138 \ --broadcast \ --private-key $PRIVATE_KEY ``` 5. **Configure Bridges** ```bash ./scripts/deployment/configure-weth9-bridge.sh ./scripts/deployment/configure-weth10-bridge.sh ``` 6. **Verify Deployment** ```bash ./scripts/deployment/verify-ccip-deployment.sh ``` --- ## Configuration Runbook ### Adding a New Destination Chain 1. **Get Chain Selector** - Look up selector from Chainlink docs or calculate 2. **Add to Router** ```bash cast send $CCIP_CHAIN138_ROUTER \ "addSupportedChain(uint64)" \ $DESTINATION_SELECTOR \ --rpc-url $RPC_URL_138 \ --private-key $PRIVATE_KEY ``` 3. **Add Supported Tokens** ```bash cast send $CCIP_CHAIN138_ROUTER \ "addSupportedToken(uint64,address)" \ $DESTINATION_SELECTOR \ $TOKEN_ADDRESS \ --rpc-url $RPC_URL_138 \ --private-key $PRIVATE_KEY ``` 4. **Configure Bridge** ```bash cast send $BRIDGE_ADDRESS \ "addDestination(uint64,address)" \ $DESTINATION_SELECTOR \ $DESTINATION_BRIDGE_ADDRESS \ --rpc-url $RPC_URL_138 \ --private-key $PRIVATE_KEY ``` ### Updating Fee Configuration ```bash cast send $CCIP_CHAIN138_ROUTER \ "updateFees(uint256,uint256)" \ $NEW_BASE_FEE \ $NEW_DATA_FEE_PER_BYTE \ --rpc-url $RPC_URL_138 \ --private-key $PRIVATE_KEY ``` ### Changing Admin ```bash # Router cast send $CCIP_CHAIN138_ROUTER \ "changeAdmin(address)" \ $NEW_ADMIN \ --rpc-url $RPC_URL_138 \ --private-key $PRIVATE_KEY # Bridge cast send $BRIDGE_ADDRESS \ "changeAdmin(address)" \ $NEW_ADMIN \ --rpc-url $RPC_URL_138 \ --private-key $PRIVATE_KEY ``` --- ## Troubleshooting Guide ### Issue: Router Not Responding **Symptoms**: - Cannot send messages - Contract calls fail **Diagnosis**: ```bash # Check contract code cast code $CCIP_CHAIN138_ROUTER --rpc-url $RPC_URL_138 # Check recent transactions cast tx $LAST_TX_HASH --rpc-url $RPC_URL_138 ``` **Solutions**: 1. Verify RPC connectivity 2. Check contract is deployed 3. Verify network is synced 4. Check for contract upgrades ### Issue: Bridge Transfer Fails **Symptoms**: - Transfer initiated but not completed - Error messages in logs **Diagnosis**: ```bash # Check bridge configuration cast call $BRIDGE "destinations(uint64)" $DEST_SELECTOR --rpc-url $RPC_URL_138 # Check router connection cast call $BRIDGE "ccipRouter()" --rpc-url $RPC_URL_138 # Check message status cast logs --address $BRIDGE "CrossChainTransferInitiated" --rpc-url $RPC_URL_138 ``` **Solutions**: 1. Verify destination is configured 2. Check router is accessible 3. Verify sufficient fees 4. Check destination chain status ### Issue: High Failure Rate **Symptoms**: - Many failed messages/transfers - Error events in logs **Diagnosis**: ```bash # Analyze failure patterns cast logs --address $ROUTER "MessageSent" --rpc-url $RPC_URL_138 | grep -i error # Check fee configuration cast call $ROUTER "baseFee()" --rpc-url $RPC_URL_138 ``` **Solutions**: 1. Review error logs 2. Check fee configuration 3. Verify destination chains 4. Check network conditions ### Issue: Configuration Changes Not Applied **Symptoms**: - Configuration calls succeed but changes not visible **Diagnosis**: ```bash # Verify current configuration cast call $CONTRACT "destinations(uint64)" $SELECTOR --rpc-url $RPC_URL_138 # Check transaction status cast tx $TX_HASH --rpc-url $RPC_URL_138 ``` **Solutions**: 1. Verify transaction was mined 2. Check correct contract address 3. Verify admin permissions 4. Check for event emissions --- ## Emergency Response ### Emergency Pause (if implemented) If contracts have pause functionality: ```bash # Pause router (if function exists) cast send $ROUTER "pause()" --rpc-url $RPC_URL_138 --private-key $PRIVATE_KEY # Pause bridge cast send $BRIDGE "pause()" --rpc-url $RPC_URL_138 --private-key $PRIVATE_KEY ``` ### Disable Destination Chain ```bash # Remove destination from bridge cast send $BRIDGE \ "removeDestination(uint64)" \ $PROBLEMATIC_SELECTOR \ --rpc-url $RPC_URL_138 \ --private-key $PRIVATE_KEY # Remove from router cast send $ROUTER \ "removeSupportedChain(uint64)" \ $PROBLEMATIC_SELECTOR \ --rpc-url $RPC_URL_138 \ --private-key $PRIVATE_KEY ``` ### Withdraw Fees (Emergency) ```bash # Withdraw native ETH fees cast send $ROUTER \ "withdrawNativeFees()" \ --rpc-url $RPC_URL_138 \ --private-key $PRIVATE_KEY # Withdraw ERC20 fees cast send $ROUTER \ "withdrawFees(uint256)" \ $AMOUNT \ --rpc-url $RPC_URL_138 \ --private-key $PRIVATE_KEY ``` ### Incident Response Checklist 1. **Identify Issue** - Check monitoring alerts - Review recent logs - Verify contract status 2. **Assess Impact** - How many users affected? - What operations are failing? - Is data at risk? 3. **Contain Issue** - Disable affected destinations - Pause operations if needed - Notify stakeholders 4. **Resolve Issue** - Apply fixes - Verify resolution - Monitor for recurrence 5. **Post-Incident** - Document incident - Review root cause - Update procedures --- ## Common Operations ### Check Contract Status ```bash # Router status cast call $ROUTER "feeToken()" --rpc-url $RPC_URL_138 cast call $ROUTER "baseFee()" --rpc-url $RPC_URL_138 cast call $ROUTER "supportedChains(uint64)" $SELECTOR --rpc-url $RPC_URL_138 # Bridge status cast call $BRIDGE "ccipRouter()" --rpc-url $RPC_URL_138 cast call $BRIDGE "destinations(uint64)" $SELECTOR --rpc-url $RPC_URL_138 cast call $BRIDGE "getDestinationChains()" --rpc-url $RPC_URL_138 ``` ### View Recent Events ```bash # Router events cast logs --address $ROUTER --from-block latest --rpc-url $RPC_URL_138 # Bridge events cast logs --address $BRIDGE --from-block latest --rpc-url $RPC_URL_138 ``` ### Calculate Fees ```bash # Estimate fee for message cast call $ROUTER \ "getFee(uint64,tuple)" \ $DEST_SELECTOR \ $MESSAGE \ --rpc-url $RPC_URL_138 ``` --- ## Related Documentation - [CCIP Deployment Guide](../ccip/DEPLOYMENT_GUIDE_CHAIN138.md) - [CCIP Monitoring](CCIP_MONITORING.md) - [CCIP Review](../CCIP_CHAIN138_REVIEW.md) --- **Last Updated**: 2025-01-27