Files
mev-beta/orig/scripts/test-calculations.sh
Administrator c54c569f30 refactor: move all remaining files to orig/ directory
Completed clean root directory structure:
- Root now contains only: .git, .env, docs/, orig/
- Moved all remaining files and directories to orig/:
  - Config files (.claude, .dockerignore, .drone.yml, etc.)
  - All .env variants (except active .env)
  - Git config (.gitconfig, .github, .gitignore, etc.)
  - Tool configs (.golangci.yml, .revive.toml, etc.)
  - Documentation (*.md files, @prompts)
  - Build files (Dockerfiles, Makefile, go.mod, go.sum)
  - Docker compose files
  - All source directories (scripts, tests, tools, etc.)
  - Runtime directories (logs, monitoring, reports)
  - Dependency files (node_modules, lib, cache)
  - Special files (--delete)

- Removed empty runtime directories (bin/, data/)

V2 structure is now clean:
- docs/planning/ - V2 planning documents
- orig/ - Complete V1 codebase preserved
- .env - Active environment config (not in git)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 10:53:05 +01:00

201 lines
8.7 KiB
Bash
Executable File

#!/bin/bash
# Test Calculations Framework - Extract and validate arbitrage calculations from logs
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
TEST_DIR="$PROJECT_ROOT/tests/calculation-validation"
LOG_FILE="${1:-/tmp/mev_full_logs.txt}"
# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}═══════════════════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE} MEV Bot - Arbitrage Calculation Validation Framework${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════════════════${NC}"
echo ""
# Create test directory
mkdir -p "$TEST_DIR/extracted"
mkdir -p "$TEST_DIR/reports"
echo -e "${YELLOW}Step 1: Extracting arbitrage opportunities from logs...${NC}"
# Check if log file exists
if [ ! -f "$LOG_FILE" ]; then
echo -e "${YELLOW}Log file not found at $LOG_FILE${NC}"
echo -e "${YELLOW}Extracting from running container...${NC}"
podman logs mev-bot-dev-master-dev 2>&1 > "$LOG_FILE"
fi
# Extract executable opportunities
echo -e "${GREEN}Extracting executable opportunities...${NC}"
grep "EXECUTABLE OPPORTUNITY" "$LOG_FILE" > "$TEST_DIR/extracted/executable_opportunities.log" || true
EXEC_COUNT=$(wc -l < "$TEST_DIR/extracted/executable_opportunities.log" || echo "0")
echo -e " ✓ Found $EXEC_COUNT executable opportunities"
# Extract opportunity details
echo -e "${GREEN}Extracting opportunity details...${NC}"
grep "ARBITRAGE OPPORTUNITY DETECTED" "$LOG_FILE" -A 20 > "$TEST_DIR/extracted/opportunity_details.log" || true
DETAIL_COUNT=$(grep -c "ARBITRAGE OPPORTUNITY DETECTED" "$TEST_DIR/extracted/opportunity_details.log" || echo "0")
echo -e " ✓ Found $DETAIL_COUNT opportunity records"
# Extract V3 swap calculations
echo -e "${GREEN}Extracting V3 swap calculations...${NC}"
grep "V3 calculation:" "$LOG_FILE" > "$TEST_DIR/extracted/v3_calculations.log" || true
V3_COUNT=$(wc -l < "$TEST_DIR/extracted/v3_calculations.log" || echo "0")
echo -e " ✓ Found $V3_COUNT V3 swap calculations"
# Extract profit threshold checks
echo -e "${GREEN}Extracting profit threshold checks...${NC}"
grep "Profit threshold check:" "$LOG_FILE" > "$TEST_DIR/extracted/threshold_checks.log" || true
THRESHOLD_COUNT=$(wc -l < "$TEST_DIR/extracted/threshold_checks.log" || echo "0")
echo -e " ✓ Found $THRESHOLD_COUNT threshold validation checks"
# Extract rejected opportunities
echo -e "${GREEN}Extracting rejected opportunities...${NC}"
grep "rejectReason:" "$LOG_FILE" | grep -v "rejectReason: " | grep -v "rejectReason:$" > "$TEST_DIR/extracted/rejections.log" || true
REJECT_COUNT=$(wc -l < "$TEST_DIR/extracted/rejections.log" || echo "0")
echo -e " ✓ Found $REJECT_COUNT rejections"
echo ""
echo -e "${YELLOW}Step 2: Generating summary report...${NC}"
REPORT_FILE="$TEST_DIR/reports/validation_report_$(date +%Y%m%d_%H%M%S).md"
cat > "$REPORT_FILE" <<EOF
# Arbitrage Calculation Validation Report
**Generated:** $(date)
**Log File:** $LOG_FILE
## Summary Statistics
- **Executable Opportunities:** $EXEC_COUNT
- **Total Opportunity Records:** $DETAIL_COUNT
- **V3 Calculations:** $V3_COUNT
- **Threshold Checks:** $THRESHOLD_COUNT
- **Rejections:** $REJECT_COUNT
## Executable Opportunities Analysis
EOF
if [ $EXEC_COUNT -gt 0 ]; then
echo "### Top 10 Executable Opportunities" >> "$REPORT_FILE"
echo '```' >> "$REPORT_FILE"
head -10 "$TEST_DIR/extracted/executable_opportunities.log" >> "$REPORT_FILE"
echo '```' >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
fi
echo "## Profit Calculation Validation" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
if [ $THRESHOLD_COUNT -gt 0 ]; then
echo "### Sample Threshold Checks (First 5)" >> "$REPORT_FILE"
echo '```' >> "$REPORT_FILE"
head -5 "$TEST_DIR/extracted/threshold_checks.log" >> "$REPORT_FILE"
echo '```' >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
fi
echo "## Rejection Analysis" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
if [ $REJECT_COUNT -gt 0 ]; then
echo "### Rejection Reasons Breakdown" >> "$REPORT_FILE"
echo '```' >> "$REPORT_FILE"
grep -oP 'rejectReason:\K[^,}]+' "$TEST_DIR/extracted/rejections.log" | sort | uniq -c | sort -rn >> "$REPORT_FILE"
echo '```' >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
fi
echo "## V3 Calculation Samples" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
if [ $V3_COUNT -gt 0 ]; then
echo "### Recent V3 Calculations (Last 10)" >> "$REPORT_FILE"
echo '```' >> "$REPORT_FILE"
tail -10 "$TEST_DIR/extracted/v3_calculations.log" >> "$REPORT_FILE"
echo '```' >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
fi
echo "---" >> "$REPORT_FILE"
echo "**Report saved to:** $REPORT_FILE" >> "$REPORT_FILE"
echo -e "${GREEN}✓ Report generated: $REPORT_FILE${NC}"
echo ""
echo -e "${YELLOW}Step 3: Analyzing calculation accuracy...${NC}"
# Parse and validate calculations
if [ $EXEC_COUNT -gt 0 ]; then
echo -e "${GREEN}Validating executable opportunity calculations...${NC}"
# Extract profit values
grep -oP 'Profit=\K[0-9.]+' "$TEST_DIR/extracted/executable_opportunities.log" > "$TEST_DIR/extracted/profit_values.txt" || true
# Calculate statistics
if [ -f "$TEST_DIR/extracted/profit_values.txt" ] && [ -s "$TEST_DIR/extracted/profit_values.txt" ]; then
TOTAL_PROFIT=$(awk '{sum+=$1} END {print sum}' "$TEST_DIR/extracted/profit_values.txt")
AVG_PROFIT=$(awk '{sum+=$1} END {print sum/NR}' "$TEST_DIR/extracted/profit_values.txt")
MAX_PROFIT=$(sort -n "$TEST_DIR/extracted/profit_values.txt" | tail -1)
MIN_PROFIT=$(sort -n "$TEST_DIR/extracted/profit_values.txt" | head -1)
echo -e " ${BLUE}Total Profit Detected:${NC} $TOTAL_PROFIT ETH"
echo -e " ${BLUE}Average Profit:${NC} $AVG_PROFIT ETH"
echo -e " ${BLUE}Max Profit:${NC} $MAX_PROFIT ETH"
echo -e " ${BLUE}Min Profit:${NC} $MIN_PROFIT ETH"
fi
fi
echo ""
echo -e "${YELLOW}Step 4: Extracting test data for replay...${NC}"
# Create JSON test data for replay
TEST_DATA_FILE="$TEST_DIR/extracted/test_data.json"
echo "{" > "$TEST_DATA_FILE"
echo " \"timestamp\": \"$(date -Iseconds)\"," >> "$TEST_DATA_FILE"
echo " \"executableOpportunities\": $EXEC_COUNT," >> "$TEST_DATA_FILE"
echo " \"totalOpportunities\": $DETAIL_COUNT," >> "$TEST_DATA_FILE"
echo " \"v3Calculations\": $V3_COUNT," >> "$TEST_DATA_FILE"
echo " \"thresholdChecks\": $THRESHOLD_COUNT," >> "$TEST_DATA_FILE"
echo " \"rejections\": $REJECT_COUNT," >> "$TEST_DATA_FILE"
echo " \"logFile\": \"$LOG_FILE\"," >> "$TEST_DATA_FILE"
echo " \"extractedFiles\": {" >> "$TEST_DATA_FILE"
echo " \"executable\": \"$TEST_DIR/extracted/executable_opportunities.log\"," >> "$TEST_DATA_FILE"
echo " \"details\": \"$TEST_DIR/extracted/opportunity_details.log\"," >> "$TEST_DATA_FILE"
echo " \"v3Calcs\": \"$TEST_DIR/extracted/v3_calculations.log\"," >> "$TEST_DATA_FILE"
echo " \"thresholds\": \"$TEST_DIR/extracted/threshold_checks.log\"," >> "$TEST_DATA_FILE"
echo " \"rejections\": \"$TEST_DIR/extracted/rejections.log\"" >> "$TEST_DATA_FILE"
echo " }" >> "$TEST_DATA_FILE"
echo "}" >> "$TEST_DATA_FILE"
echo -e "${GREEN}✓ Test data saved: $TEST_DATA_FILE${NC}"
echo ""
echo -e "${GREEN}═══════════════════════════════════════════════════════════════════════${NC}"
echo -e "${GREEN} Extraction Complete!${NC}"
echo -e "${GREEN}═══════════════════════════════════════════════════════════════════════${NC}"
echo ""
echo -e "${BLUE}Next Steps:${NC}"
echo -e " 1. Review report: cat $REPORT_FILE"
echo -e " 2. Run Go validation tests: go test ./tests/calculation-validation/..."
echo -e " 3. Replay calculations: go run ./tests/calculation-validation/replay.go"
echo ""
echo -e "${YELLOW}Files Created:${NC}"
echo -e " - Executable opportunities: $TEST_DIR/extracted/executable_opportunities.log"
echo -e " - Opportunity details: $TEST_DIR/extracted/opportunity_details.log"
echo -e " - V3 calculations: $TEST_DIR/extracted/v3_calculations.log"
echo -e " - Threshold checks: $TEST_DIR/extracted/threshold_checks.log"
echo -e " - Rejections: $TEST_DIR/extracted/rejections.log"
echo -e " - Test data JSON: $TEST_DATA_FILE"
echo -e " - Validation report: $REPORT_FILE"
echo ""