{"record":{"id":"fc2f5b82676a6784","repo":"nautechsystems/nautilus_trader","slug":"unknown-dex-name-dex-name","errorCode":null,"errorMessage":"Unknown dex_name: {dex_name}","messagePattern":"Unknown dex_name: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/cache/database.rs","lineNumber":2539,"sourceCode":"                .load_pool_ticks_for_snapshot(\n                    chain_id,\n                    pool_identifier,\n                    block,\n                    transaction_index,\n                    log_index,\n                )\n                .await?;\n\n            let dex_name = row\n                .try_get::<Option<String>, _>(\"dex_name\")?\n                .ok_or_else(|| {\n                    anyhow::anyhow!(\"Missing dex_name for pool snapshot {}\", pool_identifier)\n                })?;\n            let chain = Chain::from_chain_id(chain_id)\n                .ok_or_else(|| anyhow::anyhow!(\"Unknown chain_id: {chain_id}\"))?;\n\n            let dex_type = DexType::from_dex_name(&dex_name)\n                .ok_or_else(|| anyhow::anyhow!(\"Unknown dex_name: {dex_name}\"))?;\n\n            let dex_extended = crate::exchanges::get_dex_extended(chain.name, &dex_type)\n                .ok_or_else(|| {\n                    anyhow::anyhow!(\"No DEX extended found for {} on {}\", dex_name, chain.name)\n                })?;\n\n            let instrument_id =\n                Pool::create_instrument_id(chain.name, &dex_extended.dex, pool_identifier.as_ref());\n\n            Ok(Some(PoolSnapshot::new(\n                instrument_id,\n                state,\n                positions,\n                ticks,\n                analytics,\n                block_position,\n                timestamp, // ts_event\n                timestamp, // ts_init (same block timestamp)","sourceCodeStart":2521,"sourceCodeEnd":2557,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/cache/database.rs#L2521-L2557","documentation":"The row's `dex_name` string is present but is not recognized by `DexType::from_dex_name`, so no `DexType` can be constructed. The library maintains a fixed mapping of known DEX names; unknown values (new DEXes, renamed DEXes, casing differences) are rejected.","triggerScenarios":"Loading a snapshot whose `dex_name` is misspelled, has unexpected casing/whitespace, or names a DEX added after this build (e.g. `uniswap_v4` read by a binary that only knows v2/v3).","commonSituations":"Version skew between writer and reader binaries; a new DEX integration added on one branch but not another; manual row inserts with informal names like \"uni v3\".","solutions":["Check the stored dex_name against the known DexType names and fix the row if it was written incorrectly.","Upgrade the adapter so its DexType mapping includes the new DEX.","Normalize dex_name values (trim/lowercase) in the writer before persisting.","Delete stale snapshots for unsupported DEXes if they should not be loaded."],"exampleFix":"// before: informal name stored\nINSERT ... VALUES ('uni v3');\n// after: canonical enum name\nINSERT ... VALUES ('uniswap_v3');","handlingStrategy":"validation","validationCode":"fn is_known_dex_name(name: &str) -> bool {\n    DexType::from_dex_name(name).is_some()\n}\n// run before load for the target pool's stored dex_name","typeGuard":"fn known_dex(name: &str) -> Option<DexType> {\n    DexType::from_dex_name(name.trim())\n}","tryCatchPattern":"match load_snapshot(...).await {\n    Err(e) if e.to_string().contains(\"Unknown dex_name\") => {\n        tracing::error!(\"dex_name not in registry; upgrade adapter or fix row\");\n        Err(e)\n    }\n    other => other,\n}","preventionTips":["Validate dex_name against DexType before any INSERT into snapshots.","Trim/normalize DEX names at write time (case, whitespace).","Add new DEXes to the registry before enabling their snapshot writers."],"tags":["configuration","enum-parsing","version-mismatch","dex-registry"],"backgroundTag":"invalid-enum-value","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"}