#!/bin/bash # Phase 1: Environment Setup # This script helps set up the deployment environment set -e echo "=== Phase 1: Environment Setup ===" # Check if .env exists if [ ! -f .env ]; then echo "Creating .env file from template..." if [ -f .env.template ]; then cp .env.template .env echo "✓ .env file created from template" echo "⚠️ Please edit .env and fill in all required values" else echo "Error: .env.template not found" exit 1 fi else echo "✓ .env file already exists" fi # Load environment variables if [ -f .env ]; then export $(cat .env | grep -v '^#' | grep -v '^$' | xargs) fi # Verify required variables REQUIRED_VARS=( "PRIVATE_KEY" "ETHEREUM_MAINNET_RPC" "RPC_URL_138" "ETHERSCAN_API_KEY" ) MISSING_VARS=() for var in "${REQUIRED_VARS[@]}"; do if [ -z "${!var}" ] || [ "${!var}" == "0x..." ] || [ "${!var}" == "your_etherscan_api_key" ]; then MISSING_VARS+=("$var") fi done if [ ${#MISSING_VARS[@]} -gt 0 ]; then echo "" echo "⚠️ Missing or incomplete required variables:" for var in "${MISSING_VARS[@]}"; do echo " - $var" done echo "" echo "Please edit .env and fill in all required values" exit 1 fi echo "" echo "--- Verifying RPC Endpoints ---" # Verify Ethereum Mainnet RPC if command -v cast &> /dev/null; then echo "Checking Ethereum Mainnet RPC..." BLOCK_NUMBER=$(cast block-number --rpc-url "$ETHEREUM_MAINNET_RPC" 2>/dev/null || echo "0") if [ "$BLOCK_NUMBER" != "0" ]; then echo "✓ Ethereum Mainnet RPC accessible (block: $BLOCK_NUMBER)" else echo "✗ Ethereum Mainnet RPC not accessible" exit 1 fi # Verify ChainID 138 RPC echo "Checking ChainID 138 RPC..." if [ ! -z "$RPC_URL_138" ] && [ "$RPC_URL_138" != "http://chain138.example.com:8545" ]; then BLOCK_NUMBER_138=$(cast block-number --rpc-url "$RPC_URL_138" 2>/dev/null || echo "0") if [ "$BLOCK_NUMBER_138" != "0" ]; then echo "✓ ChainID 138 RPC accessible (block: $BLOCK_NUMBER_138)" else echo "⚠️ ChainID 138 RPC not accessible (may not be deployed yet)" fi else echo "⚠️ ChainID 138 RPC not configured" fi else echo "⚠️ cast command not found. Install foundry to verify RPC endpoints." fi echo "" echo "--- Checking ETH Balance ---" if command -v cast &> /dev/null; then DEPLOYER_ADDRESS=$(cast wallet address $PRIVATE_KEY 2>/dev/null || echo "") if [ ! -z "$DEPLOYER_ADDRESS" ]; then BALANCE=$(cast balance "$DEPLOYER_ADDRESS" --rpc-url "$ETHEREUM_MAINNET_RPC" 2>/dev/null || echo "0") BALANCE_ETH=$(cast --to-unit "$BALANCE" ether 2>/dev/null || echo "0") echo "Deployer address: $DEPLOYER_ADDRESS" echo "Balance: $BALANCE_ETH ETH" MIN_BALANCE=5 if (( $(echo "$BALANCE_ETH < $MIN_BALANCE" | bc -l) )); then echo "⚠️ Balance is less than recommended minimum ($MIN_BALANCE ETH)" echo " Recommended: 5-10 ETH for deployment" else echo "✓ Sufficient ETH balance for deployment" fi else echo "⚠️ Could not derive address from PRIVATE_KEY" fi else echo "⚠️ cast command not found. Install foundry to check balance." fi echo "" echo "=== Phase 1 Complete ===" echo "Environment is ready for deployment"