fix(critical): complete execution pipeline - all blockers fixed and operational
This commit is contained in:
398
docs/CODEBASE_QUICK_REFERENCE.md
Normal file
398
docs/CODEBASE_QUICK_REFERENCE.md
Normal file
@@ -0,0 +1,398 @@
|
||||
# MEV Bot Codebase - Quick Reference Guide
|
||||
|
||||
## Project Snapshot
|
||||
- **Language:** Go 1.25
|
||||
- **Module:** github.com/fraktal/mev-beta
|
||||
- **Total Files:** 362 Go files (253 in pkg/, 31 in internal/, 4 in cmd/)
|
||||
- **Total LOC:** ~100,000+ (pkg/ only)
|
||||
- **Purpose:** Production-grade MEV (Maximal Extractable Value) arbitrage bot for Arbitrum
|
||||
|
||||
---
|
||||
|
||||
## Directory Structure at a Glance
|
||||
|
||||
```
|
||||
mev-beta/
|
||||
├── cmd/mev-bot/ → Entry point (786 lines) + DEX integration
|
||||
├── pkg/ → 47 packages with core logic
|
||||
│ ├── arbitrage/ → Arbitrage detection & execution (7000+ LOC)
|
||||
│ ├── arbitrum/ → Arbitrum L2 integration (8000+ LOC)
|
||||
│ ├── monitor/ → Sequencer monitoring (1351 LOC)
|
||||
│ ├── scanner/ → Event processing with worker pools
|
||||
│ ├── dex/ → Protocol implementations (V3, V2, Curve, Balancer)
|
||||
│ ├── security/ → Key management & encryption (5000+ LOC)
|
||||
│ ├── events/ → Event parsing (1806 LOC)
|
||||
│ ├── transport/ → RPC provider management
|
||||
│ ├── pools/ → Pool discovery (1065 LOC)
|
||||
│ ├── math/ → Mathematical operations
|
||||
│ └── [35 more] → Specialized packages
|
||||
├── internal/ → 14 private packages (config, logger, etc.)
|
||||
├── bindings/ → Go-ethereum generated smart contract ABIs
|
||||
├── config/ → YAML configuration files
|
||||
├── tests/ → Integration & unit tests
|
||||
└── scripts/ → Build & utility scripts
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Core Components (Top 10 by Impact)
|
||||
|
||||
| # | Component | File | LOC | Role |
|
||||
|---|-----------|------|-----|------|
|
||||
| 1 | ArbitrageService | pkg/arbitrage/service.go | 1,995 | Main orchestration |
|
||||
| 2 | L2Parser | pkg/arbitrum/l2_parser.go | 1,985 | Transaction parsing |
|
||||
| 3 | KeyManager | pkg/security/keymanager.go | 1,841 | Key & signing |
|
||||
| 4 | EventParser | pkg/events/parser.go | 1,806 | Event extraction |
|
||||
| 5 | AuditAnalyzer | pkg/security/audit_analyzer.go | 1,646 | Audit logs |
|
||||
| 6 | ArbitrageExecutor | pkg/arbitrage/executor.go | 1,641 | Execution |
|
||||
| 7 | FlashSwapExecutor | pkg/arbitrage/flash_executor.go | 1,462 | Flash swaps |
|
||||
| 8 | RateLimiter | pkg/security/rate_limiter.go | 1,411 | Rate limiting |
|
||||
| 9 | ArbitrumMonitor | pkg/monitor/concurrent.go | 1,351 | Monitoring |
|
||||
| 10 | PerformanceProfiler | pkg/security/performance_profiler.go | 1,316 | Metrics |
|
||||
|
||||
---
|
||||
|
||||
## Data Flow (Simple)
|
||||
|
||||
```
|
||||
Arbitrum Blocks (WebSocket)
|
||||
↓
|
||||
ArbitrumMonitor → L2Parser → EventParser
|
||||
↓
|
||||
Scanner (with Worker Pool)
|
||||
↓
|
||||
MarketScanner → SwapAnalyzer → LiquidityAnalyzer
|
||||
↓
|
||||
ArbitrageService → MultiHopScanner → DetectionEngine
|
||||
↓
|
||||
ArbitrageExecutor → Flash Swap Contract → Arbitrum
|
||||
↓
|
||||
KeyManager (Signing) → Transaction Submission
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Key Architectural Patterns
|
||||
|
||||
### 1. **Layered Architecture**
|
||||
- Smart Contract Layer (bindings/)
|
||||
- Execution Layer (executor, flash_executor)
|
||||
- Detection Layer (detection_engine, scanner)
|
||||
- Event Collection Layer (monitor, parser)
|
||||
- Infrastructure Layer (transport, pools, security)
|
||||
|
||||
### 2. **Worker Pool Pattern**
|
||||
- Event processing with configurable workers
|
||||
- Non-blocking channel communication
|
||||
- Graceful shutdown with WaitGroup
|
||||
|
||||
### 3. **Rate Limiting**
|
||||
- Per-endpoint rate limiters
|
||||
- Global transaction limits
|
||||
- Burst allowances
|
||||
- Automatic backoff
|
||||
|
||||
### 4. **Multi-Pool Provider Architecture**
|
||||
- Read-only pool (high RPS tolerance)
|
||||
- Execution pool (reliable, limited RPS)
|
||||
- Testing pool (isolated, safe)
|
||||
|
||||
### 5. **Configuration Hierarchy**
|
||||
- Base: YAML files (config/arbitrum_production.yaml)
|
||||
- Override: Environment variables (GO_ENV, etc.)
|
||||
- Runtime: Per-endpoint config (providers.yaml)
|
||||
|
||||
---
|
||||
|
||||
## Entry Points & Main Functions
|
||||
|
||||
### Startup Sequence (main.go - 786 lines)
|
||||
|
||||
```
|
||||
main()
|
||||
↓ (20 debug checkpoints)
|
||||
├─ Load config (arbitrum_production.yaml)
|
||||
├─ Initialize logger
|
||||
├─ Create provider manager (3-pool architecture)
|
||||
├─ Create key manager (transaction signing)
|
||||
├─ Initialize pool discovery (cache-only)
|
||||
├─ Create market manager
|
||||
├─ Create scanner (worker pools)
|
||||
├─ Create arbitrage service
|
||||
├─ Start monitor loop
|
||||
└─ Handle shutdown
|
||||
```
|
||||
|
||||
### Real-Time Loop
|
||||
|
||||
**ArbitrumMonitor.Start()**
|
||||
```go
|
||||
for {
|
||||
block := subscribe.Next()
|
||||
for _, tx := range block.Transactions {
|
||||
parsed := l2Parser.ParseTransaction(tx)
|
||||
events := eventParser.ParseEvents(receipt)
|
||||
scanner.ProcessEvent(events)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## DEX Protocols Supported
|
||||
|
||||
| Protocol | File | Status |
|
||||
|----------|------|--------|
|
||||
| Uniswap V3 | pkg/dex/uniswap_v3.go | Active |
|
||||
| Uniswap V2 | pkg/dex/ | Active |
|
||||
| SushiSwap | pkg/dex/sushiswap.go | Active |
|
||||
| Curve | pkg/dex/curve.go | Active |
|
||||
| Balancer | pkg/dex/balancer.go | Active |
|
||||
|
||||
---
|
||||
|
||||
## Configuration Examples
|
||||
|
||||
### config/arbitrum_production.yaml
|
||||
```yaml
|
||||
tokens:
|
||||
weth: {address: 0x82af..., decimals: 18}
|
||||
usdc: {address: 0xaf88..., decimals: 6}
|
||||
[20+ tokens defined]
|
||||
|
||||
arbitrage:
|
||||
min_profit_threshold: 0.1%
|
||||
max_slippage: 0.5%
|
||||
max_gas_price: 50 gwei
|
||||
```
|
||||
|
||||
### config/providers.yaml
|
||||
```yaml
|
||||
read_only_pool:
|
||||
endpoints:
|
||||
- url: "https://..."
|
||||
max_rps: 50
|
||||
execution_pool:
|
||||
endpoints:
|
||||
- url: "https://..."
|
||||
max_rps: 20
|
||||
```
|
||||
|
||||
### Environment Variables (Required)
|
||||
```bash
|
||||
GO_ENV=production
|
||||
MEV_BOT_ENCRYPTION_KEY=<32-byte hex key>
|
||||
MEV_BOT_KEYSTORE_PATH=keystore
|
||||
ARBITRUM_RPC_ENDPOINT=wss://...
|
||||
ARBITRUM_WS_ENDPOINT=wss://...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Common Build Commands
|
||||
|
||||
```bash
|
||||
# Build the binary
|
||||
make build
|
||||
cd bin && ./mev-bot start
|
||||
|
||||
# Run with specific environment
|
||||
GO_ENV=production ./bin/mev-bot start
|
||||
|
||||
# Run tests
|
||||
make test # All tests
|
||||
make test-integration # Integration only
|
||||
make test-coverage # With coverage
|
||||
|
||||
# Security & Quality
|
||||
make lint # Run linter
|
||||
make security-scan # Security audit
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Type Definitions (Most Important)
|
||||
|
||||
### ArbitrageOpportunity
|
||||
```go
|
||||
type ArbitrageOpportunity struct {
|
||||
ID string
|
||||
Path []string // Token path
|
||||
Pools []string // Pool addresses
|
||||
AmountIn *big.Int // Input amount (wei)
|
||||
Profit *big.Int // Gross profit
|
||||
NetProfit *big.Int // After gas
|
||||
GasEstimate *big.Int // Gas cost
|
||||
ROI float64 // Return %
|
||||
Confidence float64 // 0-1 score
|
||||
TokenIn, TokenOut common.Address
|
||||
Timestamp int64
|
||||
DetectedAt, ExpiresAt time.Time
|
||||
}
|
||||
```
|
||||
|
||||
### ArbitrageService
|
||||
```go
|
||||
type ArbitrageService struct {
|
||||
client *ethclient.Client
|
||||
keyManager *security.KeyManager
|
||||
executor *ArbitrageExecutor
|
||||
detectionEngine *ArbitrageDetectionEngine
|
||||
flashExecutor *FlashSwapExecutor
|
||||
poolDiscovery *pools.PoolDiscovery
|
||||
marketManager *market.MarketManager
|
||||
}
|
||||
```
|
||||
|
||||
### ArbitrumMonitor
|
||||
```go
|
||||
type ArbitrumMonitor struct {
|
||||
client *ethclient.Client
|
||||
l2Parser *arbitrum.ArbitrumL2Parser
|
||||
scanner *scanner.Scanner
|
||||
pipeline *market.Pipeline
|
||||
eventParser *events.EventParser
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Execution Flow (Simple)
|
||||
|
||||
```
|
||||
Opportunity Detected
|
||||
↓
|
||||
Validate (amount, slippage, confidence)
|
||||
↓
|
||||
Get execution client
|
||||
↓
|
||||
Prepare transaction:
|
||||
├─ Select path
|
||||
├─ Estimate gas
|
||||
├─ Calculate slippage
|
||||
├─ Verify profitability
|
||||
└─ Sign with KeyManager
|
||||
↓
|
||||
Submit to Arbitrum
|
||||
↓
|
||||
Wait for receipt (60s max)
|
||||
↓
|
||||
Log results & update stats
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Known Issues & Workarounds
|
||||
|
||||
| Issue | Cause | Workaround |
|
||||
|-------|-------|-----------|
|
||||
| Startup hang | Pool discovery RPC calls timeout | Skip discovery, use cache |
|
||||
| Security manager off | Debugging hang issue | Commented out in main.go |
|
||||
| Multicall parsing | Complex transaction structures | AbiDecoder with fallbacks |
|
||||
|
||||
---
|
||||
|
||||
## Database & Persistence
|
||||
|
||||
### Current Implementation
|
||||
- In-memory caches for pools and opportunities
|
||||
- Optional PostgreSQL/SQLite for historical data
|
||||
- JSON persistence for pool discovery cache
|
||||
|
||||
### Key Data
|
||||
- Pool cache: ~314 pools loaded at startup
|
||||
- Opportunity history: In-memory window
|
||||
- Execution history: Configurable retention
|
||||
|
||||
---
|
||||
|
||||
## Monitoring & Logging
|
||||
|
||||
### Log Locations
|
||||
```
|
||||
logs/
|
||||
├── mev_bot.log # Main application
|
||||
├── mev_bot_errors.log # Errors only
|
||||
├── mev_bot_performance.log # Metrics
|
||||
├── analytics/ # Real-time analysis
|
||||
├── health/ # Health reports
|
||||
└── archives/ # Compressed backups
|
||||
```
|
||||
|
||||
### Metrics Available
|
||||
- Health score: 97.97/100
|
||||
- Error rate: 2.03%
|
||||
- MEV opportunities: Count
|
||||
- Processing latency: ~10-50ms
|
||||
- Memory usage: ~200-500MB
|
||||
|
||||
---
|
||||
|
||||
## Testing
|
||||
|
||||
### Test Organization
|
||||
```
|
||||
tests/integration/ # Fork testing, real scenarios
|
||||
tests/cache/ # Cache functionality
|
||||
tests/contracts/ # Contract interactions
|
||||
pkg/*_test.go # Unit tests (colocated)
|
||||
```
|
||||
|
||||
### Running Tests
|
||||
```bash
|
||||
make test # All
|
||||
make test-integration # Integration only
|
||||
make test-coverage # With coverage report
|
||||
go test -v ./... # Verbose output
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Key Files to Understand First
|
||||
|
||||
**In Order of Importance:**
|
||||
1. `cmd/mev-bot/main.go` - Understand startup flow
|
||||
2. `pkg/arbitrage/service.go` - Core orchestration
|
||||
3. `pkg/monitor/concurrent.go` - How monitoring works
|
||||
4. `pkg/scanner/concurrent.go` - Event processing
|
||||
5. `pkg/arbitrage/executor.go` - Execution logic
|
||||
6. `pkg/arbitrum/l2_parser.go` - Transaction parsing
|
||||
7. `internal/config/config.go` - Configuration system
|
||||
8. `pkg/security/keymanager.go` - Key management
|
||||
|
||||
---
|
||||
|
||||
## Performance Notes
|
||||
|
||||
- **Throughput:** ~100+ events/sec (with 4-8 workers)
|
||||
- **Latency:** Detection <50ms, execution <5s
|
||||
- **Rate Limits:** Read 50 RPS, Execute 20 RPS
|
||||
- **Memory:** ~200-500MB baseline
|
||||
- **Disk:** Logs rotate, archives compress
|
||||
|
||||
---
|
||||
|
||||
## Security Notes
|
||||
|
||||
- Keys encrypted in keystore
|
||||
- All RPC endpoints validated
|
||||
- Rate limiting prevents DoS
|
||||
- Audit logging enabled
|
||||
- Anomaly detection available
|
||||
- Key rotation supported (30-day default)
|
||||
|
||||
---
|
||||
|
||||
## See Also
|
||||
|
||||
- Full analysis: `docs/CODEBASE_EXPLORATION_COMPLETE.md` (1140 lines)
|
||||
- Configuration guide: `docs/` directory
|
||||
- Smart contracts: `contracts/` (Solidity source)
|
||||
- Examples: `examples/` directory
|
||||
- Tests: `tests/` directory
|
||||
|
||||
---
|
||||
|
||||
**Last Updated:** November 1, 2025
|
||||
**Status:** Feature/production-profit-optimization branch
|
||||
**Maintainer:** MEV Bot Team
|
||||
Reference in New Issue
Block a user