diff --git a/scripts/run-flash-swap-bot.sh b/scripts/run-flash-swap-bot.sh index e6039f9..3013da7 100755 --- a/scripts/run-flash-swap-bot.sh +++ b/scripts/run-flash-swap-bot.sh @@ -6,8 +6,14 @@ set -e # # Starts the MEV bot with flash swap arbitrage on Arbitrum # +# This script handles all setup including: +# - Building the binary +# - Verifying required configuration files +# - Setting environment variables +# - Starting the bot +# # Usage: -# ./scripts/run-flash-swap-bot.sh [--rpc RPC_URL] [--capital CAPITAL] [--dry-run] +# ./scripts/run-flash-swap-bot.sh [--rpc RPC_URL] [--capital CAPITAL] [--dry-run] [--fork] ################################################################# # Colors for output @@ -17,6 +23,14 @@ YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color +# Strict error handling +set -o pipefail +trap 'echo -e "${RED}❌ Error occurred on line $LINENO${NC}"; exit 1' ERR + +# Script paths +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" + # Default values RPC_URL="${ARB_RPC_URL:-https://arb1.arbitrum.io/rpc}" CAPITAL="${CAPITAL:-5000}" @@ -96,10 +110,12 @@ echo "║ ║ echo "╚════════════════════════════════════════════════════════════════════╝" echo "" -# Check if binary exists -if [ ! -f "./bin/mev-bot" ]; then - echo -e "${YELLOW}⚠️ Binary not found at ./bin/mev-bot${NC}" +# Check if binary exists, build if needed +echo -e "${BLUE}[1/5] Checking binary...${NC}" +if [ ! -f "$PROJECT_ROOT/bin/mev-bot" ]; then + echo -e "${YELLOW}⚠️ Binary not found at $PROJECT_ROOT/bin/mev-bot${NC}" echo "Building project..." + cd "$PROJECT_ROOT" go build -o ./bin/mev-bot ./cmd/mev-bot/main.go if [ $? -eq 0 ]; then echo -e "${GREEN}✅ Build successful${NC}" @@ -107,10 +123,39 @@ if [ ! -f "./bin/mev-bot" ]; then echo -e "${RED}❌ Build failed${NC}" exit 1 fi +else + echo -e "${GREEN}✅ Binary found${NC}" fi +echo "" + +# Verify required configuration files exist +echo -e "${BLUE}[2/5] Checking configuration files...${NC}" +REQUIRED_CONFIGS=( + "config/config.yaml" + "config/providers.yaml" +) + +for config in "${REQUIRED_CONFIGS[@]}"; do + if [ ! -f "$PROJECT_ROOT/$config" ]; then + echo -e "${RED}❌ Missing required config: $config${NC}" + echo "Please create $config before running the bot." + exit 1 + fi +done +echo -e "${GREEN}✅ All configuration files present${NC}" +echo "" + +# Create necessary directories +echo -e "${BLUE}[3/5] Setting up directories...${NC}" +mkdir -p "$PROJECT_ROOT/logs" +mkdir -p "$PROJECT_ROOT/data" +echo -e "${GREEN}✅ Directories ready${NC}" +echo "" # Display configuration echo -e "${BLUE}Configuration:${NC}" +echo " Project Root: $PROJECT_ROOT" +echo " Binary Path: $PROJECT_ROOT/bin/mev-bot" echo " RPC Endpoint: $RPC_URL" echo " Capital: \$$CAPITAL USD" echo " Dry Run: $DRY_RUN" @@ -124,9 +169,9 @@ echo "" # Start fork if requested if [ "$FORK_MODE" = true ]; then - echo -e "${BLUE}Starting Arbitrum fork...${NC}" + echo -e "${BLUE}[4/5] Starting Arbitrum fork...${NC}" if command -v anvil &> /dev/null; then - ./scripts/fork-arbitrum.sh & + "$SCRIPT_DIR/fork-arbitrum.sh" & FORK_PID=$! sleep 5 RPC_URL="http://localhost:8545" @@ -135,25 +180,85 @@ if [ "$FORK_MODE" = true ]; then echo -e "${RED}❌ Anvil not found. Install with: forge install${NC}" exit 1 fi +else + echo -e "${BLUE}[4/5] Using live RPC endpoint...${NC}" + echo -e "${GREEN}✅ RPC endpoint configured${NC}" +fi +echo "" + +# Set environment variables for bot configuration +echo -e "${BLUE}[5/5] Setting up environment variables...${NC}" +export GO_ENV="development" + +# The config.yaml uses ARBITRUM_RPC_ENDPOINT, not ARB_RPC_URL +export ARBITRUM_RPC_ENDPOINT="$RPC_URL" +export ARB_RPC_URL="$RPC_URL" +export INITIAL_CAPITAL="$CAPITAL" + +# Required security variables +if [ -z "$MEV_BOT_ENCRYPTION_KEY" ]; then + export MEV_BOT_ENCRYPTION_KEY="dev-key-change-in-production-$(date +%s)" + echo -e "${YELLOW}⚠️ Using generated DEV encryption key. Set MEV_BOT_ENCRYPTION_KEY for production.${NC}" fi -# Build command -CMD="./bin/mev-bot start" -CMD="$CMD --rpc \"$RPC_URL\"" -CMD="$CMD --capital \"$CAPITAL\"" - +# Optional dry-run mode if [ "$DRY_RUN" = true ]; then - CMD="$CMD --dry-run" + export MEV_BOT_DRY_RUN="true" fi -echo -e "${BLUE}Running bot...${NC}" +# Optional security manager +if [ -z "$SECURITY_MANAGER_ENABLED" ]; then + export SECURITY_MANAGER_ENABLED="false" +fi + +echo "Environment variables:" +echo " GO_ENV: $GO_ENV" +echo " ARBITRUM_RPC_ENDPOINT: $ARBITRUM_RPC_ENDPOINT" +echo " INITIAL_CAPITAL: $INITIAL_CAPITAL" +echo " MEV_BOT_ENCRYPTION_KEY: (set)" +echo " SECURITY_MANAGER_ENABLED: $SECURITY_MANAGER_ENABLED" +if [ "$DRY_RUN" = true ]; then + echo " MEV_BOT_DRY_RUN: enabled" +fi +echo "" + +# Final verification before launch +echo -e "${YELLOW}Performing final pre-flight checks...${NC}" +cd "$PROJECT_ROOT" + +# Verify binary is executable +if [ ! -x "$PROJECT_ROOT/bin/mev-bot" ]; then + chmod +x "$PROJECT_ROOT/bin/mev-bot" + echo -e "${GREEN}✅ Binary permissions set${NC}" +else + echo -e "${GREEN}✅ Binary is executable${NC}" +fi + +echo "" +echo -e "${GREEN}✅ ALL PRE-FLIGHT CHECKS PASSED${NC}" +echo "" + +# Show startup message +echo "╔════════════════════════════════════════════════════════════════════╗" +echo "║ 🤖 STARTING FLASH SWAP ARBITRAGE BOT ║" +echo "╠════════════════════════════════════════════════════════════════════╣" +echo "║ ║" +echo "║ Command: ./bin/mev-bot start ║" +echo "║ Config: config/config.yaml (GO_ENV=$GO_ENV) ║" +echo "║ RPC: $RPC_URL ║" +echo "║ ║" +echo "║ Press Ctrl+C to stop gracefully ║" +echo "║ ║" +echo "╚════════════════════════════════════════════════════════════════════╝" echo "" # Run the bot -eval "$CMD" +"$PROJECT_ROOT/bin/mev-bot" start # Cleanup fork if started if [ "$FORK_MODE" = true ] && [ ! -z "$FORK_PID" ]; then echo -e "${YELLOW}Stopping fork...${NC}" kill $FORK_PID 2>/dev/null || true fi + +echo -e "${GREEN}✅ Bot stopped gracefully${NC}"