Files
mev-beta/docker-compose.staging.yaml
Krypto Kajun 850223a953 fix(multicall): resolve critical multicall parsing corruption issues
- 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>
2025-10-17 00:12:55 -05:00

280 lines
7.9 KiB
YAML

# Staging MEV Bot Docker Compose Configuration
version: '3.8'
services:
# Main MEV Bot Service for Staging
mev-bot-staging:
build:
context: .
dockerfile: Dockerfile.production
target: staging
container_name: mev-bot-arbitrum-staging
restart: unless-stopped
# Environment configuration for staging
environment:
# Arbitrum Network Configuration for Staging
- ARBITRUM_RPC_ENDPOINT=${ARBITRUM_RPC_ENDPOINT:-wss://arbitrum-mainnet.core.chainstack.com/53c30e7a941160679fdcc396c894fc57}
- ARBITRUM_WS_ENDPOINT=${ARBITRUM_WS_ENDPOINT:-wss://arbitrum-mainnet.core.chainstack.com/53c30e7a941160679fdcc396c894fc57}
- ARBITRUM_FALLBACK_ENDPOINTS=${ARBITRUM_FALLBACK_ENDPOINTS:-https://arb1.arbitrum.io/rpc,https://arbitrum.llamarpc.com,https://arbitrum-one.publicnode.com}
# Rate limiting for staging (more conservative than production)
- RPC_REQUESTS_PER_SECOND=${RPC_REQUESTS_PER_SECOND:-50}
- RPC_MAX_CONCURRENT=${RPC_MAX_CONCURRENT:-5}
# Bot Configuration for Staging
- BOT_MAX_WORKERS=${BOT_MAX_WORKERS:-3}
- BOT_CHANNEL_BUFFER_SIZE=${BOT_CHANNEL_BUFFER_SIZE:-100}
# Ethereum Account for Staging (NEVER set in compose file - use .env file)
- ETHEREUM_PRIVATE_KEY=${ETHEREUM_PRIVATE_KEY}
- ETHEREUM_ACCOUNT_ADDRESS=${ETHEREUM_ACCOUNT_ADDRESS}
- ETHEREUM_GAS_PRICE_MULTIPLIER=${ETHEREUM_GAS_PRICE_MULTIPLIER:-1.2}
# Smart Contract Addresses for Staging
- CONTRACT_ARBITRAGE_EXECUTOR=${CONTRACT_ARBITRAGE_EXECUTOR}
- CONTRACT_FLASH_SWAPPER=${CONTRACT_FLASH_SWAPPER}
# Security for Staging
- MEV_BOT_ENCRYPTION_KEY=${MEV_BOT_ENCRYPTION_KEY}
# Logging and Monitoring for Staging
- LOG_LEVEL=${LOG_LEVEL:-debug}
- LOG_FORMAT=${LOG_FORMAT:-text}
- METRICS_ENABLED=${METRICS_ENABLED:-true}
- METRICS_PORT=${METRICS_PORT:-9091}
# Staging Environment
- GO_ENV=staging
- DEBUG=true
# Reduced risk settings for staging
- MIN_PROFIT_THRESHOLD=${MIN_PROFIT_THRESHOLD:-50.0}
- MAX_POSITION_SIZE=${MAX_POSITION_SIZE:-1000000000000000000} # 1 ETH max position
# Volume mounts for persistent data in staging
volumes:
- ./data/staging:/app/data:Z
- ./logs/staging:/app/logs:Z
- ./config:/app/config:ro
- ./keys:/app/keys:ro,Z # Read-only keys directory
# Port exposure for staging
ports:
- "${METRICS_PORT:-9091}:9091" # Metrics endpoint for staging
- "${HEALTH_PORT:-8081}:8081" # Health check endpoint for staging
# Health check for staging
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8081/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# Reduced resource limits for staging
deploy:
resources:
limits:
memory: 512M
cpus: '1.0'
reservations:
memory: 256M
cpus: '0.5'
# Logging configuration for staging
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "3"
# Security for staging
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp:noexec,nosuid,size=50m
# Dependencies for staging
depends_on:
- redis-staging
- postgres-staging
# Networks for staging
networks:
- mev-bot-staging-network
# Redis for caching and rate limiting in staging
redis-staging:
image: redis:7-alpine
container_name: mev-bot-redis-staging
restart: unless-stopped
# Redis configuration for staging
command: redis-server --appendonly yes --maxmemory 128mb --maxmemory-policy allkeys-lru
volumes:
- redis_staging_data:/data:Z
# Security for staging
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp:noexec,nosuid,size=10m
# Reduced resource limits for staging
deploy:
resources:
limits:
memory: 256M
cpus: '0.25'
reservations:
memory: 128M
cpus: '0.125'
# Health check for staging
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 5s
retries: 3
networks:
- mev-bot-staging-network
# PostgreSQL for transaction and profit tracking in staging
postgres-staging:
image: postgres:15-alpine
container_name: mev-bot-postgres-staging
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB:-mevbot_staging}
- POSTGRES_USER=${POSTGRES_USER:-mevbot_staging}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_INITDB_ARGS=--auth-host=scram-sha-256
volumes:
- postgres_staging_data:/var/lib/postgresql/data:Z
- ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql:ro
# Security for staging
security_opt:
- no-new-privileges:true
# Reduced resource limits for staging
deploy:
resources:
limits:
memory: 512M
cpus: '0.5'
reservations:
memory: 256M
cpus: '0.25'
# Health check for staging
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-mevbot_staging}"]
interval: 30s
timeout: 5s
retries: 3
networks:
- mev-bot-staging-network
# Prometheus for metrics collection in staging
prometheus-staging:
image: prom/prometheus:latest
container_name: mev-bot-prometheus-staging
restart: unless-stopped
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=7d' # Shorter retention for staging
- '--web.enable-lifecycle'
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_staging_data:/prometheus:Z
ports:
- "${PROMETHEUS_PORT:-9092}:9090"
# Security for staging
security_opt:
- no-new-privileges:true
networks:
- mev-bot-staging-network
# Grafana for monitoring dashboards in staging
grafana-staging:
image: grafana/grafana:latest
container_name: mev-bot-grafana-staging
restart: unless-stopped
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin123}
- GF_SECURITY_ADMIN_USER=${GRAFANA_USER:-admin}
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
volumes:
- grafana_staging_data:/var/lib/grafana:Z
- ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards:ro
- ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources:ro
ports:
- "${GRAFANA_PORT:-3001}:3000"
# Security for staging
security_opt:
- no-new-privileges:true
depends_on:
- prometheus-staging
networks:
- mev-bot-staging-network
# Log aggregation with Fluentd for staging
fluentd-staging:
build:
context: ./monitoring/fluentd
dockerfile: Dockerfile
container_name: mev-bot-fluentd-staging
restart: unless-stopped
volumes:
- ./monitoring/fluentd/conf:/fluentd/etc:ro
- ./logs/staging:/fluentd/logs:ro
ports:
- "24225:24224"
- "24225:24224/udp"
networks:
- mev-bot-staging-network
# Named volumes for data persistence in staging
volumes:
redis_staging_data:
driver: local
postgres_staging_data:
driver: local
prometheus_staging_data:
driver: local
grafana_staging_data:
driver: local
# Network configuration for staging
networks:
mev-bot-staging-network:
driver: bridge
ipam:
config:
- subnet: 172.21.0.0/16