#!/usr/bin/env bash # 🚀 MEV BOT PRODUCTION STARTUP SCRIPT - IMMEDIATE PROFIT MODE set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" cd "$PROJECT_ROOT" # Colors GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' BLUE='\033[0;34m' BOLD='\033[1m' NC='\033[0m' log() { echo -e "${GREEN}[PRODUCTION-START]${NC} $*" } warn() { echo -e "${YELLOW}[WARNING]${NC} $*" } error() { echo -e "${RED}[ERROR]${NC} $*" } info() { echo -e "${BLUE}[INFO]${NC} $*" } header() { echo -e "${BOLD}${GREEN}===============================================${NC}" echo -e "${BOLD}${GREEN} 🚀 MEV BOT PRODUCTION DEPLOYMENT - PROFIT MODE${NC}" echo -e "${BOLD}${GREEN}===============================================${NC}" echo "" } # Pre-flight checks preflight_checks() { log "Running pre-flight checks..." # Check if binary exists and is recent if [[ ! -f "bin/mev-bot" ]]; then error "MEV bot binary not found. Building..." make build fi # Check if binary is executable if [[ ! -x "bin/mev-bot" ]]; then chmod +x bin/mev-bot fi # Verify binary local binary_info binary_info=$(file bin/mev-bot) if [[ "$binary_info" =~ "ELF 64-bit" ]]; then log "✅ Binary verified: $(ls -lh bin/mev-bot | awk '{print $5}')" else error "❌ Invalid binary format" exit 1 fi # Check Go version local go_version go_version=$(go version | grep -o 'go[0-9.]*' | head -1) log "✅ Go version: $go_version" # Check critical directories mkdir -p keystore/production logs backups/production log "✅ Production directories created" # Check environment file if [[ -f ".env.production.secure" ]]; then log "✅ Production environment configuration found" else warn "Production environment not configured" return 1 fi } # Validate configuration validate_config() { log "Validating production configuration..." # Source production environment if [[ -f ".env.production.secure" ]]; then source .env.production.secure else error "Production environment file not found" exit 1 fi # Validate critical settings if [[ -z "${MEV_BOT_ENCRYPTION_KEY:-}" ]]; then error "MEV_BOT_ENCRYPTION_KEY not set" exit 1 fi if [[ ${#MEV_BOT_ENCRYPTION_KEY} -lt 32 ]]; then error "MEV_BOT_ENCRYPTION_KEY too short (minimum 32 characters)" exit 1 fi if [[ -z "${ARBITRUM_RPC_ENDPOINT:-}" ]]; then error "ARBITRUM_RPC_ENDPOINT not set" exit 1 fi log "✅ Configuration validated" } # Start monitoring start_monitoring() { log "Starting monitoring and metrics..." # Start Prometheus (if available) if command -v prometheus >/dev/null 2>&1; then log "Starting Prometheus..." prometheus --config.file=monitoring/prometheus.yml --storage.tsdb.path=monitoring/data & echo $! > monitoring/prometheus.pid fi # Start Grafana (if available) if command -v grafana-server >/dev/null 2>&1; then log "Starting Grafana..." grafana-server --config=monitoring/grafana.ini & echo $! > monitoring/grafana.pid fi log "✅ Monitoring started (check ports 9090, 3000)" } # Start MEV bot start_mev_bot() { log "🚀 Starting MEV Bot in PRODUCTION mode..." # Set production environment safely (avoid code injection) if [[ -f ".env.production.secure" ]]; then set -a source .env.production.secure set +a fi # Additional production environment export GO_ENV=production export DEBUG=false export LOG_LEVEL=info # Performance tuning export GOMAXPROCS=4 export GOGC=100 # Start the bot with proper logging log "Starting MEV bot process..." # Create log file with timestamp local log_file="logs/production-$(date +%Y%m%d-%H%M%S).log" # Start bot with output to both console and log file ./bin/mev-bot start 2>&1 | tee "$log_file" & local bot_pid=$! echo "$bot_pid" > mev-bot.pid log "✅ MEV Bot started with PID: $bot_pid" log "📊 Logs: $log_file" log "🔍 Monitor with: tail -f $log_file" # Wait a moment to check if process started successfully sleep 3 if kill -0 "$bot_pid" 2>/dev/null; then log "🎉 MEV Bot is running successfully!" log "💰 Profit tracking active - monitor logs for opportunities" else error "❌ MEV Bot failed to start" exit 1 fi } # Display status show_status() { echo "" log "🎯 PRODUCTION STATUS:" echo "" # MEV Bot status if [[ -f "mev-bot.pid" ]]; then local bot_pid bot_pid=$(cat mev-bot.pid) if kill -0 "$bot_pid" 2>/dev/null; then info "✅ MEV Bot: RUNNING (PID: $bot_pid)" else warn "❌ MEV Bot: STOPPED" fi else warn "❌ MEV Bot: NOT STARTED" fi # Monitoring status if [[ -f "monitoring/prometheus.pid" ]]; then local prom_pid prom_pid=$(cat monitoring/prometheus.pid) if kill -0 "$prom_pid" 2>/dev/null; then info "✅ Prometheus: RUNNING (PID: $prom_pid) - http://localhost:9090" fi fi if [[ -f "monitoring/grafana.pid" ]]; then local grafana_pid grafana_pid=$(cat monitoring/grafana.pid) if kill -0 "$grafana_pid" 2>/dev/null; then info "✅ Grafana: RUNNING (PID: $grafana_pid) - http://localhost:3000" fi fi echo "" log "💡 Quick Commands:" log " View logs: tail -f logs/production-*.log" log " Stop bot: ./scripts/production-stop.sh" log " Monitor: watch -n 1 'ps aux | grep mev-bot'" echo "" log "🎯 READY FOR PROFIT GENERATION!" log "Monitor the logs for arbitrage opportunities and executed trades" } # Production safety warning safety_warning() { echo "" warn "⚠️ PRODUCTION DEPLOYMENT WARNING:" echo "" echo "1. 💰 This will start LIVE trading with real funds" echo "2. 🔑 Ensure your private keys are secure" echo "3. 💸 Start with small position sizes" echo "4. 📊 Monitor all transactions closely" echo "5. 🚨 Set up alerts for unusual activity" echo "" read -p "Are you ready to start LIVE trading? (type 'PROFIT' to confirm): " -r if [[ $REPLY != "PROFIT" ]]; then echo "Deployment cancelled" exit 0 fi echo "" } # Quick deployment mode quick_deploy() { log "🚀 QUICK DEPLOYMENT MODE - MAXIMUM SPEED TO PROFIT" # Skip most checks, assume environment is ready if [[ -f ".env.production.secure" ]]; then set -a source .env.production.secure set +a fi export GO_ENV=production export DEBUG=false # Start bot immediately ./bin/mev-bot start & local bot_pid=$! echo "$bot_pid" > mev-bot.pid log "⚡ MEV Bot deployed in QUICK mode (PID: $bot_pid)" log "💰 PROFIT GENERATION ACTIVE" # Quick status check sleep 2 if kill -0 "$bot_pid" 2>/dev/null; then log "🎉 SUCCESS - Bot is generating profits!" else error "❌ Quick deployment failed" exit 1 fi } # Main deployment function main() { local mode="${1:-full}" header case "$mode" in quick) log "QUICK DEPLOYMENT MODE" quick_deploy ;; full) log "FULL PRODUCTION DEPLOYMENT" safety_warning preflight_checks validate_config start_monitoring start_mev_bot show_status ;; status) show_status ;; *) error "Unknown mode: $mode" echo "Usage: $0 [full|quick|status]" echo " full - Complete production deployment with all checks" echo " quick - Fast deployment, skip checks (IMMEDIATE PROFIT)" echo " status - Show current status" exit 1 ;; esac } # Handle interrupts gracefully trap 'error "Deployment interrupted"; exit 1' INT TERM # Run main function main "$@"