137 lines
6.2 KiB
Bash
Executable File
137 lines
6.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Complete CCIP bridge configuration for Config-Ready chains (Gnosis, Celo, Wemix).
|
|
# - Adds each chain as destination on Chain 138 bridges (138 → Gnosis/Celo/Wemix).
|
|
# - Adds Chain 138 as destination on each chain's bridges (Gnosis/Celo/Wemix → 138).
|
|
# Requires: bridge addresses and RPCs in .env; PRIVATE_KEY; CHAIN138_SELECTOR for step 2.
|
|
# Usage: ./scripts/deployment/complete-config-ready-chains.sh
|
|
# DRY_RUN=1 ./scripts/deployment/complete-config-ready-chains.sh # print commands only
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
[[ -f "$SCRIPT_DIR/../lib/init.sh" ]] && source "$SCRIPT_DIR/../lib/init.sh" 2>/dev/null || true
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
if [[ -f "$PROJECT_ROOT/.env" ]]; then
|
|
set -a
|
|
source "$PROJECT_ROOT/.env"
|
|
set +a
|
|
fi
|
|
|
|
# Chain selectors (decimal, for addDestination(uint64,address))
|
|
ETH_MAINNET_SELECTOR="${ETH_MAINNET_SELECTOR:-5009297550715157269}"
|
|
GNOSIS_SELECTOR="${GNOSIS_SELECTOR:-465200170687744372}"
|
|
CRONOS_SELECTOR="${CRONOS_SELECTOR:-1456215246176062136}"
|
|
CELO_SELECTOR="${CELO_SELECTOR:-1346049177634351622}"
|
|
WEMIX_SELECTOR="${WEMIX_SELECTOR:-5142893604156789321}"
|
|
CHAIN138_SELECTOR="${CHAIN138_SELECTOR:-}"
|
|
|
|
CHAIN138_RPC="${CHAIN138_RPC:-${RPC_URL:-https://rpc-core.d-bis.org}}"
|
|
GNOSIS_RPC="${GNOSIS_RPC:-https://rpc.gnosischain.com}"
|
|
CRONOS_RPC="${CRONOS_RPC:-https://evm.cronos.org}"
|
|
CELO_RPC="${CELO_RPC:-https://forno.celo.org}"
|
|
WEMIX_RPC="${WEMIX_RPC:-https://api.wemix.com}"
|
|
|
|
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
|
if [[ -n "$PRIVATE_KEY" && ! "$PRIVATE_KEY" =~ ^0x ]]; then
|
|
PRIVATE_KEY="0x$PRIVATE_KEY"
|
|
fi
|
|
|
|
# Chain 138 bridge addresses (required)
|
|
WETH9_138=$(grep "CCIPWETH9_BRIDGE_CHAIN138=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "' || echo "${CCIPWETH9_BRIDGE_CHAIN138:-}")
|
|
WETH10_138=$(grep "CCIPWETH10_BRIDGE_CHAIN138=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "' || echo "${CCIPWETH10_BRIDGE_CHAIN138:-}")
|
|
|
|
# Config-ready chain bridge addresses (optional; if set, we configure them)
|
|
WETH9_GNOSIS=$(grep "CCIPWETH9_BRIDGE_GNOSIS=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "' || echo "${CCIPWETH9_BRIDGE_GNOSIS:-}")
|
|
WETH10_GNOSIS=$(grep "CCIPWETH10_BRIDGE_GNOSIS=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "' || echo "${CCIPWETH10_BRIDGE_GNOSIS:-}")
|
|
WETH9_CRONOS=$(grep "CCIPWETH9_BRIDGE_CRONOS=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "' || echo "${CCIPWETH9_BRIDGE_CRONOS:-}")
|
|
WETH10_CRONOS=$(grep "CCIPWETH10_BRIDGE_CRONOS=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "' || echo "${CCIPWETH10_BRIDGE_CRONOS:-}")
|
|
WETH9_CELO=$(grep "CCIPWETH9_BRIDGE_CELO=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "' || echo "${CCIPWETH9_BRIDGE_CELO:-}")
|
|
WETH10_CELO=$(grep "CCIPWETH10_BRIDGE_CELO=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "' || echo "${CCIPWETH10_BRIDGE_CELO:-}")
|
|
WETH9_WEMIX=$(grep "CCIPWETH9_BRIDGE_WEMIX=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "' || echo "${CCIPWETH9_BRIDGE_WEMIX:-}")
|
|
WETH10_WEMIX=$(grep "CCIPWETH10_BRIDGE_WEMIX=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "' || echo "${CCIPWETH10_BRIDGE_WEMIX:-}")
|
|
|
|
DRY_RUN="${DRY_RUN:-0}"
|
|
|
|
log_info "=== Config-Ready Chains Completion (Gnosis, Cronos, Celo, Wemix) ==="
|
|
|
|
if [[ -z "$WETH9_138" || -z "$WETH10_138" ]]; then
|
|
echo "Error: Chain 138 bridge addresses not set. Set in .env: CCIPWETH9_BRIDGE_CHAIN138, CCIPWETH10_BRIDGE_CHAIN138" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$PRIVATE_KEY" ]]; then
|
|
echo "Error: PRIVATE_KEY not set in .env" >&2
|
|
exit 1
|
|
fi
|
|
|
|
run_or_echo() {
|
|
if [[ "$DRY_RUN" = "1" ]]; then
|
|
echo " [DRY RUN] $*"
|
|
else
|
|
if eval "$*" >/dev/null 2>&1; then
|
|
log_success " OK"
|
|
else
|
|
log_warn " Failed (non-fatal) - run manually to see error"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# ---- Step A: On Chain 138, add Gnosis/Cronos/Celo/Wemix as destinations ----
|
|
echo ""
|
|
echo "Step A: Chain 138 bridges → add Gnosis, Cronos, Celo, Wemix as destinations"
|
|
|
|
while IFS= read -r line; do
|
|
read -r label selector addr9 addr10 rpc <<< "$line"
|
|
if [[ -z "$addr9" && -z "$addr10" ]]; then
|
|
echo " Skip $label (no bridge addresses in .env)"
|
|
continue
|
|
fi
|
|
echo " Configuring Chain 138 → $label..."
|
|
if [[ -n "$addr9" ]]; then
|
|
run_or_echo "cast send $WETH9_138 \"addDestination(uint64,address)\" $selector $addr9 --rpc-url $CHAIN138_RPC --private-key \$PRIVATE_KEY --legacy --gas-limit 200000"
|
|
fi
|
|
if [[ -n "$addr10" ]]; then
|
|
run_or_echo "cast send $WETH10_138 \"addDestination(uint64,address)\" $selector $addr10 --rpc-url $CHAIN138_RPC --private-key \$PRIVATE_KEY --legacy --gas-limit 200000"
|
|
fi
|
|
done << EOF
|
|
Gnosis $GNOSIS_SELECTOR $WETH9_GNOSIS $WETH10_GNOSIS $GNOSIS_RPC
|
|
Cronos $CRONOS_SELECTOR $WETH9_CRONOS $WETH10_CRONOS $CRONOS_RPC
|
|
Celo $CELO_SELECTOR $WETH9_CELO $WETH10_CELO $CELO_RPC
|
|
Wemix $WEMIX_SELECTOR $WETH9_WEMIX $WETH10_WEMIX $WEMIX_RPC
|
|
EOF
|
|
|
|
# ---- Step B: On Gnosis/Cronos/Celo/Wemix, add Chain 138 as destination ----
|
|
if [[ -z "$CHAIN138_SELECTOR" ]]; then
|
|
echo ""
|
|
echo "Step B: Skipped (CHAIN138_SELECTOR not set in .env). Set it to configure remote chains → Chain 138."
|
|
echo " Example: CHAIN138_SELECTOR=<decimal from CCIP Router getChainSelector()>"
|
|
else
|
|
echo ""
|
|
echo "Step B: Gnosis/Cronos/Celo/Wemix bridges → add Chain 138 as destination"
|
|
|
|
while IFS= read -r line; do
|
|
read -r label rpc addr9 addr10 <<< "$line"
|
|
if [[ -z "$addr9" && -z "$addr10" ]]; then
|
|
echo " Skip $label (no bridge addresses)"
|
|
continue
|
|
fi
|
|
echo " Configuring $label → Chain 138..."
|
|
if [[ -n "$addr9" ]]; then
|
|
run_or_echo "cast send $addr9 \"addDestination(uint64,address)\" $CHAIN138_SELECTOR $WETH9_138 --rpc-url $rpc --private-key \$PRIVATE_KEY --legacy"
|
|
fi
|
|
if [[ -n "$addr10" ]]; then
|
|
run_or_echo "cast send $addr10 \"addDestination(uint64,address)\" $CHAIN138_SELECTOR $WETH10_138 --rpc-url $rpc --private-key \$PRIVATE_KEY --legacy"
|
|
fi
|
|
done << EOF
|
|
Gnosis $GNOSIS_RPC $WETH9_GNOSIS $WETH10_GNOSIS
|
|
Cronos $CRONOS_RPC $WETH9_CRONOS $WETH10_CRONOS
|
|
Celo $CELO_RPC $WETH9_CELO $WETH10_CELO
|
|
Wemix $WEMIX_RPC $WETH9_WEMIX $WETH10_WEMIX
|
|
EOF
|
|
fi
|
|
|
|
echo ""
|
|
log_success "Config-ready chains script finished."
|
|
echo " Next: Fund each remote bridge with LINK (see docs/07-ccip/CONFIG_READY_CHAINS_COMPLETION_RUNBOOK.md)."
|