CRITICAL FIXES: 1. Multi-hop arbitrage amount=0 bug - Added missing config values: - min_scan_amount_wei: 10000000000000000 (0.01 ETH minimum) - max_scan_amount_wei: 9000000000000000000 (9 ETH, fits int64) - min_significant_swap_size: 10000000000000000 (0.01 ETH) 2. WebSocket 403 Forbidden error - Documented WSS endpoint issue: - Chainstack WSS endpoint returns 403 Forbidden - Updated ws_endpoint comment to explain using empty string for HTTP fallback ROOT CAUSE ANALYSIS: - The ArbitrageService.calculateScanAmount() was defaulting to 0 because config.MinScanAmountWei was uninitialized - This caused all multi-hop arbitrage scans to use amount=0, preventing any opportunities from being detected (803 occurrences in logs) VERIFICATION: - Container rebuilt and restarted successfully - No 403 Forbidden errors in logs ✓ - No amount=0 errors in logs ✓ - Bot processing swaps normally ✓ DOCUMENTATION: - Added comprehensive log analysis (logs/LOG_ANALYSIS_20251109.md) - Added detailed error analysis (logs/ERROR_ANALYSIS_20251109.md) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
12 KiB
MEV Bot Error & Inconsistency Analysis
Date: November 9, 2025 Analysis Time: 04:31 UTC Container: mev-bot-production Total Log Lines Analyzed: 15,769+
🚨 CRITICAL ISSUES FOUND
1. ❌ CRITICAL: Arbitrum Monitor Connection Failure
Error:
[ERROR] ❌ CRITICAL: Failed to create Arbitrum monitor:
failed to create contract executor:
failed to connect to Ethereum node:
websocket: bad handshake (HTTP status 403 Forbidden)
Impact: SEVERE - Bot is NOT using proper Arbitrum sequencer reader
Details:
- The bot attempted to connect to:
wss://arbitrum-mainnet.core.chainstack.com/53c30e7a941160679fdcc396c894fc57 - Connection was rejected with HTTP 403 Forbidden
- This prevents the bot from using the proper ArbitrumMonitor with L2Parser
Current Status:
[ERROR] ❌ FALLBACK: Using basic block polling instead of proper sequencer reader
[INFO] ⚠️ USING FALLBACK BLOCK POLLING - This is NOT the proper sequencer reader!
[INFO] ⚠️ This fallback method has limited transaction analysis capabilities
[INFO] ⚠️ For full MEV detection, the proper ArbitrumMonitor with L2Parser should be used
Consequences:
- Limited transaction analysis capabilities
- May miss MEV opportunities that require L2-specific analysis
- Cannot detect certain types of arbitrage opportunities
- Reduced effectiveness compared to proper sequencer monitoring
Root Cause:
- Configuration mismatch between config.dev.yaml and .env
- config.dev.yaml specifies HTTP endpoint:
https://arb1.arbitrum.io/rpc - .env overrides with WSS endpoint that returns 403 Forbidden
- The WSS endpoint may require authentication or have access restrictions
Recommended Fix:
- Use HTTP endpoint for contract executor:
https://arb1.arbitrum.io/rpc - Or obtain proper credentials for the Chainstack WSS endpoint
- Update configuration to use compatible RPC providers
2. 🐛 BUG: Multi-Hop Arbitrage Always Uses Amount 0
Error Pattern:
[DEBUG] Processing swap event: amount0=-7196652813349979, amount1=24235863
[DEBUG] Starting multi-hop arbitrage scan for token [...] with amount 0
Occurrences: 803 instances (ALL multi-hop scans)
Impact: SEVERE - Arbitrage detection is broken
Details:
Every time a swap event is detected with actual non-zero amounts, the subsequent multi-hop arbitrage scan is initiated with amount 0.
Examples:
| Swap Event Amount0 | Swap Event Amount1 | Multi-hop Scan Amount | Result |
|---|---|---|---|
| -7196652813349979 | 24235863 | 0 | ❌ Wrong |
| -184770257309794794 | 622210434 | 0 | ❌ Wrong |
| 189409592403453152 | -637446655 | 0 | ❌ Wrong |
| 356600000000000000 | -1199728957 | 0 | ❌ Wrong |
| 148930729359897857580 | -42645234 | 0 | ❌ Wrong |
Expected Behavior: The multi-hop arbitrage scan should use the actual swap amount (either amount0 or amount1 depending on direction) to calculate realistic arbitrage opportunities.
Actual Behavior: All scans use amount 0, which means:
- No realistic price impact calculations
- Cannot determine actual profitability
- Arbitrage detection will never find opportunities (amount 0 = no trade possible)
Code Issue Location: The swap event processing code is not correctly passing the swap amount to the multi-hop arbitrage scanner. It's likely defaulting to 0 or using the wrong variable.
Why This Matters:
- This is why Detected = 0 - The bot cannot find arbitrage opportunities with zero input amount
- Even if price discrepancies exist, they won't be detected because the calculation starts with 0
Recommended Fix:
// Current (broken):
scanner.StartMultiHopScan(token, 0)
// Should be:
scanner.StartMultiHopScan(token, actualSwapAmount)
3. ⚠️ Configuration Inconsistency
Issue: Config file vs Environment variable mismatch
Config.dev.yaml:
arbitrum:
rpc_endpoint: "https://arb1.arbitrum.io/rpc"
ws_endpoint: ""
Environment (.env):
ARBITRUM_RPC_ENDPOINT=wss://arbitrum-mainnet.core.chainstack.com/...
ARBITRUM_WS_ENDPOINT=wss://arbitrum-mainnet.core.chainstack.com/...
Impact: MEDIUM - Causes confusion and connection failures
Details:
- Environment variables override config file
- Config specifies HTTP endpoint (working)
- .env specifies WSS endpoint (403 Forbidden)
- This inconsistency led to the Critical Issue #1
Recommended Fix: Align configuration sources to use the same, working endpoint.
📊 ERROR FREQUENCY ANALYSIS
Errors by Type
| Error Type | Count | Severity | Status |
|---|---|---|---|
| "arbitrage service disabled" | 96 | Low | ✅ Resolved (startup only) |
| WebSocket 403 Forbidden | 1 | CRITICAL | ❌ Active |
| Multi-hop amount=0 bug | 803 | CRITICAL | ❌ Active |
| Missing pools.json | ~50 | Low | ⚠️ Expected |
| Dashboard server closed | 1 | Low | ✅ Normal shutdown |
| Metrics server closed | 1 | Low | ✅ Normal shutdown |
Critical Errors Timeline
03:32:56 UTC - Bot starts, connection to Arbitrum monitor fails 03:32:56 UTC - Falls back to basic block polling 03:33:01 UTC - First multi-hop scan with amount 0 (bug begins) 04:31:00 UTC - Still running in fallback mode (ongoing)
🔍 INCONSISTENCIES DETECTED
1. Swap Detection vs Arbitrage Analysis Mismatch
Inconsistency:
- Swap Events Detected: 600+ with valid non-zero amounts
- Arbitrage Opportunities: 0 detected
- Multi-hop Scans: 803 initiated, ALL with amount 0
Analysis: The disconnect between detecting real swaps (with real amounts) and analyzing them for arbitrage (with zero amounts) explains why no opportunities are found.
Expected Flow:
Swap Event → Extract Amount → Analyze with Amount → Find Arbitrage
Actual Flow:
Swap Event → Extract Amount → Analyze with ZERO → Find Nothing ❌
2. Connection Success vs Monitor Failure
Inconsistency:
✅ RPC endpoints validated
❌ Failed to create Arbitrum monitor
Analysis:
- RPC validation passes (basic connectivity check)
- Arbitrum monitor creation fails (advanced sequencer connection)
- This suggests the endpoint works for basic queries but not for WebSocket subscriptions
3. Health Score vs Actual Functionality
Inconsistency:
- Health Score: 1/1 (Perfect)
- Actual Status: Running in fallback mode with broken arbitrage
Analysis: The health check system is not detecting:
- Fallback mode operation
- Zero-amount arbitrage bug
- Missing Arbitrum monitor
Recommendation: Enhance health checks to detect:
- Whether proper sequencer reader is active
- Whether arbitrage scans are using valid amounts
- Whether connection is in fallback mode
🔧 DETAILED ERROR ANALYSIS
WebSocket Connection Failure Deep Dive
Attempted Connection:
wss://arbitrum-mainnet.core.chainstack.com/53c30e7a941160679fdcc396c894fc57
Response: HTTP 403 Forbidden
Possible Causes:
- API Key Restriction: The endpoint may require additional authentication
- Rate Limiting: Request may have been rate-limited
- Geographic Restriction: IP address may be blocked
- Incorrect Protocol: Endpoint may not support WSS connections
- Service Limitation: Free tier may not support WebSocket subscriptions
Evidence:
- HTTP endpoint (https://) works for basic queries
- WSS endpoint (wss://) returns 403 Forbidden
- This pattern suggests WebSocket access is restricted
Testing:
# Test HTTP endpoint (likely works):
curl https://arbitrum-mainnet.core.chainstack.com/53c30e7a941160679fdcc396c894fc57
# Test WSS endpoint (returns 403):
wscat -c wss://arbitrum-mainnet.core.chainstack.com/53c30e7a941160679fdcc396c894fc57
📈 IMPACT ASSESSMENT
Impact on MEV Detection
| Component | Expected | Actual | Impact |
|---|---|---|---|
| Block Processing | ✅ Real-time | ✅ Real-time | None |
| Swap Detection | ✅ Accurate | ✅ Accurate | None |
| Arbitrage Analysis | ✅ With amounts | ❌ With zero | SEVERE |
| Opportunity Detection | ✅ Find MEV | ❌ Find nothing | SEVERE |
| Sequencer Monitoring | ✅ L2Parser | ❌ Fallback | HIGH |
Performance Impact
- CPU Usage: 0.62% (efficient despite issues)
- Memory Usage: 0.8% (no leaks)
- Scan Performance: 35.48ms average (good)
- Detection Rate: 0% opportunities (broken)
Data Accuracy Impact
| Metric | Status | Accuracy |
|---|---|---|
| Blocks Processed | ✅ Accurate | 100% |
| Swap Events | ✅ Accurate | 100% |
| Swap Amounts | ✅ Accurate | 100% |
| Arbitrage Input | ❌ Wrong | 0% (all zeros) |
| Opportunities | ❌ Broken | 0% |
🎯 ROOT CAUSE ANALYSIS
Root Cause #1: Configuration Error
What Happened:
- Production deployment used .env file with WSS endpoint
- WSS endpoint returns 403 Forbidden
- Arbitrum monitor fails to initialize
- Bot falls back to basic polling
Why It Happened:
- Environment variables override config file
- No validation that WSS endpoint is accessible
- No fallback RPC endpoint configured
How to Prevent:
- Validate all RPC endpoints during startup
- Test WebSocket connectivity before using
- Fail fast with clear error messages
Root Cause #2: Logic Bug in Arbitrage Scanner
What Happened:
- Swap event detected with actual amounts
- Swap amounts extracted correctly
- Multi-hop scanner called with hardcoded 0
- No opportunities found (can't arbitrage with 0)
Why It Happened:
- Code bug: Wrong variable passed to scanner
- Missing tests for swap event → arbitrage flow
- No validation that scan amount > 0
How to Prevent:
- Add unit tests for swap processing
- Add assertion: amount > 0 before scanning
- Add integration tests for full flow
🚀 RECOMMENDED FIXES (Priority Order)
PRIORITY 1: Fix Multi-Hop Amount Bug
Severity: CRITICAL Impact: Enables arbitrage detection
Fix: Locate swap event processing code and ensure actual swap amounts are passed to multi-hop scanner.
File: Likely pkg/scanner/ or pkg/arbitrage/
Search for: StartMultiHopScan or multi-hop arbitrage scan
Change: Pass actual swap amount instead of 0
Validation:
Before: "Starting multi-hop arbitrage scan for token X with amount 0"
After: "Starting multi-hop arbitrage scan for token X with amount 356600000000000000"
PRIORITY 2: Fix RPC Endpoint Connection
Severity: CRITICAL Impact: Enables proper Arbitrum sequencer monitoring
Fix Options:
Option A: Use HTTP Endpoint
# Update .env:
ARBITRUM_RPC_ENDPOINT=https://arb1.arbitrum.io/rpc
ARBITRUM_WS_ENDPOINT= # Leave empty or remove
Option B: Fix WSS Endpoint
- Contact Chainstack support
- Verify API key has WebSocket permissions
- Check account tier limitations
- Test endpoint accessibility
Option C: Use Alternative Provider
# Free public endpoints:
ARBITRUM_RPC_ENDPOINT=https://arbitrum-one.publicnode.com
ARBITRUM_WS_ENDPOINT=wss://arbitrum-one.publicnode.com
PRIORITY 3: Add Validation & Health Checks
Severity: MEDIUM Impact: Prevents future issues
Add Checks:
- Validate RPC endpoint accessibility on startup
- Verify arbitrage scan amounts are non-zero
- Detect fallback mode in health checks
- Alert when running without proper monitor
📝 SUMMARY
Critical Issues (Must Fix):
- ❌ Multi-hop arbitrage always uses amount 0 (803 occurrences)
- ❌ Arbitrum monitor connection fails (403 Forbidden)
- ❌ Running in fallback mode (limited capabilities)
Impact:
- Current Detection Rate: 0% (broken)
- Expected Detection Rate: Should be > 0% with proper configuration
- Performance: Good (35ms scans)
- Stability: Excellent (no crashes)
Status:
✅ Bot is stable and running ✅ Data collection is accurate ❌ Arbitrage detection is broken ❌ Not using proper Arbitrum monitoring
Next Steps:
- Fix multi-hop amount bug (code change required)
- Fix RPC endpoint configuration (config change)
- Restart bot and verify "with amount [non-zero]" in logs
- Monitor for successful arbitrage detection
Report generated from comprehensive log analysis Analysis covered 15,769+ log lines over 1 hour runtime Issues identified: 2 critical, 1 medium, 3 low