86 lines
2.9 KiB
Bash
Executable File
86 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Deploy to chains with sufficient native token balance (Avalanche, Arbitrum, Cronos).
|
|
# Run check-balances-gas-and-deploy.sh first to confirm balances.
|
|
# Chain 138 phased core is deployed separately (check-balances-gas-and-deploy.sh --deploy).
|
|
#
|
|
# Requires: PRIVATE_KEY, CCIP_*_ROUTER, CCIP_*_LINK_TOKEN, *_SELECTOR, *_RPC_URL per chain.
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# Load .env
|
|
if [ -f .env ]; then
|
|
set -a
|
|
source .env
|
|
set +a
|
|
fi
|
|
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
if [ -z "${PRIVATE_KEY:-}" ]; then
|
|
echo -e "${RED}ERROR: PRIVATE_KEY not set in .env${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Chains with sufficient balance (from last balance check): Avalanche, Arbitrum, Cronos
|
|
# Prefer INFURA_PROJECT_ID (+ optional INFURA_PROJECT_SECRET) when set; else public RPCs
|
|
[[ -f "$SCRIPT_DIR/../lib/infura.sh" ]] && source "$SCRIPT_DIR/../lib/infura.sh"
|
|
_av_rpc=$(build_infura_rpc "avalanche-mainnet" 2>/dev/null || true)
|
|
_ar_rpc=$(build_infura_rpc "arbitrum-mainnet" 2>/dev/null || true)
|
|
AVALANCHE_RPC="${AVALANCHE_RPC_URL:-${AVALANCHE_RPC:-${_av_rpc:-https://avalanche-c-chain.publicnode.com}}}"
|
|
ARBITRUM_RPC="${ARBITRUM_MAINNET_RPC:-${ARBITRUM_RPC:-${_ar_rpc:-https://arbitrum-one.publicnode.com}}}"
|
|
CRONOS_RPC="${CRONOS_RPC_URL:-${CRONOS_RPC:-https://evm.cronos.org}}"
|
|
|
|
deploy_chain() {
|
|
local name="$1"
|
|
local rpc="$2"
|
|
local chain_id="$3"
|
|
echo -e "${YELLOW}Deploying to ${name} (chain ${chain_id})...${NC}"
|
|
forge script script/DeployAll.s.sol:DeployAll \
|
|
--rpc-url "$rpc" \
|
|
--chain-id "$chain_id" \
|
|
--private-key "$PRIVATE_KEY" \
|
|
--broadcast \
|
|
--slow \
|
|
-vvvv || {
|
|
echo -e "${RED}✗ ${name} deployment failed${NC}"
|
|
return 1
|
|
}
|
|
echo -e "${GREEN}✓ ${name} deployment complete${NC}"
|
|
echo ""
|
|
}
|
|
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "${BLUE}Deploy to chains with sufficient balance${NC}"
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo "Chains: Avalanche, Arbitrum, Cronos"
|
|
echo ""
|
|
|
|
# Verify required CCIP env vars
|
|
for chain in AVALANCHE ARBITRUM CRONOS; do
|
|
router="CCIP_${chain}_ROUTER"
|
|
link="CCIP_${chain}_LINK_TOKEN"
|
|
selector="${chain}_SELECTOR"
|
|
if [ -z "${!router:-}" ] || [ -z "${!link:-}" ] || [ -z "${!selector:-}" ]; then
|
|
echo -e "${RED}ERROR: Missing ${router}, ${link}, or ${selector} in .env${NC}"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# Deploy (skip --verify to avoid needing chain-specific explorer API keys)
|
|
deploy_chain "Avalanche" "$AVALANCHE_RPC" "43114"
|
|
deploy_chain "Arbitrum" "$ARBITRUM_RPC" "42161"
|
|
deploy_chain "Cronos" "$CRONOS_RPC" "25"
|
|
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "${GREEN}Deployments complete${NC}"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo "Next: update .env with deployed addresses; run verify manually if needed."
|