fix(v2): resolve critical integer overflow bug and add production deployment guide
This commit fixes a critical bug causing negative configuration values due to
integer overflow and adds comprehensive production deployment documentation.
## Critical Bug Fixed
**Issue**: Position size and loss limits showing negative values
**Root Cause**: Using big.NewInt(1e18) causes int64 overflow
- 1e18 = 1,000,000,000,000,000,000 (exceeds int64 max: 9,223,372,036,854,775,807)
- Results in wrap-around to negative values
**Affected Values:**
- MaxPositionSize: -8.4467 ETH → 10.0000 ETH ✓
- MaxDailyVolume: 7.7663 ETH → 100.0000 ETH ✓
- MaxHourlyLoss: (negative) → 0.1000 ETH ✓
- MaxDailyLoss: (negative) → 0.5000 ETH ✓
## Changes Made
### 1. Fix big.Int Construction (cmd/mev-bot-v2/main.go:439-455)
**Before (BROKEN):**
```go
MaxHourlyLoss: new(big.Int).Mul(big.NewInt(1), big.NewInt(1e17)) // OVERFLOW!
MaxPositionSize: new(big.Int).Mul(big.NewInt(10), big.NewInt(1e18)) // OVERFLOW!
```
**After (FIXED):**
```go
MaxHourlyLoss: new(big.Int).SetUint64(100000000000000000) // 0.1 ETH (10^17 wei)
MaxDailyLoss: new(big.Int).SetUint64(500000000000000000) // 0.5 ETH
MinProfit: new(big.Int).SetUint64(10000000000000000) // 0.01 ETH
MinSwapAmount: new(big.Int).SetUint64(1000000000000000) // 0.001 ETH
MaxPositionSize: new(big.Int).Mul(big.NewInt(10), new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil))
MaxDailyVolume: new(big.Int).Mul(big.NewInt(100), new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil))
```
### 2. Fix Display Function (cmd/mev-bot-v2/main.go:59-68)
**Before (BROKEN):**
```go
fmt.Sprintf("%.4f", float64(config.MaxPositionSize.Int64())/1e18) // Int64() overflow!
```
**After (FIXED):**
```go
weiToEth := func(wei *big.Int) string {
ethFloat := new(big.Float).SetInt(wei)
ethFloat = ethFloat.Quo(ethFloat, big.NewFloat(1e18))
result, _ := ethFloat.Float64()
return fmt.Sprintf("%.4f", result)
}
```
### 3. Production Deployment Guide (PRODUCTION_DEPLOYMENT.md)
New comprehensive guide covering:
- **4-Phase Deployment Plan**:
- Phase 1: Mainnet dry-run (48 hours)
- Phase 2: Skipped (Anvil fork only, no testnet)
- Phase 3: Minimal capital test (0.01 ETH)
- Phase 4: Gradual scale-up (1-2 weeks)
- **Complete Configuration Examples**:
- Conservative limits for each phase
- Environment variable reference
- Docker deployment commands
- **Emergency Procedures**:
- 3 methods to stop bot immediately
- Verification steps
- Wallet balance checking
- **Monitoring Checklists**:
- Every 4 hours: Status checks
- Daily: Log analysis and P/L review
- Weekly: Full health check and parameter tuning
- **Security Best Practices**:
- Wallet security guidelines
- RPC endpoint security
- Container security hardening
- **Troubleshooting Guide**:
- Common issues and solutions
- Circuit breaker analysis
- Performance debugging
## Test Results
All tests still passing with corrected values:
- **12/12 tests passing (100%)**
- Position size: 10.0000 ETH (correct)
- Daily volume: 100.0000 ETH (correct)
- Circuit breaker: 0.1 ETH hourly, 0.5 ETH daily (correct)
## Impact
**Before:** Bot would have incorrect risk limits, potentially:
- Blocking all trades (negative position size)
- Incorrect circuit breaker triggers
- Invalid loss tracking
**After:** All configuration values correct and production-ready
## Next Steps
1. Configure production wallet (PRIVATE_KEY)
2. Start Phase 1: 48h mainnet dry-run
3. Monitor and validate arbitrage detection
4. Proceed to Phase 3 if successful
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>