88 lines
3.4 KiB
Bash
Executable File
88 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Calculate CCIP Chain Selector for ChainID 138
|
|
#
|
|
# CCIP chain selectors are typically calculated using a deterministic method.
|
|
# For custom chains, we can use a simple format: chainId as uint64
|
|
# However, for compatibility with Chainlink's official CCIP, we should use
|
|
# a format that matches their calculation method.
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
CHAIN_ID=138
|
|
|
|
echo "Calculating CCIP Chain Selector for ChainID ${CHAIN_ID}..."
|
|
echo ""
|
|
|
|
# Method 1: Simple chainId as uint64 (for custom CCIP routers)
|
|
# This is the simplest approach for custom implementations
|
|
SIMPLE_SELECTOR=$CHAIN_ID
|
|
echo "Method 1 (Simple): ChainID as uint64"
|
|
echo " Selector: ${SIMPLE_SELECTOR}"
|
|
echo " Hex: 0x$(printf '%016x' ${SIMPLE_SELECTOR})"
|
|
echo ""
|
|
|
|
# Method 2: Chainlink-style calculation (if using official CCIP format)
|
|
# Chainlink uses: uint64(uint256(keccak256(abi.encodePacked(chainId, "CCIP")))) >> 192
|
|
# For now, we'll use a deterministic calculation based on chainId
|
|
# Note: This is a placeholder - actual Chainlink calculation may differ
|
|
echo "Method 2 (Chainlink-style): Deterministic hash-based"
|
|
echo " Note: For custom CCIP routers, you can define your own format"
|
|
echo " Recommended: Use Method 1 (simple chainId) for custom implementations"
|
|
echo ""
|
|
|
|
# Method 3: Using cast to calculate (if foundry/cast is available)
|
|
if command -v cast &> /dev/null; then
|
|
echo "Method 3 (Using cast):"
|
|
# Calculate using cast: cast keccak "0x$(printf '%064x' ${CHAIN_ID})CCIP"
|
|
HASH=$(cast keccak "$(printf '0x%064x' ${CHAIN_ID})CCIP" 2>/dev/null || echo "")
|
|
if [ -n "$HASH" ]; then
|
|
# Extract first 8 bytes (uint64) from hash
|
|
SELECTOR_HEX=$(echo "$HASH" | cut -c3-18) # Skip 0x, take 16 hex chars
|
|
SELECTOR_DEC=$(printf '%d' "0x${SELECTOR_HEX}")
|
|
echo " Hash: ${HASH}"
|
|
echo " Selector (first 8 bytes): ${SELECTOR_DEC}"
|
|
echo " Hex: 0x${SELECTOR_HEX}"
|
|
fi
|
|
echo ""
|
|
fi
|
|
|
|
# Recommended selector for ChainID 138
|
|
# For custom CCIP routers, using chainId directly is simplest and most compatible
|
|
RECOMMENDED_SELECTOR=$CHAIN_ID
|
|
RECOMMENDED_SELECTOR_HEX=$(printf '0x%016x' ${CHAIN_ID})
|
|
|
|
echo "=========================================="
|
|
echo "RECOMMENDED SELECTOR FOR CHAINID 138:"
|
|
echo "=========================================="
|
|
echo "Decimal: ${RECOMMENDED_SELECTOR}"
|
|
echo "Hex: ${RECOMMENDED_SELECTOR_HEX}"
|
|
echo "Hex (padded): 0x000000000000008a"
|
|
echo ""
|
|
echo "This selector should be used in:"
|
|
echo " - Environment variables (CHAIN138_SELECTOR)"
|
|
echo " - Bridge destination configuration"
|
|
echo " - Router supported chain registration"
|
|
echo " - All CCIP message routing"
|
|
echo ""
|
|
echo "Note: If integrating with Chainlink's official CCIP network,"
|
|
echo " you may need to register this chain selector with Chainlink"
|
|
echo " or use their official selector format."
|
|
echo ""
|
|
|
|
# Update .env if it exists
|
|
if [ -f "$PROJECT_ROOT/.env" ]; then
|
|
if grep -q "^CHAIN138_SELECTOR=" "$PROJECT_ROOT/.env"; then
|
|
echo "Updating CHAIN138_SELECTOR in .env..."
|
|
sed -i.bak "s|^CHAIN138_SELECTOR=.*|CHAIN138_SELECTOR=${RECOMMENDED_SELECTOR_HEX}|" "$PROJECT_ROOT/.env"
|
|
echo "✅ Updated .env with selector: ${RECOMMENDED_SELECTOR_HEX}"
|
|
else
|
|
echo "Adding CHAIN138_SELECTOR to .env..."
|
|
echo "CHAIN138_SELECTOR=${RECOMMENDED_SELECTOR_HEX}" >> "$PROJECT_ROOT/.env"
|
|
echo "✅ Added CHAIN138_SELECTOR to .env"
|
|
fi
|
|
fi
|
|
|