5.8 KiB
MEV Bot - Critical Blockers Summary (QUICK REFERENCE)
Executive Summary
Zero profitable executions. System detects opportunities but fails to execute. 10 critical blockers identified.
The Problem In One Sentence
Token amounts extracted from swap events are ZERO, causing profit rejection for all opportunities before they reach the execution layer.
10 CRITICAL BLOCKERS
| # | Blocker | Impact | Location | Fix Time |
|---|---|---|---|---|
| 1 | Zero Amount Detection | Blocks 95%+ of opportunities | pkg/profitcalc/profit_calc.go:104-134 |
2-4h |
| 2 | Token Graph Empty | No arbitrage paths found | pkg/arbitrage/multihop.go:167-173 |
1-2h |
| 3 | BatchFetch Contract Reverts | Cannot get pool state | pkg/scanner/market/scanner.go:139-142 |
2-3h |
| 4 | Invalid Profit Margins | Extreme negative values (-330K%) | pkg/profitcalc/profit_calc.go:261-294 |
1h |
| 5 | Unknown Token Filtering | 95% tokens cannot be priced | pkg/profitcalc/profit_calc.go:152-161 |
2-3h |
| 6 | Execution Disconnected | Opportunities never execute | pkg/arbitrage/service.go |
2-3h |
| 7 | Profit Threshold Too High | Rejects valid opportunities | pkg/arbitrage/detection_engine.go:188 |
1h |
| 8 | BatchFetch Contract Wrong | RPC rate limits hit | pkg/datafetcher/batch_fetcher.go |
2-3h |
| 9 | No Executor Integration | Flash loans never trigger | pkg/arbitrage/executor.go |
2-3h |
| 10 | Parser Zero Amounts | Swap events lose data | pkg/events/parser.go |
2-4h |
Total Fix Time: 8-14 hours
Root Cause Chain
1. Event Parser Extracts ZERO amounts
↓
2. Profit Calculator Receives ZERO values
↓
3. Profit Margin = negative / 0 = EXTREME VALUE
↓
4. Bounds Check Rejects (< -1.0)
↓
5. Marked: isExecutable = false
↓
6. Execution Loop Never Triggered
↓
Result: ZERO PROFITS, ZERO EXECUTIONS
Most Critical Fixes (Priority Order)
FIX #1: Event Parser (2-4 hours)
File: pkg/events/parser.go or pkg/arbitrum/parser/core.go
Problem: Swap event amounts are extracted as ZERO
Solution:
- Validate event signature matching
- Fix decimal handling in amount conversion
- Test with real Arbitrum swap transactions
FIX #2: Token Graph (1-2 hours)
File: pkg/arbitrage/multihop.go:522-594
Problem: Token graph has only 8 hardcoded pools with placeholder data
Solution:
- Link 314 cached pools to token graph
- Implement pool discovery loop
- Verify minimum 20 tokens, 50 pools
FIX #3: Execution Pipeline (2-3 hours)
File: pkg/arbitrage/service.go
Problem: Detected opportunities are never executed
Solution:
- Connect opportunity forwarder to executor
- Implement execution goroutine
- Add transaction monitoring
Evidence From Logs
Zero Amounts in Opportunities
2025/11/02 15:22:33 [OPPORTUNITY] Amount In: 0.000000 tokens
Amount Out: 0.000000 tokens
Automatic Rejection
rejectReason:negative profit after gas and slippage costs
profitMargin:-330178.9776420681 (EXTREME NEGATIVE)
Zero Execution Stats
2025/11/02 15:22:38 [INFO] Arbitrage Service Stats
Detected: 0
Executed: 0
Successful: 0
Success Rate: 0.00%
Total Profit: 0.000000 ETH
BatchFetch Failures
2025/11/02 15:22:49 [WARN] Failed to fetch batch 0-1: execution reverted
(repeated 25+ times)
System Status
| Component | Status | Evidence |
|---|---|---|
| Detection Engine | ✅ WORKING | Detects multiple opportunities/minute |
| Amount Extraction | ❌ BROKEN | All amounts = 0.000000 |
| Profit Calculation | ❌ BROKEN | Uses invalid amounts |
| Execution Pipeline | ❌ DISCONNECTED | No executor calls |
| Token Graph | ❌ INCOMPLETE | 8 hardcoded pools only |
| Pool State Fetch | ❌ FAILING | BatchFetch contract reverts |
What Works vs What Doesn't
What's Working ✅
- RPC connection to Arbitrum
- Event monitoring and parsing (structure is correct)
- Opportunity detection (finds swaps correctly)
- Pool caching (314 pools cached)
- Key generation and wallet setup
What's Broken ❌
- Token amount extraction (shows as 0.000000)
- Profit margin calculation (extreme values)
- Token graph initialization (empty/incomplete)
- Batch pool data fetching (contract calls fail)
- Execution connection (never triggered)
- Flash executor integration (dormant)
Quick Diagnosis Steps
Run these to verify the blockers:
# 1. Check event parser is extracting zero amounts
grep "Amount In: 0.000000" logs/mev_bot.log | wc -l
# Expected: 50+ (confirms Blocker #1)
# 2. Check token graph connectivity
grep "has no adjacent tokens" logs/mev_bot.log
# Expected: Found (confirms Blocker #2)
# 3. Check batch fetcher failures
grep "batch fetch V3 data failed" logs/mev_bot.log | wc -l
# Expected: 20+ (confirms Blocker #3)
# 4. Check zero executions
grep "Executed: 0" logs/mev_bot.log | wc -l
# Expected: All recent stats (confirms Blocker #6)
Expected Outcome After Fixes
After fixing blockers #1-2 (4-6 hours):
- Token amounts extracted correctly
- Token graph has 20+ tokens with 50+ pools
- Profit calculator receives valid amounts
- 50%+ of opportunities marked as executable
After fixing blocker #6 (2-3 hours):
- Execution pipeline triggers for valid opportunities
- First profitable trade executes
- System achieves positive P&L
Next Steps
- DEBUG: Add logging to event parser to verify amount extraction
- FIX: Correct the amount extraction logic in parser
- VALIDATE: Confirm profit calculations use non-zero amounts
- CONNECT: Wire opportunity detection to execution pipeline
- TEST: Execute first successful arbitrage trade
Detailed Analysis: See MEV_BOT_COMPREHENSIVE_AUDIT_20251104.md