# NERVE Protocol — paper is the default and never signs a transaction. CHAIN=robinhood CHAIN_ID=4663 RPC_URL=https://rpc.mainnet.chain.robinhood.com CONFIRMATIONS=2 EXECUTION_MODE=paper LIVE_TRADING_ENABLED=false # Secrets are loaded at runtime. Never commit PRIVATE_KEY. PRIVATE_KEY= WALLET_ADDRESS= OPENAI_API_KEY= OPENAI_MODEL=gpt-6-astra OPENAI_REASONING_EFFORT=low # Explicit contract addresses only; symbols are not an allowlist. TOKEN_ALLOWLIST= ALLOW_ANY_TOKEN=false ENRICHMENT_PATH=data/enrichment.json WETH_USD=0 POOL_FEES=100,500,3000,10000 WETH_ADDRESS=0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 UNISWAP_V3_FACTORY=0x1f7d7550b1b028f7571e69a784071f0205fd2efa UNISWAP_V3_QUOTER=0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7 UNISWAP_V3_ROUTER=0xcaf681a66d020601342297493863e78c959e5cb2 # NonfungiblePositionManager. Needed to resolve LP NFT holders for lp_locked; # take it from the official deployment page. Empty = lp_locked falls back. UNISWAP_V3_POSITION_MANAGER= # SENTINEL: eth_call-only round trip from WALLET_ADDRESS, measured tax, bytecode # scan and on-chain enrichment. Unmeasured values stay None and fail closed. MAX_BUY_TAX_PCT=5 MAX_SELL_TAX_PCT=5 SENTINEL_MAX_AGE_BLOCKS=30 SENTINEL_SIMULATE_SIZE_USD=500 # Comma-separated locker contracts that count as locked LP (zero/dead always count). LP_LOCKER_ALLOWLIST= # Optional holder indexer: GET INDEXER_URL?chain=&token=&block= -> {"top10_pct": 34.5} INDEXER_URL= # Reflex and risk limits. RISK_PER_TRADE_PCT=0.01 MAX_POSITION_PCT=0.05 MAX_POSITIONS=5 DAILY_LOSS_LIMIT_PCT=0.03 MAX_GAS_GWEI=1.0 MIN_LIQUIDITY_USD=250000 MAX_SLIPPAGE_BPS=100 MIN_SCORE=55 MIN_CONFIDENCE=0.70 ORDER_TIMEOUT_SEC=90 DEADLINE_SEC=45 SCAN_INTERVAL_SEC=30 SCAN_WINDOW_BLOCKS=600 REPORT_INTERVAL_SEC=300 DB_PATH=data/nerve.db LOG_PATH=data/nerve.jsonl KILL_SWITCH_FILE=data/KILL_SWITCH