Added detailed log analysis showing bot is fully operational: - Processing 3,770 blocks in 15 minutes (100% success rate) - Detecting 193 DEX transactions across multiple protocols - System health score: 90/100 (Production Ready) Identified issue: Chainstack RPS limit lower than configured - 614 RPS errors in 10k log lines (94.9% of errors) - Errors occur in bursts during pool data fetching - Does not block core functionality (graceful error handling) Applied immediate fix in config/arbitrum_production.yaml: - Reduced RPS from 100 to 20 (match Chainstack Growth plan) - Reduced concurrent requests from 20 to 5 - Reduced burst from 100 to 30 - Added 50ms delay between requests Impact: Should eliminate 95%+ of RPS errors while maintaining performance 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
406 lines
13 KiB
YAML
406 lines
13 KiB
YAML
# MEV Bot Production Configuration for Arbitrum One
|
|
# Generated based on verified contract addresses as of September 2024
|
|
|
|
# Top 20 Arbitrum One Tokens by Market Cap and Trading Volume
|
|
tokens:
|
|
# Major Stablecoins and Base Assets
|
|
weth:
|
|
symbol: "WETH"
|
|
name: "Wrapped Ether"
|
|
address: "0x82af49447d8a07e3bd95bd0d56f35241523fbab1"
|
|
decimals: 18
|
|
coingecko_id: "weth"
|
|
is_base_token: true
|
|
|
|
usdc:
|
|
symbol: "USDC"
|
|
name: "USD Coin (Native)"
|
|
address: "0xaf88d065e77c8cc2239327c5edb3a432268e5831"
|
|
decimals: 6
|
|
coingecko_id: "usd-coin"
|
|
is_stable: true
|
|
|
|
usdc_e:
|
|
symbol: "USDC.e"
|
|
name: "USD Coin (Bridged)"
|
|
address: "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8"
|
|
decimals: 6
|
|
coingecko_id: "usd-coin-ethereum-bridged"
|
|
is_stable: true
|
|
|
|
usdt:
|
|
symbol: "USDT"
|
|
name: "Tether USD"
|
|
address: "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9"
|
|
decimals: 6
|
|
coingecko_id: "tether"
|
|
is_stable: true
|
|
|
|
# Native and Governance Tokens
|
|
arb:
|
|
symbol: "ARB"
|
|
name: "Arbitrum"
|
|
address: "0x912ce59144191c1204e64559fe8253a0e49e6548"
|
|
decimals: 18
|
|
coingecko_id: "arbitrum"
|
|
is_governance: true
|
|
|
|
# DeFi Blue Chips
|
|
gmx:
|
|
symbol: "GMX"
|
|
name: "GMX"
|
|
address: "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a"
|
|
decimals: 18
|
|
coingecko_id: "gmx"
|
|
category: "derivatives"
|
|
|
|
pendle:
|
|
symbol: "PENDLE"
|
|
name: "Pendle"
|
|
address: "0x0c880f6761f1af8d9aa9c466984b80dab9a8c9e8"
|
|
decimals: 18
|
|
coingecko_id: "pendle"
|
|
category: "yield"
|
|
|
|
# Additional High Volume Tokens
|
|
wbtc:
|
|
symbol: "WBTC"
|
|
name: "Wrapped Bitcoin"
|
|
address: "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f"
|
|
decimals: 8
|
|
coingecko_id: "wrapped-bitcoin"
|
|
|
|
link:
|
|
symbol: "LINK"
|
|
name: "Chainlink"
|
|
address: "0xf97f4df75117a78c1a5a0dbb814af92458539fb4"
|
|
decimals: 18
|
|
coingecko_id: "chainlink"
|
|
|
|
uni:
|
|
symbol: "UNI"
|
|
name: "Uniswap"
|
|
address: "0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0"
|
|
decimals: 18
|
|
coingecko_id: "uniswap"
|
|
|
|
aave:
|
|
symbol: "AAVE"
|
|
name: "Aave"
|
|
address: "0xba5ddd1f9d7f570dc94a51479a000e3bce967196"
|
|
decimals: 18
|
|
coingecko_id: "aave"
|
|
|
|
crv:
|
|
symbol: "CRV"
|
|
name: "Curve DAO Token"
|
|
address: "0x11cdb42b0eb46d95f990bedd4695a6e3fa034978"
|
|
decimals: 18
|
|
coingecko_id: "curve-dao-token"
|
|
|
|
bal:
|
|
symbol: "BAL"
|
|
name: "Balancer"
|
|
address: "0x040d1edc9569d4bab2d15287dc5a4f10f56a56b8"
|
|
decimals: 18
|
|
coingecko_id: "balancer"
|
|
|
|
comp:
|
|
symbol: "COMP"
|
|
name: "Compound"
|
|
address: "0x354a6da3fcde098f8389cad84b0182725c6c91de"
|
|
decimals: 18
|
|
coingecko_id: "compound-governance-token"
|
|
|
|
mkr:
|
|
symbol: "MKR"
|
|
name: "Maker"
|
|
address: "0x2e9a6df78e42c50b0cefcf9000d0c3a4d34e1dd5"
|
|
decimals: 18
|
|
coingecko_id: "maker"
|
|
|
|
# Arbitrum Ecosystem Tokens
|
|
magic:
|
|
symbol: "MAGIC"
|
|
name: "MAGIC"
|
|
address: "0x539bde0d7dbd336b79148aa742883198bbf60342"
|
|
decimals: 18
|
|
coingecko_id: "magic"
|
|
category: "gaming"
|
|
|
|
grail:
|
|
symbol: "GRAIL"
|
|
name: "Camelot Token"
|
|
address: "0x3d9907f9a368ad0a51be60f7da3b97cf940982d8"
|
|
decimals: 18
|
|
coingecko_id: "camelot-token"
|
|
|
|
dpx:
|
|
symbol: "DPX"
|
|
name: "Dopex"
|
|
address: "0x6c2c06790b3e3e3c38e12ee22f8183b37a13ee55"
|
|
decimals: 18
|
|
coingecko_id: "dopex"
|
|
category: "options"
|
|
|
|
rdnt:
|
|
symbol: "RDNT"
|
|
name: "Radiant Capital"
|
|
address: "0x3082cc23568ea640225c2467653db90e9250aaa0"
|
|
decimals: 18
|
|
coingecko_id: "radiant-capital"
|
|
|
|
ram:
|
|
symbol: "RAM"
|
|
name: "Ramses"
|
|
address: "0xaaa6c1e32c55a7bfa8066a6fae9b42650f262418"
|
|
decimals: 18
|
|
coingecko_id: "ramses-exchange"
|
|
|
|
# DEX Factory and Router Addresses - Verified for Arbitrum One
|
|
dex_protocols:
|
|
uniswap_v3:
|
|
name: "Uniswap V3"
|
|
factory: "0x1F98431c8aD98523631AE4a59f267346ea31F984"
|
|
router: "0xE592427A0AEce92De3Edee1F18E0157C05861564"
|
|
router_v2: "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
|
|
universal_router: "0x4c60051384bd2d3c01bfc845cf5f4b44bcbe9de5"
|
|
position_manager: "0xC36442b4a4522E871399CD717aBDD847Ab11FE88"
|
|
quoter: "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6"
|
|
quoter_v2: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e"
|
|
fee_tiers: [100, 500, 3000, 10000]
|
|
init_code_hash: "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54"
|
|
|
|
uniswap_v2:
|
|
name: "Uniswap V2"
|
|
factory: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f"
|
|
router: "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D"
|
|
fee_percent: 0.3
|
|
init_code_hash: "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"
|
|
|
|
camelot:
|
|
name: "Camelot DEX"
|
|
factory: "0x6EcCab422D763aC031210895C81787E87B43A652"
|
|
router: "0xc873fEcbd354f5A56E00E710B90EF4201db2448d"
|
|
fee_percent: 0.2
|
|
supports_custom_fees: true
|
|
|
|
balancer_v2:
|
|
name: "Balancer V2"
|
|
vault: "0xba12222222228d8ba445958a75a0704d566bf2c8"
|
|
# Note: Balancer uses vault-based architecture, not traditional factory/router
|
|
|
|
curve:
|
|
name: "Curve Finance"
|
|
address_provider: "0x5ffe7FB82894076ECB99A30D6A32e969e6e35E98"
|
|
# Registry addresses retrieved via address_provider.get_address(id)
|
|
registry_ids:
|
|
stableswap_registry: 0
|
|
pool_info: 1
|
|
exchange_router: 2
|
|
metapool_factory: 3
|
|
fee_distributor: 4
|
|
crypto_registry: 5
|
|
twocrypto_factory: 6
|
|
metaregistry: 7
|
|
crvusd_factory: 8
|
|
tricrypto_ng_factory: 11
|
|
stableswap_ng_factory: 12
|
|
twocrypto_ng_factory: 13
|
|
|
|
kyber_elastic:
|
|
name: "KyberSwap Elastic"
|
|
factory: "0x5F1dddbf348aC2fbe22a163e30F99F9ECE3DD50a"
|
|
router: "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83"
|
|
position_manager: "0x2B1c7b41f6A8F2b2bc45C3233a5d5FB3cD6dC9A8"
|
|
quoter_v2: "0x0D125c15D54cA1F8a813C74A81aEe34ebB508C1f"
|
|
tick_fees_reader: "0x165c68077ac06c83800d19200e6E2B08D02dE75D"
|
|
|
|
ramses:
|
|
name: "Ramses Exchange"
|
|
router: "0xAAA87963EFeB6f7E0a2711F397663105Acb1805e"
|
|
position_manager: "0xAA277CB7914b7e5514946Da92cb9De332Ce610EF"
|
|
# Factory address to be retrieved from router or documentation
|
|
fee_tiers: [100, 500, 3000, 10000]
|
|
|
|
sushiswap:
|
|
name: "SushiSwap"
|
|
factory: "0xc35DADB65012eC5796536bD9864eD8773aBc74C4"
|
|
router: "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506"
|
|
fee_percent: 0.3
|
|
init_code_hash: "0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303"
|
|
|
|
# REAL DEPLOYED MEV BOT CONTRACT ADDRESSES ON ARBITRUM MAINNET
|
|
# Uniswap V3 Flash Swaps - Deployed October 27, 2025
|
|
contracts:
|
|
# Core arbitrage execution contract - DEPLOYED AND VERIFIED
|
|
arbitrage_executor: "0x6C2B1c6Eb0e5aB73d8C60944c74A62bfE629c418"
|
|
|
|
# Flash swap contracts - DEPLOYED AND AUTHORIZED
|
|
uniswap_v3_flash_swapper: "0x7Cc97259cBe0D02Cd0b8A80c2E1f79C7265808b4"
|
|
data_fetcher: "0xC6BD82306943c0F3104296a46113ca0863723cBD"
|
|
uniswap_v2_flash_swapper: "0xE82c24b3fD47995E0626b1e8ac13E13130f5AeEE"
|
|
|
|
# Legacy field mappings for backward compatibility
|
|
flash_swapper: "0x5801ee5c2f6069e0f11cce7c0f27c2ef88e79a95" # Points to V3 swapper
|
|
|
|
# Flash loan receiver contract (Balancer flash loans) - DEPLOYED
|
|
flash_loan_receiver: "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512"
|
|
# Balancer Vault address for flash loans (Arbitrum mainnet)
|
|
balancer_vault: "0xBA12222222228d8Ba445958a75a0704d566BF2C8"
|
|
|
|
# Arbitrage Service Configuration
|
|
arbitrage:
|
|
enabled: true
|
|
arbitrage_contract_address: "0xec2a16d5f8ac850d08c4c7f67efd50051e7cfc0b"
|
|
flash_swap_contract_address: "0x5801ee5c2f6069e0f11cce7c0f27c2ef88e79a95"
|
|
stats_update_interval: "10s"
|
|
max_concurrent_executions: 3
|
|
|
|
# Detection thresholds - OPTIMIZED FOR FLASH LOANS (No capital required!)
|
|
min_profit_wei: 100000000000000 # ~$0.20 minimum profit (0.0001 ETH) - Flash loans have NO capital risk!
|
|
min_roi_percent: 0.05 # Minimum 0.05% ROI for flash loans (lower threshold = more opportunities)
|
|
min_significant_swap_size: 100000000000000000 # 0.1 ETH minimum swap size to trigger analysis
|
|
slippage_tolerance: 0.003 # 0.3% max slippage
|
|
|
|
# Scanning parameters
|
|
min_scan_amount_wei: 100000000000000000 # 0.1 ETH minimum scan amount
|
|
max_scan_amount_wei: 1000000000000000000 # 1 ETH maximum scan amount
|
|
max_gas_price_wei: 100000000 # 0.1 gwei max gas price (Arbitrum typical)
|
|
|
|
# Processing limits
|
|
max_opportunities_per_event: 5 # Max opportunities to process per swap event
|
|
|
|
# Timing constraints
|
|
opportunity_ttl: "30s" # Opportunities expire after 30 seconds
|
|
max_path_age: "60s" # Max age for cached arbitrage paths
|
|
|
|
# PRODUCTION Arbitrage Strategy Configuration - ARBITRUM FOCUSED
|
|
arbitrage_config:
|
|
min_profit_threshold: "0.001" # 0.001 ETH minimum profit (~10x gas cost for safety)
|
|
max_gas_price: "0.5" # 0.5 gwei max (capped in code, appropriate for Arbitrum)
|
|
max_slippage: "0.3" # 0.3% max slippage (tight for profitability)
|
|
|
|
# MEV Competition Settings
|
|
priority_fee_multiplier: 15 # 15x base gas for competitive advantage
|
|
max_position_size: "10.0" # Max 10 ETH per arbitrage (risk management)
|
|
|
|
# Profitability Requirements - PRODUCTION SETTINGS
|
|
min_roi_percent: 0.1 # Minimum 0.1% ROI to execute
|
|
gas_cost_multiplier: 5 # Require 5x gas cost as minimum profit (safety margin)
|
|
|
|
# Priority token pairs for arbitrage
|
|
priority_pairs:
|
|
- ["WETH", "USDC"]
|
|
- ["WETH", "USDT"]
|
|
- ["USDC", "USDT"]
|
|
- ["WETH", "ARB"]
|
|
- ["WETH", "GMX"]
|
|
- ["ARB", "USDC"]
|
|
|
|
# Flash swap preferences
|
|
flash_swap_providers:
|
|
- protocol: "uniswap_v3"
|
|
priority: 1
|
|
fee_tier: 500
|
|
- protocol: "camelot"
|
|
priority: 2
|
|
- protocol: "uniswap_v2"
|
|
priority: 3
|
|
|
|
# Risk Management
|
|
risk_management:
|
|
max_position_size: "10.0" # Max position size in ETH
|
|
circuit_breaker_threshold: 5 # Stop after 5 consecutive failures
|
|
cooldown_period: 300 # 5 minutes cooldown after circuit breaker
|
|
|
|
# Arbitrum Network Configuration with Fallback Support
|
|
arbitrum:
|
|
# Primary RPC endpoint (can be overridden by ARBITRUM_RPC_ENDPOINT env var)
|
|
rpc_endpoint: "${ARBITRUM_RPC_ENDPOINT:-wss://arbitrum-mainnet.core.chainstack.com/53c30e7a941160679fdcc396c894fc57}"
|
|
# WebSocket endpoint (can be overridden by ARBITRUM_WS_ENDPOINT env var)
|
|
ws_endpoint: "${ARBITRUM_WS_ENDPOINT:-wss://arbitrum-mainnet.core.chainstack.com/53c30e7a941160679fdcc396c894fc57}"
|
|
chain_id: 42161
|
|
rate_limit:
|
|
requests_per_second: 20 # Conservative limit for Chainstack Growth plan
|
|
max_concurrent: 5 # Reduced to prevent rate limit bursts
|
|
burst: 30 # Conservative burst allowance
|
|
rpc_call_delay_ms: 50 # 50ms delay to smooth request distribution
|
|
# Fallback RPC endpoints for reliability (can be overridden by ARBITRUM_FALLBACK_ENDPOINTS env var)
|
|
# ENHANCED: More endpoints with timeout and retry settings
|
|
connection_timeout: "30s" # Increased from default 10s
|
|
request_timeout: "15s" # Increased from default 5s
|
|
max_retries: 5 # Increased from default 3
|
|
fallback_endpoints:
|
|
- url: "https://arb1.arbitrum.io/rpc"
|
|
rate_limit:
|
|
requests_per_second: 5 # Conservative for public endpoint
|
|
max_concurrent: 2
|
|
burst: 3
|
|
- url: "https://rpc.ankr.com/arbitrum"
|
|
rate_limit:
|
|
requests_per_second: 10 # Conservative for free tier
|
|
max_concurrent: 2
|
|
burst: 3
|
|
- url: "https://arbitrum.blockpi.network/v1/rpc/public"
|
|
rate_limit:
|
|
requests_per_second: 5 # Conservative for public endpoint
|
|
max_concurrent: 2
|
|
burst: 3
|
|
- url: "https://arbitrum-one.publicnode.com"
|
|
rate_limit:
|
|
requests_per_second: 5 # Conservative for public endpoint
|
|
max_concurrent: 2
|
|
burst: 3
|
|
- url: "https://1rpc.io/arb"
|
|
rate_limit:
|
|
requests_per_second: 5 # Conservative for public endpoint
|
|
max_concurrent: 2
|
|
burst: 3
|
|
- url: "https://arbitrum-one.public.blastapi.io"
|
|
rate_limit:
|
|
requests_per_second: 5 # Conservative for public endpoint
|
|
max_concurrent: 2
|
|
burst: 3
|
|
|
|
# Legacy Network Configuration (for backward compatibility)
|
|
network:
|
|
chain_id: 42161
|
|
name: "Arbitrum One"
|
|
rpc_endpoints:
|
|
- "https://arb1.arbitrum.io/rpc"
|
|
- "https://arbitrum-one.public.blastapi.io"
|
|
ws_endpoints:
|
|
- "wss://arb1.arbitrum.io/ws"
|
|
|
|
# Gas Configuration for Arbitrum
|
|
gas:
|
|
base_gas_price: 0.01 # Base gas price in gwei (Arbitrum typical)
|
|
priority_fee: 0.005 # Priority fee in gwei (very low on Arbitrum)
|
|
gas_multiplier: 1.1 # Multiplier for urgent transactions
|
|
max_gas_limit: 1000000 # Maximum gas limit per transaction (higher for complex arbitrage)
|
|
|
|
# Monitoring and Alerting
|
|
monitoring:
|
|
profit_alerts_threshold: "0.1" # Alert for profits above 0.1 ETH
|
|
loss_alerts_threshold: "0.05" # Alert for losses above 0.05 ETH
|
|
health_check_interval: 30 # Health check every 30 seconds
|
|
|
|
# Database Configuration
|
|
database:
|
|
type: "sqlite"
|
|
connection_string: "file:./data/mev_bot.db"
|
|
max_connections: 10
|
|
|
|
# Logging Configuration
|
|
log:
|
|
level: "info"
|
|
format: "json"
|
|
file: "./logs/mev_bot.log"
|
|
|
|
# Security Configuration
|
|
security:
|
|
require_signature_verification: true
|
|
max_transaction_value: "100.0" # Max transaction value in ETH
|
|
whitelist_only: false
|
|
emergency_stop_enabled: true |