{"record":{"id":"af6e27d2e4407d13","repo":"nautechsystems/nautilus_trader","slug":"no-registered-uniswap-v3-deployment-for-chain","errorCode":null,"errorMessage":"No registered Uniswap V3 deployment for chain {}","messagePattern":"No registered Uniswap V3 deployment for chain (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/execution/client.rs","lineNumber":407,"sourceCode":"            );\n            Ok(*addresses.iter().next().expect(\"singleton role address\"))\n        };\n\n        let configured_routers = routers.iter().copied().collect::<HashSet<_>>();\n        anyhow::ensure!(\n            role_addresses(BlockchainContractRole::Router)? == configured_routers,\n            \"Deployment manifest router set does not match `router_addresses`\"\n        );\n        anyhow::ensure!(\n            singleton(BlockchainContractRole::WrappedNative, \"wrapped native\")? == weth,\n            \"Deployment manifest wrapped native contract does not match `weth_address`\"\n        );\n        let factory = singleton(BlockchainContractRole::Factory, \"factory\")?;\n        let registered_factory =\n            crate::exchanges::get_dex_extended(config.chain.name, &DexType::UniswapV3)\n                .map(|dex| dex.factory)\n                .ok_or_else(|| {\n                    anyhow::anyhow!(\n                        \"No registered Uniswap V3 deployment for chain {}\",\n                        config.chain.name\n                    )\n                })?;\n        anyhow::ensure!(\n            factory == registered_factory,\n            \"Deployment manifest factory does not match the registered Uniswap V3 factory\"\n        );\n        let quote_contract = singleton(BlockchainContractRole::Quote, \"quote\")?;\n\n        let mut token_decimals = HashMap::new();\n\n        for token in &manifest.tokens {\n            let address = Address::from_str(&token.address)\n                .map_err(|_| anyhow::anyhow!(\"Deployment manifest token address is invalid\"))?;\n            anyhow::ensure!(\n                token_decimals.insert(address, token.decimals).is_none(),\n                \"Deployment manifest contains a duplicate token identity\"","sourceCodeStart":389,"sourceCodeEnd":425,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/execution/client.rs#L389-L425","documentation":"The validator looks up the registered Uniswap V3 deployment for the configured chain via `crate::exchanges::get_dex_extended(config.chain.name, &DexType::UniswapV3)` and maps `None` to this error. It means the chain named in the config has no known Uniswap V3 deployment registered in the library's exchange registry, so there is no factory to validate the manifest against.","triggerScenarios":"Running `validate_manifest_contracts` with a `config.chain.name` that is misspelled, unsupported, or absent from the exchange registry — `get_dex_extended` returns `None` and `ok_or_else` produces this error.","commonSituations":"Typo in the chain name in config (e.g. 'etherum'); using a brand-new or private L2 chain the adapter has not registered; a version of the library that predates support for the target chain; using a chain alias the registry does not recognize.","solutions":["Correct `config.chain.name` to a supported chain name registered in the exchange registry","Upgrade the library/adapters crate to a version that registers Uniswap V3 support for the target chain","Register or extend the DEX deployment entry for the chain if the registry is locally extensible"],"exampleFix":"// before\nchain.name = \"etherum\"\n// after\nchain.name = \"ethereum\"","handlingStrategy":"validation","validationCode":"// Before constructing the client, check registry support:\nassert!(crate::exchanges::get_dex_extended(config.chain.name, &DexType::UniswapV3).is_some(),\n        \"chain {} has no registered Uniswap V3 deployment\", config.chain.name);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep an allowlist of supported chain names and validate config.chain.name against it at startup","Upgrade the adapters crate when adding new chains","Use constants/enums for chain names instead of free-form strings"],"tags":["rust","config","uniswap-v3","chain-support"],"backgroundTag":"resource-not-found","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}