feat(safety): add comprehensive production safety documentation
- Created .env.production.safe with all safety settings - Conservative profit thresholds (0.05 ETH min) - Strict risk limits (1 ETH max position, 10 ETH daily) - Circuit breaker configuration - Emergency stop mechanisms - Dry-run mode for testing - Created PRODUCTION_DEPLOYMENT_GUIDE.md (20+ pages) - 4-phase deployment sequence (dry-run → testnet → micro-test → scale-up) - Safety mechanisms documentation - Monitoring requirements - Infrastructure requirements - Troubleshooting guide - Legal/compliance warnings - Created SAFETY_CHECKLIST.md (quick reference) - Pre-deployment checklist - Daily/weekly monitoring tasks - Emergency procedures - Capital scale-up guidelines - Red flags and stop criteria Safety Features: ✅ Dry-run mode (simulation only) ✅ Circuit breaker (3 consecutive losses / hourly loss limits) ✅ Emergency stop file-based kill switch ✅ Position size limits ✅ Daily volume limits ✅ Slippage protection (1% max) ✅ Gas price limits (50 gwei max) ✅ Rate limiting (max trades per hour) Production Status: TESTING PHASE - Safe for small-scale testing only Next Steps: 1. Follow deployment guide Phase 1 (dry-run for 24+ hours) 2. Validate profit calculations 3. Test circuit breaker 4. Test on testnet before mainnet 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
205
.env.production.safe
Normal file
205
.env.production.safe
Normal file
@@ -0,0 +1,205 @@
|
||||
# MEV Bot V2 - Production Safety Configuration
|
||||
# ================================================
|
||||
# DO NOT deploy without reviewing ALL settings below
|
||||
# This configuration prioritizes safety over profitability
|
||||
|
||||
# ================================
|
||||
# BLOCKCHAIN CONNECTION
|
||||
# ================================
|
||||
# CRITICAL: Use archive RPC provider for production
|
||||
RPC_URL=https://arb-mainnet.g.alchemy.com/v2/YOUR_ALCHEMY_KEY
|
||||
WS_URL=wss://arb-mainnet.g.alchemy.com/v2/YOUR_ALCHEMY_KEY
|
||||
SEQUENCER_WS_URL=wss://arb1.arbitrum.io/ws
|
||||
CHAIN_ID=42161
|
||||
|
||||
# ================================
|
||||
# WALLET CONFIGURATION
|
||||
# ================================
|
||||
# WARNING: Protect this key - use hardware wallet for large funds
|
||||
PRIVATE_KEY=your_private_key_here
|
||||
|
||||
# EXECUTOR CONTRACT: Set to your deployed flashloan contract address
|
||||
# Leave as 0x0 if not using flashloans
|
||||
EXECUTOR_CONTRACT=0x0000000000000000000000000000000000000000
|
||||
|
||||
# ================================
|
||||
# SAFETY MODE
|
||||
# ================================
|
||||
# DRY RUN: Set to "true" for simulation-only (NO REAL TRANSACTIONS)
|
||||
# ONLY set to "false" after thorough testing
|
||||
DRY_RUN_MODE=true
|
||||
|
||||
# EXECUTION: Disable actual execution until validated
|
||||
ENABLE_EXECUTION=false
|
||||
|
||||
# SIMULATION: Always keep enabled for safety checks
|
||||
ENABLE_SIMULATION=true
|
||||
|
||||
# FRONT-RUNNING: Disable until profit calculations validated
|
||||
ENABLE_FRONT_RUNNING=false
|
||||
|
||||
# ================================
|
||||
# PROFIT THRESHOLDS (Conservative)
|
||||
# ================================
|
||||
# Minimum profit required (in wei): 0.05 ETH = very conservative
|
||||
MIN_PROFIT_WEI=50000000000000000
|
||||
|
||||
# Minimum ROI: 5% = conservative (rejects marginal opportunities)
|
||||
MIN_ROI=0.05
|
||||
|
||||
# Minimum swap amount to consider (in wei): 0.1 ETH
|
||||
MIN_SWAP_AMOUNT=100000000000000000
|
||||
|
||||
# Minimum pool liquidity (in wei): $50,000 equivalent
|
||||
MIN_POOL_LIQUIDITY=50000000000000000000000
|
||||
|
||||
# ================================
|
||||
# RISK LIMITS (Strict)
|
||||
# ================================
|
||||
# Maximum position size per trade: 1 ETH = very conservative
|
||||
MAX_POSITION_SIZE=1000000000000000000
|
||||
|
||||
# Maximum daily trading volume: 10 ETH = strict daily limit
|
||||
MAX_DAILY_VOLUME=10000000000000000000
|
||||
|
||||
# Maximum slippage tolerance: 1% = strict (prevents sandwich attacks)
|
||||
MAX_SLIPPAGE_BPS=100
|
||||
|
||||
# Maximum gas limit per transaction: 1.5M gas
|
||||
MAX_GAS_LIMIT=1500000
|
||||
|
||||
# Maximum gas price: 50 gwei (prevents overpaying during spikes)
|
||||
MAX_GAS_PRICE_GWEI=50
|
||||
|
||||
# ================================
|
||||
# CIRCUIT BREAKER THRESHOLDS
|
||||
# ================================
|
||||
# Stop trading after this many consecutive losses
|
||||
MAX_CONSECUTIVE_LOSSES=3
|
||||
|
||||
# Stop trading if hourly loss exceeds this (in wei): 0.1 ETH
|
||||
MAX_HOURLY_LOSS=100000000000000000
|
||||
|
||||
# Stop trading if daily loss exceeds this (in wei): 0.5 ETH
|
||||
MAX_DAILY_LOSS=500000000000000000
|
||||
|
||||
# Cooldown period after circuit breaker trips (seconds): 1 hour
|
||||
CIRCUIT_BREAKER_COOLDOWN=3600
|
||||
|
||||
# ================================
|
||||
# GAS STRATEGY (Conservative)
|
||||
# ================================
|
||||
# Gas price strategy: "safe" = lower gas, slower inclusion
|
||||
# Options: safe, standard, fast, ultra
|
||||
GAS_PRICE_STRATEGY=safe
|
||||
|
||||
# Gas price multiplier: 1.0 = no markup (safer)
|
||||
GAS_PRICE_MULTIPLIER=1.0
|
||||
|
||||
# ================================
|
||||
# EXECUTION SETTINGS
|
||||
# ================================
|
||||
# Use private RPC for transaction submission (reduces MEV risk)
|
||||
USE_PRIVATE_RPC=false
|
||||
PRIVATE_RPC_URL=
|
||||
|
||||
# Transaction confirmation blocks: 1 for Arbitrum
|
||||
CONFIRMATION_BLOCKS=1
|
||||
|
||||
# Transaction timeout: 2 minutes
|
||||
TX_TIMEOUT_SECONDS=120
|
||||
|
||||
# Maximum retries for failed transactions
|
||||
MAX_TX_RETRIES=2
|
||||
|
||||
# ================================
|
||||
# ARBITRAGE DETECTION
|
||||
# ================================
|
||||
# Maximum hops in arbitrage path: 2 = simple, safer
|
||||
MAX_HOPS=2
|
||||
|
||||
# Maximum paths to evaluate per opportunity: 50 = focused
|
||||
MAX_PATHS=50
|
||||
|
||||
# Maximum concurrent opportunity evaluations: 5 = conservative
|
||||
MAX_CONCURRENT_DETECTION=5
|
||||
|
||||
# ================================
|
||||
# POOL DISCOVERY
|
||||
# ================================
|
||||
# Maximum pools to discover and monitor: 100 = focused set
|
||||
MAX_POOLS_TO_DISCOVER=100
|
||||
|
||||
# Pool discovery interval (seconds): 5 minutes
|
||||
POOL_DISCOVERY_INTERVAL=300
|
||||
|
||||
# ================================
|
||||
# PERFORMANCE
|
||||
# ================================
|
||||
# Worker count for parallel processing: 4 = moderate
|
||||
WORKER_COUNT=4
|
||||
|
||||
# Buffer size for event processing: 100
|
||||
BUFFER_SIZE=100
|
||||
|
||||
# ================================
|
||||
# MONITORING & ALERTS
|
||||
# ================================
|
||||
# Metrics server port
|
||||
METRICS_PORT=9090
|
||||
|
||||
# Enable detailed logging
|
||||
LOG_LEVEL=info
|
||||
|
||||
# Alert webhook URL (for Slack/Discord/Telegram)
|
||||
ALERT_WEBHOOK_URL=
|
||||
|
||||
# Alert on circuit breaker trip
|
||||
ALERT_ON_CIRCUIT_BREAKER=true
|
||||
|
||||
# Alert on large loss (threshold in wei): 0.05 ETH
|
||||
ALERT_LOSS_THRESHOLD=50000000000000000
|
||||
|
||||
# ================================
|
||||
# EMERGENCY CONTROLS
|
||||
# ================================
|
||||
# Emergency stop file path - create this file to stop bot immediately
|
||||
EMERGENCY_STOP_FILE=/tmp/mev-bot-emergency-stop
|
||||
|
||||
# Auto-restart after emergency stop (dangerous - keep false)
|
||||
AUTO_RESTART_AFTER_EMERGENCY_STOP=false
|
||||
|
||||
# ================================
|
||||
# ADDITIONAL SAFETY FEATURES
|
||||
# ================================
|
||||
# Require manual confirmation for each trade (testing only)
|
||||
REQUIRE_MANUAL_CONFIRMATION=true
|
||||
|
||||
# Maximum trades per hour: 10 = rate limiting
|
||||
MAX_TRADES_PER_HOUR=10
|
||||
|
||||
# Blacklist pools (comma-separated addresses of problematic pools)
|
||||
BLACKLISTED_POOLS=
|
||||
|
||||
# Whitelist tokens only (comma-separated addresses - empty = allow all)
|
||||
WHITELISTED_TOKENS=
|
||||
|
||||
# ================================
|
||||
# NOTES FOR PRODUCTION
|
||||
# ================================
|
||||
# Before deploying to production:
|
||||
#
|
||||
# 1. Set DRY_RUN_MODE=true initially and monitor for 24+ hours
|
||||
# 2. Verify profit calculations match expected values
|
||||
# 3. Ensure circuit breaker triggers correctly
|
||||
# 4. Test emergency stop mechanism
|
||||
# 5. Set up monitoring/alerting
|
||||
# 6. Start with minimal position sizes
|
||||
# 7. Gradually increase limits after validating profitability
|
||||
# 8. NEVER set ENABLE_EXECUTION=true without thorough testing
|
||||
#
|
||||
# Recommended deployment sequence:
|
||||
# Day 1: DRY_RUN_MODE=true (monitor only)
|
||||
# Day 2-3: If stable, test with ENABLE_EXECUTION=true but MAX_POSITION_SIZE=0.1 ETH
|
||||
# Day 4-7: If profitable, increase to MAX_POSITION_SIZE=0.5 ETH
|
||||
# Week 2+: If consistently profitable, gradually increase limits
|
||||
561
PRODUCTION_DEPLOYMENT_GUIDE.md
Normal file
561
PRODUCTION_DEPLOYMENT_GUIDE.md
Normal file
@@ -0,0 +1,561 @@
|
||||
# MEV Bot V2 - Production Deployment Safety Guide
|
||||
|
||||
**STATUS:** ⚠️ **PRE-PRODUCTION - NOT SAFE FOR LARGE CAPITAL YET**
|
||||
|
||||
---
|
||||
|
||||
## 🚨 CRITICAL: Read This First
|
||||
|
||||
**DO NOT deploy to production with significant capital until:**
|
||||
1. ✅ All safety mechanisms are tested
|
||||
2. ✅ Profit calculations validated with known scenarios
|
||||
3. ✅ 24+ hours of dry-run monitoring completed
|
||||
4. ✅ Emergency stop tested and working
|
||||
5. ✅ Monitoring/alerting configured and tested
|
||||
|
||||
**Current Status:** Bot is in TESTING phase. Suitable for small-scale testing only.
|
||||
|
||||
---
|
||||
|
||||
## Safety-First Deployment Sequence
|
||||
|
||||
### Phase 1: Dry-Run Validation (Days 1-3)
|
||||
|
||||
**Objective:** Validate detection without risking capital
|
||||
|
||||
**Configuration:**
|
||||
```bash
|
||||
DRY_RUN_MODE=true
|
||||
ENABLE_EXECUTION=false
|
||||
ENABLE_SIMULATION=true
|
||||
MIN_PROFIT_WEI=50000000000000000 # 0.05 ETH - conservative
|
||||
```
|
||||
|
||||
**Actions:**
|
||||
1. Deploy with `.env.production.safe` configuration
|
||||
2. Monitor logs for 24+ hours continuously
|
||||
3. Verify opportunities are detected correctly
|
||||
4. Check profit calculations match expected values
|
||||
5. Ensure no false positives
|
||||
|
||||
**Success Criteria:**
|
||||
- ✅ Bot runs stable for 24+ hours
|
||||
- ✅ No crashes or errors
|
||||
- ✅ Profit calculations look reasonable
|
||||
- ✅ Pool data updates correctly
|
||||
|
||||
**DO NOT PROCEED** if success criteria not met.
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: Testnet Validation (Days 4-7)
|
||||
|
||||
**Objective:** Test execution logic without real money
|
||||
|
||||
**Configuration:**
|
||||
```bash
|
||||
# Use Arbitrum Sepolia/Goerli testnet
|
||||
CHAIN_ID=421614 # Arbitrum Sepolia
|
||||
RPC_URL=https://sepolia-rollup.arbitrum.io/rpc
|
||||
ENABLE_EXECUTION=true
|
||||
MAX_POSITION_SIZE=100000000000000000 # 0.1 ETH testnet funds
|
||||
```
|
||||
|
||||
**Actions:**
|
||||
1. Get testnet ETH from faucet
|
||||
2. Deploy on testnet
|
||||
3. Execute actual transactions
|
||||
4. Monitor profit/loss carefully
|
||||
5. Test circuit breaker triggers
|
||||
6. Test emergency stop
|
||||
|
||||
**Success Criteria:**
|
||||
- ✅ Transactions execute successfully
|
||||
- ✅ Profit calculations accurate (compare pre/post trade)
|
||||
- ✅ Circuit breaker stops trading after losses
|
||||
- ✅ Emergency stop works immediately
|
||||
- ✅ No unexpected behavior
|
||||
|
||||
**DO NOT PROCEED** to mainnet if any failures.
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: Mainnet Micro-Testing (Days 8-14)
|
||||
|
||||
**Objective:** Validate on mainnet with minimal capital
|
||||
|
||||
**Configuration:**
|
||||
```bash
|
||||
# Mainnet with strict safety limits
|
||||
CHAIN_ID=42161
|
||||
RPC_URL=https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY # Archive RPC required!
|
||||
ENABLE_EXECUTION=true
|
||||
MAX_POSITION_SIZE=100000000000000000 # 0.1 ETH - TINY positions
|
||||
MAX_DAILY_VOLUME=500000000000000000 # 0.5 ETH daily max
|
||||
MAX_TRADES_PER_HOUR=5 # Rate limit
|
||||
```
|
||||
|
||||
**Capital Required:** 0.5-1 ETH (amount you're willing to lose)
|
||||
|
||||
**Actions:**
|
||||
1. Fund wallet with SMALL amount only
|
||||
2. Enable execution with strict limits
|
||||
3. Monitor CONTINUOUSLY for first 24 hours
|
||||
4. Track every trade manually
|
||||
5. Calculate actual profit/loss
|
||||
6. Verify gas costs match predictions
|
||||
|
||||
**Success Criteria:**
|
||||
- ✅ Net profitable over 7 days (including gas)
|
||||
- ✅ No unexpected losses
|
||||
- ✅ Circuit breaker triggers appropriately
|
||||
- ✅ Monitoring/alerts working
|
||||
|
||||
**IF UNPROFITABLE:** Stop immediately, debug issues
|
||||
|
||||
---
|
||||
|
||||
### Phase 4: Gradual Scale-Up (Weeks 3-8)
|
||||
|
||||
**Objective:** Slowly increase capital if consistently profitable
|
||||
|
||||
**Only if Phase 3 was net profitable:**
|
||||
|
||||
| Week | Max Position | Max Daily Volume | Notes |
|
||||
|------|--------------|------------------|-------|
|
||||
| 3 | 0.25 ETH | 1 ETH | Still testing |
|
||||
| 4 | 0.5 ETH | 2 ETH | Monitor closely |
|
||||
| 5 | 1 ETH | 5 ETH | If profitable, continue |
|
||||
| 6 | 2 ETH | 10 ETH | Standard operation |
|
||||
| 7-8 | 3-5 ETH | 20 ETH | Mature operation |
|
||||
|
||||
**Rules:**
|
||||
- If ANY week is unprofitable, revert to previous week's limits
|
||||
- Track ROI weekly - stop if declining
|
||||
- Monitor gas costs - stop if eating profits
|
||||
|
||||
---
|
||||
|
||||
## 🛡️ Safety Mechanisms
|
||||
|
||||
### 1. Circuit Breaker
|
||||
|
||||
**Triggers:**
|
||||
- 3 consecutive losing trades
|
||||
- Hourly loss > 0.1 ETH
|
||||
- Daily loss > 0.5 ETH
|
||||
|
||||
**Action:** Immediately stop trading for 1 hour cooldown
|
||||
|
||||
**Testing:**
|
||||
```bash
|
||||
# Manually trigger by creating test scenario
|
||||
# Verify bot stops and doesn't restart automatically
|
||||
```
|
||||
|
||||
### 2. Emergency Stop
|
||||
|
||||
**File-based kill switch:**
|
||||
```bash
|
||||
# Create this file to stop bot immediately
|
||||
touch /tmp/mev-bot-emergency-stop
|
||||
|
||||
# Bot checks this file every 10 seconds
|
||||
# Gracefully stops all operations
|
||||
```
|
||||
|
||||
**Testing:**
|
||||
```bash
|
||||
# While bot running in testnet:
|
||||
touch /tmp/mev-bot-emergency-stop
|
||||
# Bot should log "Emergency stop detected" and exit within 10s
|
||||
```
|
||||
|
||||
### 3. Position Size Limits
|
||||
|
||||
**Prevents large losses from single trade:**
|
||||
- MAX_POSITION_SIZE enforced before execution
|
||||
- MAX_DAILY_VOLUME enforced cumulatively
|
||||
- Transactions rejected if limits exceeded
|
||||
|
||||
### 4. Slippage Protection
|
||||
|
||||
**Prevents sandwich attacks and price manipulation:**
|
||||
- MAX_SLIPPAGE_BPS: 100 (1%) - very strict
|
||||
- Simulation runs before every trade
|
||||
- Trade rejected if simulated output < expected
|
||||
|
||||
### 5. Gas Price Limits
|
||||
|
||||
**Prevents overpaying during network congestion:**
|
||||
- MAX_GAS_PRICE_GWEI: 50 gwei
|
||||
- Transactions rejected if gas price higher
|
||||
- Use GAS_PRICE_STRATEGY=safe for lower gas
|
||||
|
||||
---
|
||||
|
||||
## 📊 Monitoring Requirements
|
||||
|
||||
### Essential Metrics to Track
|
||||
|
||||
**1. Profitability Metrics**
|
||||
- Gross profit per trade
|
||||
- Net profit after gas
|
||||
- ROI percentage
|
||||
- Win rate (profitable trades / total trades)
|
||||
|
||||
**2. Execution Metrics**
|
||||
- Trade execution latency
|
||||
- Gas costs per trade
|
||||
- Failed transactions
|
||||
- Successful vs failed trade ratio
|
||||
|
||||
**3. Safety Metrics**
|
||||
- Circuit breaker triggers
|
||||
- Emergency stops
|
||||
- Position size violations
|
||||
- Daily volume tracking
|
||||
|
||||
**4. System Health**
|
||||
- RPC connection status
|
||||
- WebSocket connection status
|
||||
- Pool cache size
|
||||
- Memory/CPU usage
|
||||
|
||||
### Monitoring Tools
|
||||
|
||||
**Prometheus + Grafana** (included in repo):
|
||||
```bash
|
||||
docker-compose up -d prometheus grafana
|
||||
# Access Grafana at http://localhost:3000
|
||||
```
|
||||
|
||||
**Log Monitoring:**
|
||||
```bash
|
||||
# Tail logs in real-time
|
||||
docker logs -f mev-bot-v2
|
||||
|
||||
# Filter for profits
|
||||
docker logs mev-bot-v2 | grep "profit"
|
||||
|
||||
# Filter for errors
|
||||
docker logs mev-bot-v2 | grep "ERROR\|WARN"
|
||||
```
|
||||
|
||||
**Alerting** (recommended):
|
||||
- Set up Slack/Discord/Telegram webhook
|
||||
- Alert on circuit breaker triggers
|
||||
- Alert on large losses (> 0.05 ETH)
|
||||
- Alert on system errors
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Production Infrastructure
|
||||
|
||||
### Required Infrastructure
|
||||
|
||||
**1. Archive RPC Provider** (CRITICAL)
|
||||
- ❌ Public RPC insufficient
|
||||
- ✅ Use: Alchemy, QuickNode, or Infura
|
||||
- Cost: ~$200-500/month for archive access
|
||||
- Required for pool discovery and state queries
|
||||
|
||||
**2. Private RPC (Recommended)**
|
||||
- Reduces MEV risk on transaction submission
|
||||
- Flashbots Protect or private mempool
|
||||
- Cost: Free (Flashbots) or ~$100/month
|
||||
|
||||
**3. Dedicated Server**
|
||||
- Minimum: 4 CPU cores, 8GB RAM
|
||||
- Recommended: 8 CPU cores, 16GB RAM
|
||||
- Low latency network connection to RPC
|
||||
- Uptime: 99.9%+
|
||||
|
||||
**4. Monitoring Stack**
|
||||
- Prometheus for metrics
|
||||
- Grafana for visualization
|
||||
- Alerting service (PagerDuty, Slack, etc.)
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Known Limitations & Risks
|
||||
|
||||
### Technical Limitations
|
||||
|
||||
1. **WebSocket Sequencer Connection**
|
||||
- Status: Not fully stable on Anvil fork
|
||||
- Impact: May miss some pending transactions
|
||||
- Mitigation: Test on live testnet/mainnet
|
||||
|
||||
2. **Pool Discovery**
|
||||
- Currently uses hardcoded pools for testing
|
||||
- Production needs archive RPC for discovery
|
||||
- May miss new pools initially
|
||||
|
||||
3. **Gas Estimation**
|
||||
- Estimates may be inaccurate under high load
|
||||
- May overpay or fail transactions
|
||||
- Needs more testing
|
||||
|
||||
4. **Profit Calculations**
|
||||
- Not validated against known scenarios yet
|
||||
- Risk of calculation errors
|
||||
- MUST test extensively before large capital
|
||||
|
||||
### Market Risks
|
||||
|
||||
1. **Competition**
|
||||
- Other MEV bots may front-run
|
||||
- Profits may be lower than expected
|
||||
- Need low latency connection
|
||||
|
||||
2. **Gas Price Volatility**
|
||||
- Network congestion can spike gas
|
||||
- May eat into profits
|
||||
- Circuit breaker helps limit damage
|
||||
|
||||
3. **Smart Contract Risks**
|
||||
- DEX contracts could have bugs
|
||||
- Pools could be manipulated
|
||||
- Use whitelisted pools only initially
|
||||
|
||||
4. **Slippage & Sandwich Attacks**
|
||||
- Larger trades more susceptible
|
||||
- Strict slippage limits help
|
||||
- Consider splitting large trades
|
||||
|
||||
---
|
||||
|
||||
## 📋 Pre-Deployment Checklist
|
||||
|
||||
### Infrastructure
|
||||
|
||||
- [ ] Archive RPC provider configured and tested
|
||||
- [ ] Private RPC configured (optional but recommended)
|
||||
- [ ] Server meets minimum specs
|
||||
- [ ] Monitoring stack deployed (Prometheus + Grafana)
|
||||
- [ ] Alerting configured and tested
|
||||
- [ ] Backup wallet key secured (hardware wallet recommended)
|
||||
|
||||
### Configuration
|
||||
|
||||
- [ ] `.env.production.safe` reviewed and customized
|
||||
- [ ] All safety limits set conservatively
|
||||
- [ ] DRY_RUN_MODE=true initially
|
||||
- [ ] ENABLE_EXECUTION=false initially
|
||||
- [ ] Gas limits appropriate
|
||||
- [ ] Slippage tolerance conservative
|
||||
|
||||
### Testing
|
||||
|
||||
- [ ] Dry-run completed (24+ hours)
|
||||
- [ ] Profit calculations validated
|
||||
- [ ] Circuit breaker tested
|
||||
- [ ] Emergency stop tested
|
||||
- [ ] Testnet deployment successful
|
||||
- [ ] Manual trades verified profitable
|
||||
|
||||
### Monitoring
|
||||
|
||||
- [ ] Grafana dashboards configured
|
||||
- [ ] Alerts set up for losses
|
||||
- [ ] Alerts set up for circuit breaker
|
||||
- [ ] Alerts set up for system errors
|
||||
- [ ] Log rotation configured
|
||||
- [ ] Backup/restore tested
|
||||
|
||||
### Safety
|
||||
|
||||
- [ ] Emergency stop file path configured
|
||||
- [ ] Circuit breaker thresholds set
|
||||
- [ ] Position limits conservative
|
||||
- [ ] Daily volume limits set
|
||||
- [ ] Gas price limits set
|
||||
- [ ] Whitelist/blacklist configured (if needed)
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Deployment Commands
|
||||
|
||||
### Step 1: Build Docker Image
|
||||
|
||||
```bash
|
||||
docker build -t mev-bot-v2:production .
|
||||
```
|
||||
|
||||
### Step 2: Configure Environment
|
||||
|
||||
```bash
|
||||
# Copy safe configuration
|
||||
cp .env.production.safe .env.production
|
||||
|
||||
# Edit with your keys and RPC endpoints
|
||||
nano .env.production
|
||||
|
||||
# CRITICAL: Verify DRY_RUN_MODE=true for first deployment
|
||||
grep DRY_RUN_MODE .env.production
|
||||
```
|
||||
|
||||
### Step 3: Deploy with Docker
|
||||
|
||||
```bash
|
||||
# Start in dry-run mode
|
||||
docker run -d \
|
||||
--name mev-bot-v2-production \
|
||||
--restart unless-stopped \
|
||||
--env-file .env.production \
|
||||
-v $(pwd)/logs:/app/logs \
|
||||
-p 9090:9090 \
|
||||
mev-bot-v2:production
|
||||
|
||||
# Monitor logs in real-time
|
||||
docker logs -f mev-bot-v2-production
|
||||
```
|
||||
|
||||
### Step 4: Monitor & Validate
|
||||
|
||||
```bash
|
||||
# Check status
|
||||
docker ps | grep mev-bot
|
||||
|
||||
# View metrics
|
||||
curl http://localhost:9090/metrics
|
||||
|
||||
# Check for errors
|
||||
docker logs mev-bot-v2-production | grep ERROR | tail -50
|
||||
|
||||
# Monitor circuit breaker status
|
||||
docker logs mev-bot-v2-production | grep "circuit_breaker"
|
||||
```
|
||||
|
||||
### Step 5: Emergency Stop (if needed)
|
||||
|
||||
```bash
|
||||
# Method 1: File-based stop
|
||||
docker exec mev-bot-v2-production touch /tmp/mev-bot-emergency-stop
|
||||
|
||||
# Method 2: Graceful stop
|
||||
docker stop mev-bot-v2-production
|
||||
|
||||
# Method 3: Immediate stop
|
||||
docker kill mev-bot-v2-production
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📞 Support & Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Issue: Bot not finding opportunities**
|
||||
- Check RPC connection is working
|
||||
- Verify pool discovery running
|
||||
- Check MIN_PROFIT_WEI isn't too high
|
||||
- Review MIN_POOL_LIQUIDITY setting
|
||||
|
||||
**Issue: High gas costs eating profits**
|
||||
- Lower MAX_GAS_PRICE_GWEI
|
||||
- Use GAS_PRICE_STRATEGY=safe
|
||||
- Increase MIN_PROFIT_WEI threshold
|
||||
|
||||
**Issue: Circuit breaker triggering frequently**
|
||||
- Review trade profitability
|
||||
- Check profit calculations
|
||||
- Verify gas estimation accurate
|
||||
- May need to adjust MIN_PROFIT_WEI higher
|
||||
|
||||
**Issue: Missing transactions**
|
||||
- Check WebSocket connection stable
|
||||
- Verify archive RPC working
|
||||
- Review worker count settings
|
||||
- Check buffer size adequate
|
||||
|
||||
### Logs to Check
|
||||
|
||||
```bash
|
||||
# All errors
|
||||
docker logs mev-bot-v2-production 2>&1 | grep "ERROR"
|
||||
|
||||
# Profitable trades
|
||||
docker logs mev-bot-v2-production | grep "profit.*ETH"
|
||||
|
||||
# Circuit breaker events
|
||||
docker logs mev-bot-v2-production | grep "circuit_breaker"
|
||||
|
||||
# RPC issues
|
||||
docker logs mev-bot-v2-production | grep "RPC\|connection"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚖️ Legal & Compliance
|
||||
|
||||
**DISCLAIMER:**
|
||||
- MEV trading may be considered front-running in some jurisdictions
|
||||
- Ensure compliance with local regulations
|
||||
- This software is provided AS-IS with no warranties
|
||||
- Use at your own risk
|
||||
- Author not responsible for losses
|
||||
|
||||
**Recommendations:**
|
||||
- Consult legal counsel before deployment
|
||||
- Understand local securities/trading laws
|
||||
- Consider tax implications of trading
|
||||
- Maintain detailed trade records
|
||||
|
||||
---
|
||||
|
||||
## 📝 Post-Deployment Monitoring
|
||||
|
||||
### Daily Checks (First Week)
|
||||
|
||||
- [ ] Review all trades from last 24 hours
|
||||
- [ ] Calculate net profit/loss (including gas)
|
||||
- [ ] Check circuit breaker events
|
||||
- [ ] Review error logs
|
||||
- [ ] Verify RPC connection stable
|
||||
- [ ] Check wallet balance
|
||||
|
||||
### Weekly Checks (Ongoing)
|
||||
|
||||
- [ ] Calculate weekly ROI
|
||||
- [ ] Review most/least profitable pools
|
||||
- [ ] Analyze gas cost trends
|
||||
- [ ] Review system resource usage
|
||||
- [ ] Update pool blacklist if needed
|
||||
- [ ] Adjust parameters based on performance
|
||||
|
||||
### Monthly Reviews
|
||||
|
||||
- [ ] Comprehensive profit/loss analysis
|
||||
- [ ] Compare to market conditions
|
||||
- [ ] Review and update safety limits
|
||||
- [ ] Update dependencies/security patches
|
||||
- [ ] Backup configuration and logs
|
||||
- [ ] Review and optimize strategies
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Success Criteria
|
||||
|
||||
**Minimum viable production deployment:**
|
||||
- ✅ Profitable for 7+ consecutive days
|
||||
- ✅ ROI > 5% after gas costs
|
||||
- ✅ Win rate > 60%
|
||||
- ✅ No circuit breaker triggers from bugs
|
||||
- ✅ Emergency stop tested and working
|
||||
- ✅ Monitoring functional and alerting
|
||||
|
||||
**Ready for capital scale-up:**
|
||||
- ✅ Profitable for 30+ days
|
||||
- ✅ ROI > 10% monthly
|
||||
- ✅ Win rate > 70%
|
||||
- ✅ All safety mechanisms tested
|
||||
- ✅ No unexpected losses
|
||||
- ✅ Stable system performance
|
||||
|
||||
---
|
||||
|
||||
**Last Updated:** 2025-11-10
|
||||
**Version:** 1.0.0-rc1
|
||||
**Status:** Pre-Production
|
||||
179
SAFETY_CHECKLIST.md
Normal file
179
SAFETY_CHECKLIST.md
Normal file
@@ -0,0 +1,179 @@
|
||||
# MEV Bot V2 - Production Safety Checklist
|
||||
|
||||
⚠️ **DO NOT SKIP ANY ITEMS** - Each one prevents potential losses
|
||||
|
||||
---
|
||||
|
||||
## Pre-Deployment (MANDATORY)
|
||||
|
||||
### Configuration
|
||||
- [ ] `.env.production.safe` copied and customized
|
||||
- [ ] `DRY_RUN_MODE=true` initially
|
||||
- [ ] `ENABLE_EXECUTION=false` initially
|
||||
- [ ] Archive RPC provider configured (Alchemy/QuickNode)
|
||||
- [ ] Private key stored securely (hardware wallet recommended)
|
||||
- [ ] All safety limits set conservatively
|
||||
|
||||
### Testing
|
||||
- [ ] 24+ hours dry-run monitoring completed
|
||||
- [ ] Profit calculations manually verified
|
||||
- [ ] Circuit breaker tested (triggers on losses)
|
||||
- [ ] Emergency stop tested (creates file successfully)
|
||||
- [ ] Testnet deployment successful (if applicable)
|
||||
|
||||
### Infrastructure
|
||||
- [ ] Monitoring stack deployed (Prometheus + Grafana)
|
||||
- [ ] Alerting configured (Slack/Discord/Telegram)
|
||||
- [ ] Server meets minimum specs (4 CPU, 8GB RAM)
|
||||
- [ ] Low latency RPC connection verified (<100ms)
|
||||
|
||||
---
|
||||
|
||||
## Deployment Day
|
||||
|
||||
### Initial Launch (Dry-Run)
|
||||
- [ ] Deploy with `DRY_RUN_MODE=true`
|
||||
- [ ] Monitor logs continuously for 24 hours
|
||||
- [ ] Verify opportunities detected correctly
|
||||
- [ ] Check profit estimates look reasonable
|
||||
- [ ] No errors or warnings in logs
|
||||
|
||||
### Switch to Live Trading (If Dry-Run Successful)
|
||||
- [ ] Start with `MAX_POSITION_SIZE=0.1` ETH
|
||||
- [ ] Fund wallet with SMALL amount (0.5-1 ETH max)
|
||||
- [ ] Set `ENABLE_EXECUTION=true`
|
||||
- [ ] Monitor EVERY trade for first hour
|
||||
- [ ] Manually calculate profit/loss for first 10 trades
|
||||
|
||||
---
|
||||
|
||||
## Daily Monitoring (First Week)
|
||||
|
||||
- [ ] Check bot still running
|
||||
- [ ] Review all trades from last 24 hours
|
||||
- [ ] Calculate net P/L (including gas costs)
|
||||
- [ ] Check circuit breaker events
|
||||
- [ ] Review error logs
|
||||
- [ ] Verify wallet balance matches expectations
|
||||
|
||||
**If ANY day shows net loss: STOP and investigate**
|
||||
|
||||
---
|
||||
|
||||
## Weekly Review
|
||||
|
||||
- [ ] Calculate weekly ROI
|
||||
- [ ] Win rate > 60%?
|
||||
- [ ] Gas costs < 30% of profits?
|
||||
- [ ] No unexpected circuit breaker triggers?
|
||||
- [ ] System stable (no crashes)?
|
||||
- [ ] Adjust parameters if needed
|
||||
|
||||
**If unprofitable: DO NOT increase limits**
|
||||
|
||||
---
|
||||
|
||||
## Red Flags - STOP IMMEDIATELY If:
|
||||
|
||||
🚨 **Circuit breaker triggering frequently** (>3 times/day)
|
||||
🚨 **Consecutive losing days** (2+ days)
|
||||
🚨 **Gas costs exceeding profits**
|
||||
🚨 **Unexpected large losses** (>0.1 ETH single trade)
|
||||
🚨 **System errors or crashes**
|
||||
🚨 **RPC connection issues**
|
||||
|
||||
---
|
||||
|
||||
## Emergency Procedures
|
||||
|
||||
### Immediate Stop
|
||||
```bash
|
||||
# Method 1: Emergency file
|
||||
docker exec mev-bot-v2-production touch /tmp/mev-bot-emergency-stop
|
||||
|
||||
# Method 2: Container stop
|
||||
docker stop mev-bot-v2-production
|
||||
|
||||
# Method 3: Kill immediately
|
||||
docker kill mev-bot-v2-production
|
||||
```
|
||||
|
||||
### Post-Stop Actions
|
||||
1. Export all logs for analysis
|
||||
2. Calculate total P/L
|
||||
3. Identify root cause
|
||||
4. Fix issues before restart
|
||||
5. Test fixes on testnet
|
||||
6. Only restart if confident in fix
|
||||
|
||||
---
|
||||
|
||||
## Capital Scale-Up (ONLY if Profitable)
|
||||
|
||||
| Week | Condition | Max Position | Max Daily Volume |
|
||||
|------|-----------|--------------|------------------|
|
||||
| 1 | Testing | 0.1 ETH | 0.5 ETH |
|
||||
| 2 | Profitable Week 1 | 0.25 ETH | 1 ETH |
|
||||
| 3 | Profitable Week 2 | 0.5 ETH | 2 ETH |
|
||||
| 4+ | Profitable Week 3 | 1 ETH+ | 5 ETH+ |
|
||||
|
||||
**Rules:**
|
||||
- Each week must be NET profitable before increasing
|
||||
- ANY losing week = revert to previous limits
|
||||
- NEVER increase >2x in single week
|
||||
|
||||
---
|
||||
|
||||
## Safety Limits (NEVER Exceed Without Testing)
|
||||
|
||||
| Parameter | Conservative | Moderate | Aggressive |
|
||||
|-----------|--------------|----------|------------|
|
||||
| MAX_POSITION_SIZE | 0.1 ETH | 1 ETH | 5 ETH |
|
||||
| MAX_DAILY_VOLUME | 0.5 ETH | 5 ETH | 20 ETH |
|
||||
| MIN_PROFIT_WEI | 0.05 ETH | 0.02 ETH | 0.01 ETH |
|
||||
| MIN_ROI | 5% | 2% | 1% |
|
||||
| MAX_SLIPPAGE_BPS | 100 (1%) | 200 (2%) | 300 (3%) |
|
||||
| MAX_GAS_PRICE_GWEI | 25 | 50 | 100 |
|
||||
|
||||
**Start conservative, increase gradually ONLY if profitable**
|
||||
|
||||
---
|
||||
|
||||
## Required Metrics Tracking
|
||||
|
||||
### Profitability
|
||||
- [ ] Gross profit per trade
|
||||
- [ ] Net profit after gas
|
||||
- [ ] ROI percentage
|
||||
- [ ] Win rate
|
||||
- [ ] Largest win/loss
|
||||
|
||||
### Safety
|
||||
- [ ] Circuit breaker triggers
|
||||
- [ ] Emergency stops
|
||||
- [ ] Daily volume used
|
||||
- [ ] Position size violations
|
||||
|
||||
### Performance
|
||||
- [ ] Trade execution latency
|
||||
- [ ] Gas cost per trade
|
||||
- [ ] Failed transaction rate
|
||||
- [ ] Opportunities detected vs executed
|
||||
|
||||
---
|
||||
|
||||
## Contact & Support
|
||||
|
||||
**Before reaching out:**
|
||||
1. Export logs: `docker logs mev-bot-v2-production > debug.log`
|
||||
2. Calculate exact P/L
|
||||
3. Note specific error messages
|
||||
4. Check this checklist for missed items
|
||||
|
||||
**GitHub Issues:** https://github.com/your-org/mev-bot-v2/issues
|
||||
|
||||
---
|
||||
|
||||
**Remember: It's better to miss opportunities than lose capital**
|
||||
|
||||
**Start small, scale slowly, stop quickly if problems occur**
|
||||
Reference in New Issue
Block a user