chore: sync submodule state (parent ref update)
Made-with: Cursor
This commit is contained in:
145
scripts/deployment/preflight-config-ready-chains.sh
Executable file
145
scripts/deployment/preflight-config-ready-chains.sh
Executable file
@@ -0,0 +1,145 @@
|
||||
#!/usr/bin/env bash
|
||||
# Preflight check for Config-Ready Chains (Gnosis, Cronos, Celo, Wemix) CCIP bridge deployment.
|
||||
# Verifies: RPC connectivity, deployer address, native gas balance on each chain.
|
||||
# Run before deploy-bridges-config-ready-chains.sh.
|
||||
#
|
||||
# Usage: ./scripts/deployment/preflight-config-ready-chains.sh [gnosis|cronos|celo|wemix|all]
|
||||
# SKIP_BALANCE=1 ... # skip balance checks (RPC-only)
|
||||
# DEPLOYER_ADDRESS=0x... # use specific address instead of deriving from PRIVATE_KEY
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
[[ -f "$PROJECT_ROOT/.env" ]] && set -a && source "$PROJECT_ROOT/.env" && set +a
|
||||
|
||||
SKIP_BALANCE="${SKIP_BALANCE:-0}"
|
||||
CHAIN="${1:-all}"
|
||||
|
||||
# Chain config: name | chain_id | RPC_var | gas_token | min_recommended (human)
|
||||
get_chain_config() {
|
||||
case "$1" in
|
||||
gnosis) echo "Gnosis|100|GNOSIS_RPC|xDAI|0.1" ;;
|
||||
cronos) echo "Cronos|25|CRONOS_RPC|CRO|1" ;;
|
||||
celo) echo "Celo|42220|CELO_RPC|CELO|0.1" ;;
|
||||
wemix) echo "Wemix|1111|WEMIX_RPC|WEMIX|0.4" ;;
|
||||
*) echo "" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Default RPCs (from env or public)
|
||||
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}"
|
||||
|
||||
# Deployer
|
||||
if [[ -n "${DEPLOYER_ADDRESS:-}" ]]; then
|
||||
DEPLOYER="${DEPLOYER_ADDRESS}"
|
||||
[[ "$DEPLOYER" != 0x* ]] && DEPLOYER="0x$DEPLOYER"
|
||||
else
|
||||
if [[ -z "${PRIVATE_KEY:-}" ]]; then
|
||||
echo "Error: Set PRIVATE_KEY in .env or DEPLOYER_ADDRESS for read-only check" >&2
|
||||
exit 1
|
||||
fi
|
||||
DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || true)
|
||||
if [[ -z "$DEPLOYER" ]]; then
|
||||
echo "Error: Could not derive deployer from PRIVATE_KEY (is 'cast' available?)" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
check_chain() {
|
||||
local key="$1"
|
||||
local config
|
||||
config=$(get_chain_config "$key")
|
||||
[[ -z "$config" ]] && return 1
|
||||
local name chain_id rpc_var gas_token min_rec
|
||||
IFS='|' read -r name chain_id rpc_var gas_token min_rec <<< "$config"
|
||||
local rpc="${!rpc_var:-}"
|
||||
|
||||
if [[ -z "$rpc" ]]; then
|
||||
echo -e " ${RED}✗${NC} $name: $rpc_var not set in .env"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# RPC connectivity
|
||||
local res
|
||||
res=$(curl -s -m 10 -X POST "$rpc" -H "Content-Type: application/json" \
|
||||
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' 2>/dev/null || true)
|
||||
if [[ -z "$res" ]] || ! echo "$res" | grep -q '"result"'; then
|
||||
echo -e " ${RED}✗${NC} $name: RPC unreachable ($rpc)"
|
||||
return 1
|
||||
fi
|
||||
echo -e " ${GREEN}✓${NC} $name: RPC OK (chain $chain_id)"
|
||||
|
||||
if [[ "$SKIP_BALANCE" == "1" ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Balance check
|
||||
local balance_wei
|
||||
balance_wei=$(cast balance "$DEPLOYER" --rpc-url "$rpc" 2>/dev/null || echo "0")
|
||||
local balance_eth
|
||||
balance_eth=$(echo "scale=6; $balance_wei / 1000000000000000000" | bc 2>/dev/null || echo "0")
|
||||
|
||||
if [[ -z "$balance_wei" || "$balance_wei" == "0" ]]; then
|
||||
echo -e " ${RED}✗${NC} Balance: 0 $gas_token (need $min_rec $gas_token)"
|
||||
return 1
|
||||
fi
|
||||
# Compare: balance_eth >= min_rec (use bc for decimals)
|
||||
if ! command -v bc >/dev/null 2>&1; then
|
||||
echo -e " ${YELLOW}?${NC} Balance: $balance_eth $gas_token (bc not found, cannot compare)"
|
||||
return 0
|
||||
fi
|
||||
if [[ "$(echo "$balance_eth >= $min_rec" | bc 2>/dev/null)" != "1" ]]; then
|
||||
echo -e " ${YELLOW}⚠${NC} Balance: $balance_eth $gas_token (recommended: $min_rec $gas_token)"
|
||||
return 1
|
||||
fi
|
||||
echo -e " ${GREEN}✓${NC} Balance: $balance_eth $gas_token"
|
||||
return 0
|
||||
}
|
||||
|
||||
run_checks() {
|
||||
local keys
|
||||
case "$CHAIN" in
|
||||
gnosis) keys="gnosis" ;;
|
||||
cronos) keys="cronos" ;;
|
||||
celo) keys="celo" ;;
|
||||
wemix) keys="wemix" ;;
|
||||
all) keys="gnosis cronos celo wemix" ;;
|
||||
*) echo "Usage: $0 [gnosis|cronos|celo|wemix|all]"; exit 1 ;;
|
||||
esac
|
||||
|
||||
local failed=0
|
||||
for k in $keys; do
|
||||
if ! check_chain "$k"; then
|
||||
failed=1
|
||||
fi
|
||||
done
|
||||
return $failed
|
||||
}
|
||||
|
||||
echo "=== Preflight: Config-Ready Chains (Gnosis, Cronos, Celo, Wemix) ==="
|
||||
echo "Deployer: ${DEPLOYER:0:10}...${DEPLOYER: -8}"
|
||||
echo "SKIP_BALANCE=$SKIP_BALANCE CHAIN=$CHAIN"
|
||||
echo ""
|
||||
|
||||
if run_checks; then
|
||||
echo ""
|
||||
echo "Preflight OK. Run: ./scripts/deployment/deploy-bridges-config-ready-chains.sh $CHAIN"
|
||||
exit 0
|
||||
else
|
||||
echo ""
|
||||
echo "Preflight failed. Fix RPCs and gas balances before deploy."
|
||||
echo " Gas tokens: Gnosis=xDAI, Cronos=CRO, Celo=CELO, Wemix=WEMIX"
|
||||
echo " Recommended: Gnosis 0.1, Cronos 1, Celo 0.1, Wemix 0.4"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user