nautechsystems/nautilus_trader · error
Failed to get dex extended
Error message
Failed to get dex extended
What it means
When converting a blockchain BurnEvent into a data event, the client looks up the pool's DEX via `get_dex_extended(chain, dex)` which returns `Option` — it panics with "Failed to get dex extended" when the DEX is not registered for the chain. Only Ethereum, Base, Arbitrum, and BSC have DEX extended maps, and only registered DEX types resolve.
Source
Thrown at crates/adapters/blockchain/src/data/client.rs:407
log::error!("Error processing pool swap event: {e}");
None
}
},
Err(e) => {
log::error!(
"Failed to get pool {} with error {:?}",
swap_event.pool_identifier,
e
);
None
}
}
}
BlockchainMessage::BurnEvent(burn_event) => {
match core_client.get_pool(&burn_event.pool_identifier) {
Ok(pool) => {
let dex_extended = get_dex_extended(core_client.chain.name, &pool.dex.name)
.expect("Failed to get dex extended");
match core_client.process_pool_burn_event(&burn_event, pool, dex_extended) {
Ok(update) => {
Some(DataEvent::DeFi(DefiData::PoolLiquidityUpdate(update)))
}
Err(e) => {
log::error!("Error processing pool burn event: {e}");
None
}
}
}
Err(e) => {
log::error!(
"Failed to get pool {} with error {:?}",
burn_event.pool_identifier,
e
);
NoneView on GitHub (pinned to 18893faf8b)
Solutions
- Restrict the event stream to DEX_SUPPORTED_CHAINS (Ethereum, Base, Arbitrum, BSC).
- Run the DEX sync (`sync-dex`) for the chain so DEX registrations exist before consuming events.
- Register/patch the missing DEX type in the chain's DEX_EXTENDED_MAP, or upgrade to a version that includes it.
- Guard the call: skip or log-and-continue when `get_dex_extended` returns `None` instead of panicking.
Example fix
// before
let dex_extended = get_dex_extended(core_client.chain.name, &pool.dex.name)
.expect("Failed to get dex extended");
// after
let Some(dex_extended) = get_dex_extended(core_client.chain.name, &pool.dex.name) else {
log::warn!("unregistered dex {:?} on {:?}, skipping burn event", pool.dex.name, core_client.chain.name);
return None;
}; Defensive patterns
Strategy: type-guard
Validate before calling
if !DEX_SUPPORTED_CHAINS.contains(&core_client.chain.name)
|| get_dex_extended(core_client.chain.name, &pool.dex.name).is_none() {
// skip or log: burn event cannot be processed for this dex/chain
} Type guard
fn dex_known(chain: Blockchain, dex: &DexType) -> bool {
get_dex_extended(chain, dex).is_some()
} Try / catch
// Rust: avoid expect; handle Option explicitly
match get_dex_extended(core_client.chain.name, &pool.dex.name) {
Some(dex_extended) => { /* process burn event */ }
None => log::warn!("skipping burn event: dex {:?} not registered on {:?}", pool.dex.name, core_client.chain.name),
} Prevention
- Only subscribe to event streams on chains in DEX_SUPPORTED_CHAINS.
- Run `sync-dex` for a chain before consuming its pool events.
- Upgrade the adapter so newly deployed DEXes are registered before replaying events.
- Filter incoming events by known DEX types before processing.
When it happens
Trigger: Processing a `BlockchainMessage::BurnEvent` whose pool's DEX is absent from the chain's DEX_EXTENDED_MAP, or whose chain is not one of the four DEX-supported chains (e.g. Polygon), or the DEX type exists but has no extended registration.
Common situations: Subscribing to pool events on an unsupported chain; a newly deployed/unknown DEX (e.g. a new Uniswap fork) not yet added to the DEX maps; event streams replayed for chains whose DEX data was never synced via `sync-dex`.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- in-flight mutex poisoned
- wallet balance mutex poisoned
- Unsupported blockchain {blockchain} for RPC connection
- DEX {dex_id} is not registered in the data client
- Dex {dex_id} doesn't exist for chain {}
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/f238ae22c2c7fe08.
Report an issue: GitHub.