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>
This commit is contained in:
200
scripts/test-calculations.sh
Executable file
200
scripts/test-calculations.sh
Executable file
@@ -0,0 +1,200 @@
|
||||
#!/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 ""
|
||||
Reference in New Issue
Block a user