Files
smom-dbis-138/scripts/deployment/deploy-sufficient-balance-chains.sh
defiQUG 2a4753eb2d feat: restore operator WIP — PMM JSON sync entrypoint, dotenv RPC trim + secrets, pool env alignment
- Resolve stash: merge load_deployment_env path with secure-secrets and CR/LF RPC strip
- create-pmm-full-mesh-chain138.sh delegates to sync-chain138-pmm-pools-from-json.sh
- env.additions.example: canonical PMM pool defaults (cUSDT/USDT per crosscheck)
- Include Chain138 scripts, official mirror deploy scaffolding, and prior staged changes

Made-with: Cursor
2026-03-27 19:02:30 -07:00

102 lines
3.5 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 via dotenv (RPC CR/LF trim). Fallback: raw source.
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
# shellcheck disable=SC1090
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
load_deployment_env --repo-root "${PROJECT_ROOT:-$REPO_ROOT}"
elif [[ -n "${PROJECT_ROOT:-}" && -f "$PROJECT_ROOT/.env" ]]; then
set -a
# shellcheck disable=SC1090
source "$PROJECT_ROOT/.env"
set +a
elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
set -a
# shellcheck disable=SC1090
source "$REPO_ROOT/.env"
set +a
fi
# 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."