- Added comprehensive bounds checking to prevent buffer overruns in multicall parsing - Implemented graduated validation system (Strict/Moderate/Permissive) to reduce false positives - Added LRU caching system for address validation with 10-minute TTL - Enhanced ABI decoder with missing Universal Router and Arbitrum-specific DEX signatures - Fixed duplicate function declarations and import conflicts across multiple files - Added error recovery mechanisms with multiple fallback strategies - Updated tests to handle new validation behavior for suspicious addresses - Fixed parser test expectations for improved validation system - Applied gofmt formatting fixes to ensure code style compliance - Fixed mutex copying issues in monitoring package by introducing MetricsSnapshot - Resolved critical security vulnerabilities in heuristic address extraction - Progress: Updated TODO audit from 10% to 35% complete 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
137 lines
4.0 KiB
Markdown
137 lines
4.0 KiB
Markdown
# MEV Bot Exchange Support
|
|
|
|
## Overview
|
|
This directory contains implementations for various decentralized exchange (DEX) protocols in the MEV Bot. Each exchange protocol is implemented with a consistent interface to allow for cross-exchange arbitrage opportunities.
|
|
|
|
## Supported Exchanges
|
|
|
|
### Core V2-style AMMs
|
|
- **Uniswap V2**: Standard constant product AMM
|
|
- **SushiSwap**: Fork of Uniswap V2 with additional features
|
|
- **PancakeSwap**: Binance Smart Chain implementation similar to Uniswap V2
|
|
|
|
### V3-style Concentrated Liquidity
|
|
- **Uniswap V3**: Concentrated liquidity with ticks and fee tiers
|
|
- **Uniswap V4**: Next-generation AMM with hooks and more flexibility
|
|
- **Kyber**: Elastic AMM with concentrated liquidity and custom hooks
|
|
- **Camelot**: Arbitrum-focused AMM with concentrated liquidity
|
|
|
|
### StableSwap AMMs
|
|
- **Curve**: Stableswap algorithm for similar-asset swaps
|
|
- **Balancer**: Weighted and stable pool implementations
|
|
|
|
### Multi-Asset AMMs
|
|
- **Balancer**: Weighted, stable, and composable stable pools
|
|
- **Dex Aggregators**: Integration with 1inch, ParaSwap, etc.
|
|
|
|
## Architecture
|
|
|
|
Each exchange implementation follows the same interface pattern with three primary components:
|
|
|
|
### 1. PoolDetector
|
|
- Discovers pools for token pairs
|
|
- Handles multiple fee tiers
|
|
- Identifies pool types
|
|
|
|
### 2. LiquidityFetcher
|
|
- Fetches pool reserves and data
|
|
- Calculates spot prices
|
|
- Estimates liquidity depth
|
|
|
|
### 3. SwapRouter
|
|
- Calculates swap amounts
|
|
- Generates transaction data
|
|
- Validates swaps
|
|
|
|
## Exchange-Specific Features
|
|
|
|
### Uniswap V4
|
|
- Hooks support for custom logic
|
|
- Concentrated liquidity model
|
|
- Flexible fees and parameters
|
|
|
|
### Kyber
|
|
- Elastic AMM architecture
|
|
- Concentrated liquidity
|
|
- Customizable parameters
|
|
|
|
### Curve
|
|
- Stableswap invariant
|
|
- Multi-asset support
|
|
- Amplification coefficients
|
|
|
|
### Balancer
|
|
- Weighted pools
|
|
- Stable pools
|
|
- Composable stable pools
|
|
- Managed pools
|
|
|
|
### Aggregators
|
|
- Multi-DEX routing
|
|
- Gas optimization
|
|
- Price comparison across exchanges
|
|
|
|
## Common Interface Usage
|
|
|
|
All exchanges implement the following interfaces:
|
|
|
|
```go
|
|
type PoolDetector interface {
|
|
GetAllPools(token0, token1 common.Address) ([]common.Address, error)
|
|
GetPoolForPair(token0, token1 common.Address) (common.Address, error)
|
|
GetSupportedFeeTiers() []int64
|
|
GetPoolType() string
|
|
}
|
|
|
|
type LiquidityFetcher interface {
|
|
GetPoolData(poolAddress common.Address) (*math.PoolData, error)
|
|
GetTokenReserves(poolAddress, token0, token1 common.Address) (*big.Int, *big.Int, error)
|
|
GetPoolPrice(poolAddress common.Address) (*big.Float, error)
|
|
GetLiquidityDepth(poolAddress, tokenIn common.Address, amount *big.Int) (*big.Int, error)
|
|
}
|
|
|
|
type SwapRouter interface {
|
|
CalculateSwap(tokenIn, tokenOut common.Address, amountIn *big.Int) (*big.Int, error)
|
|
GenerateSwapData(tokenIn, tokenOut common.Address, amountIn, minAmountOut *big.Int, deadline *big.Int) ([]byte, error)
|
|
GetSwapRoute(tokenIn, tokenOut common.Address) ([]common.Address, error)
|
|
ValidateSwap(tokenIn, tokenOut common.Address, amountIn *big.Int) error
|
|
}
|
|
```
|
|
|
|
## Cross-Exchange Arbitrage
|
|
|
|
The system supports identifying and executing arbitrage opportunities across all supported exchanges. The `CrossExchangeArbitrageFinder` component:
|
|
|
|
- Monitors prices across all exchanges
|
|
- Identifies profitable opportunities
|
|
- Considers gas costs and slippage
|
|
- Executes arbitrage when profitable
|
|
|
|
## Configuration
|
|
|
|
Each exchange has specific configuration parameters including:
|
|
|
|
- Contract addresses (factory, router)
|
|
- Chain ID
|
|
- Default slippage tolerance
|
|
- Gas estimation parameters
|
|
- Pool initialization code hash
|
|
- Supported fee tiers
|
|
|
|
## Math Support
|
|
|
|
The system includes exchange-specific pricing models via the `ExchangePricingEngine`:
|
|
|
|
- Uniswap V2: Constant product formula
|
|
- Uniswap V3/V4: Concentrated liquidity with ticks
|
|
- Curve: Stableswap invariant
|
|
- Balancer: Weighted and stable pool formulas
|
|
- Kyber: Elastic concentrated liquidity
|
|
|
|
## Performance Considerations
|
|
|
|
- Efficient pool discovery mechanisms
|
|
- Cached price calculations
|
|
- Optimized route finding
|
|
- Gas cost estimation
|
|
- Slippage protection |