{"record":{"id":"077fc407f4b3ce69","repo":"nautechsystems/nautilus_trader","slug":"hypersync-parsing-of-burn-event-is-not-defined-in","errorCode":null,"errorMessage":"HyperSync parsing of burn event is not defined in this dex: {}:{}","messagePattern":"HyperSync parsing of burn event is not defined in this dex: (.+?):(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/exchanges/extended.rs","lineNumber":327,"sourceCode":"        } else {\n            anyhow::bail!(\n                \"HyperSync parsing of mint event is not defined in this dex: {}:{}\",\n                self.dex.chain,\n                self.dex.name\n            )\n        }\n    }\n\n    /// Parses a burn event from a HyperSync log.\n    ///\n    /// # Errors\n    ///\n    /// Returns an error if the DEX does not have a HyperSync burn event parser defined or if parsing fails.\n    pub fn parse_burn_event_hypersync(&self, log: &HypersyncLog) -> anyhow::Result<BurnEvent> {\n        if let Some(parse_fn) = &self.parse_burn_event_hypersync_fn {\n            parse_fn(self.dex.clone(), log)\n        } else {\n            anyhow::bail!(\n                \"HyperSync parsing of burn event is not defined in this dex: {}:{}\",\n                self.dex.chain,\n                self.dex.name\n            )\n        }\n    }\n\n    /// Parses an initialize event from a HyperSync log.\n    ///\n    /// # Errors\n    ///\n    /// Returns an error if the DEX does not have a HyperSync initialize event parser defined or if parsing fails.\n    pub fn parse_initialize_event_hypersync(\n        &self,\n        log: &HypersyncLog,\n    ) -> anyhow::Result<InitializeEvent> {\n        if let Some(parse_fn) = &self.parse_initialize_event_hypersync_fn {\n            parse_fn(self.dex.clone(), log)","sourceCodeStart":309,"sourceCodeEnd":345,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/exchanges/extended.rs#L309-L345","documentation":"This error is raised by parse_burn_event_hypersync on a DEX adapter when no HyperSync-specific parser function (parse_burn_event_hypersync_fn) has been registered for that DEX. The library models DEX event parsing as optional per-DEX, per-transport capabilities, so calling a parse method whose parser slot is None bails with the DEX chain and name embedded. It signals a capability gap in the adapter configuration, not a malformed log.","triggerScenarios":"Calling dex.parse_burn_event_hypersync(log) for a DEX whose builder never set a burn-event HyperSync parser, typically when processing HyperSync log streams via send_dex_event_log for a DEX that only defines RPC parsers or omits burn support entirely.","commonSituations":"Routing all chain logs to every registered DEX instead of filtering by supported events; adding a new DEX implementation that forgot to wire the HyperSync burn parser; using a DEX variant (e.g. a fork) that simply does not emit or support burn events; version drift where a DEX registration was updated on RPC but not HyperSync.","solutions":["Register a HyperSync burn event parser for this DEX when constructing it (set parse_burn_event_hypersync_fn in the DEX builder/definition).","Check whether the DEX supports burn events at all; if not, filter burn-event logs out before dispatching to this DEX's parse_burn_event_hypersync.","Inspect the log's address/topics to confirm it belongs to this DEX; a misrouted log from another DEX will hit a DEX with no parser.","Fall back to the RPC parser (parse_burn_event_rpc) if the DEX defines one and RPC data is available."],"exampleFix":"// before\nlet burn = dex.parse_burn_event_hypersync(&log)?; // panics into bail for unsupported dex\n// after\nif dex.supports_burn_event_hypersync() {\n    let burn = dex.parse_burn_event_hypersync(&log)?;\n} else {\n    tracing::debug!(dex = %dex.name(), \"skipping burn log: no HyperSync parser\");\n}","handlingStrategy":"try-catch","validationCode":"fn dex_supports_burn_hypersync(dex: &Dex) -> bool { dex.parse_burn_event_hypersync_fn.is_some() } // or expose a supports_* predicate and check before calling","typeGuard":"fn has_hypersync_burn_parser(dex: &Dex) -> bool { dex.parse_burn_event_hypersync_fn.is_some() }","tryCatchPattern":"match dex.parse_burn_event_hypersync(&log) {\n    Ok(evt) => handle(evt),\n    Err(e) if e.to_string().contains(\"not defined in this dex\") => tracing::debug!(\"dex lacks HyperSync burn parser, skipping\"),\n    Err(e) => return Err(e),\n}","preventionTips":["Register every HyperSync event parser a DEX supports at construction time.","Filter HyperSync log topics by each DEX's declared supported events before dispatch.","Add unit tests asserting each DEX's parser set matches its event subscription.","Prefer an explicit supports_event() check over probing with parse calls."],"tags":["dex","hypersync","blockchain","event-parsing","rust"],"backgroundTag":"unsupported-operation","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"}