{"record":{"id":"f62da331fab86792","repo":"nautechsystems/nautilus_trader","slug":"no-rpc-url-provided-for-name-set-rpc-url-inf","errorCode":null,"errorMessage":"No RPC URL provided for {name}. Set --rpc-url, INFURA_API_KEY, or RPC_HTTP_URL","messagePattern":"No RPC URL provided for (.+?)\\. Set --rpc-url, INFURA_API_KEY, or RPC_HTTP_URL","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/cli/src/blockchain/sync.rs","lineNumber":78,"sourceCode":"        anyhow::bail!(\n            \"DEX '{dex_type}' on chain '{}' cannot be synced: missing a PoolCreated parser for pool discovery.\",\n            chain.name\n        );\n    }\n\n    let postgres_connect_options = get_postgres_connect_options(\n        database.host,\n        database.port,\n        database.username,\n        database.password,\n        database.database,\n    );\n    // Get RPC HTTP URL: CLI arg, Infura provider, OR RPC_HTTP_URL env var\n    let rpc_http_url = rpc_url\n        .or_else(|| check_infura_rpc_provider(&chain.name))\n        .or_else(|| std::env::var(\"RPC_HTTP_URL\").ok())\n        .ok_or_else(|| {\n            anyhow::anyhow!(\n                \"No RPC URL provided for {name}. Set --rpc-url, INFURA_API_KEY, or RPC_HTTP_URL\",\n                name = chain.name\n            )\n        })?;\n\n    // Mask potential API key in URL for logging (key is typically the last path segment)\n    let masked_url = if let Some((base, key)) = rpc_http_url.rsplit_once('/') {\n        if key.is_empty() {\n            rpc_http_url.clone()\n        } else {\n            let masked_key = mask_api_key(key);\n            format!(\"{base}/{masked_key}\")\n        }\n    } else {\n        // URL without path separator - mask entirely as it may contain credentials\n        mask_api_key(&rpc_http_url)\n    };\n","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/cli/src/blockchain/sync.rs#L60-L96","documentation":"Thrown by run_sync_dex when no HTTP RPC endpoint can be resolved for the chain from the --rpc-url argument, the Infura provider via INFURA_API_KEY, or the RPC_HTTP_URL environment variable. Syncing requires an RPC endpoint to read PoolCreated logs and cannot start without one.","triggerScenarios":"run_blockchain_command -> run_sync_dex with rpc_url=None while check_infura_rpc_provider(chain.name) returns None and std::env::var(\"RPC_HTTP_URL\") is unset or errors.","commonSituations":"Missing --rpc-url flag; INFURA_API_KEY not set in the environment (CI, containers, cron); chain not covered by the Infura provider mapping; RPC_HTTP_URL defined in a shell profile not loaded by the service manager.","solutions":["Pass --rpc-url <https://...> explicitly for the chain.","Export INFURA_API_KEY so the Infura provider lookup succeeds.","Set RPC_HTTP_URL to a reachable HTTP(S) RPC endpoint.","For systemd/docker, ensure the env var is passed into the service environment."],"exampleFix":"// before\nnautilusctl blockchain sync-dex --chain base --dex aerodrome\n// error: no RPC URL\n// after\nnautilusctl blockchain sync-dex --chain base --dex aerodrome --rpc-url https://mainnet.base.org","handlingStrategy":"validation","validationCode":"let has_rpc = rpc_url.is_some()\n    || std::env::var(\"INFURA_API_KEY\").is_ok()\n    || std::env::var(\"RPC_HTTP_URL\").is_ok();\nif !has_rpc {\n    eprintln!(\"provide --rpc-url, INFURA_API_KEY, or RPC_HTTP_URL for {}\", chain.name);\n    std::process::exit(2);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Prefer explicit --rpc-url in automation over env-dependent resolution.","Verify INFURA_API_KEY is set in every environment (CI secrets, cron, containers).","Keep RPC_HTTP_URL in a loaded .env for local development.","Check env propagation for sudo/docker/systemd which can strip environment variables."],"tags":["cli","configuration","rpc","network"],"backgroundTag":"missing-env-var","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}