Files
mev-beta/scripts/test-calculations.sh
Administrator 803de231ba feat: create v2-prep branch with comprehensive planning
Restructured project for V2 refactor:

**Structure Changes:**
- Moved all V1 code to orig/ folder (preserved with git mv)
- Created docs/planning/ directory
- Added orig/README_V1.md explaining V1 preservation

**Planning Documents:**
- 00_V2_MASTER_PLAN.md: Complete architecture overview
  - Executive summary of critical V1 issues
  - High-level component architecture diagrams
  - 5-phase implementation roadmap
  - Success metrics and risk mitigation

- 07_TASK_BREAKDOWN.md: Atomic task breakdown
  - 99+ hours of detailed tasks
  - Every task < 2 hours (atomic)
  - Clear dependencies and success criteria
  - Organized by implementation phase

**V2 Key Improvements:**
- Per-exchange parsers (factory pattern)
- Multi-layer strict validation
- Multi-index pool cache
- Background validation pipeline
- Comprehensive observability

**Critical Issues Addressed:**
- Zero address tokens (strict validation + cache enrichment)
- Parsing accuracy (protocol-specific parsers)
- No audit trail (background validation channel)
- Inefficient lookups (multi-index cache)
- Stats disconnection (event-driven metrics)

Next Steps:
1. Review planning documents
2. Begin Phase 1: Foundation (P1-001 through P1-010)
3. Implement parsers in Phase 2
4. Build cache system in Phase 3
5. Add validation pipeline in Phase 4
6. Migrate and test in Phase 5

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 10:14:26 +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 ""