Files
mev-beta/logs/ERROR_ANALYSIS_20251109.md
Administrator 1773daffe7 fix: resolve critical arbitrage bugs - add missing config values and fix RPC endpoint
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>
2025-11-09 08:25:36 +01:00

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:

  1. Use HTTP endpoint for contract executor: https://arb1.arbitrum.io/rpc
  2. Or obtain proper credentials for the Chainstack WSS endpoint
  3. 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:

  1. API Key Restriction: The endpoint may require additional authentication
  2. Rate Limiting: Request may have been rate-limited
  3. Geographic Restriction: IP address may be blocked
  4. Incorrect Protocol: Endpoint may not support WSS connections
  5. 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:

  1. Production deployment used .env file with WSS endpoint
  2. WSS endpoint returns 403 Forbidden
  3. Arbitrum monitor fails to initialize
  4. 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:

  1. Swap event detected with actual amounts
  2. Swap amounts extracted correctly
  3. Multi-hop scanner called with hardcoded 0
  4. 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

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

  1. Contact Chainstack support
  2. Verify API key has WebSocket permissions
  3. Check account tier limitations
  4. 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:

  1. Validate RPC endpoint accessibility on startup
  2. Verify arbitrage scan amounts are non-zero
  3. Detect fallback mode in health checks
  4. Alert when running without proper monitor

📝 SUMMARY

Critical Issues (Must Fix):

  1. Multi-hop arbitrage always uses amount 0 (803 occurrences)
  2. Arbitrum monitor connection fails (403 Forbidden)
  3. 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:

  1. Fix multi-hop amount bug (code change required)
  2. Fix RPC endpoint configuration (config change)
  3. Restart bot and verify "with amount [non-zero]" in logs
  4. 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