nautechsystems/nautilus_trader · error

RPC parsing of burn event is not defined in this dex: {}:{}

Error message

RPC parsing of burn event is not defined in this dex: {}:{}

What it means

Raised by parse_burn_event_rpc when no RPC burn-event parser (parse_burn_event_rpc_fn) is registered on the DEX. Burn events represent liquidity removal; when the parser slot is None the method bails with chain:name. Like the other parser-gap errors, it is a configuration/capability signal rather than malformed input.

Source

Thrown at crates/adapters/blockchain/src/exchanges/extended.rs:492

        } else {
            anyhow::bail!(
                "RPC parsing of mint event is not defined in this dex: {}:{}",
                self.dex.chain,
                self.dex.name
            )
        }
    }

    /// Parses a burn event from an RPC log.
    ///
    /// # Errors
    ///
    /// Returns an error if the DEX does not have an RPC burn event parser defined or if parsing fails.
    pub fn parse_burn_event_rpc(&self, log: &RpcLog) -> anyhow::Result<BurnEvent> {
        if let Some(parse_fn) = &self.parse_burn_event_rpc_fn {
            parse_fn(self.dex.clone(), log)
        } else {
            anyhow::bail!(
                "RPC parsing of burn event is not defined in this dex: {}:{}",
                self.dex.chain,
                self.dex.name
            )
        }
    }

    /// Parses an initialize event from an RPC log.
    ///
    /// # Errors
    ///
    /// Returns an error if the DEX does not have an RPC initialize event parser defined or if parsing fails.
    pub fn parse_initialize_event_rpc(&self, log: &RpcLog) -> anyhow::Result<InitializeEvent> {
        if let Some(parse_fn) = &self.parse_initialize_event_rpc_fn {
            parse_fn(self.dex.clone(), log)
        } else {
            anyhow::bail!(
                "RPC parsing of initialize event is not defined in this dex: {}:{}",

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Register parse_burn_event_rpc_fn for the DEX at construction time.
  2. Use the DEX's HyperSync burn parser (parse_burn_event_hypersync) when RPC parsing is unsupported.
  3. Filter burn topics away from DEXs lacking RPC support before dispatch.
  4. Confirm the log's emitting contract maps to this DEX.
Defensive patterns

Strategy: try-catch

Validate before calling

if !dex_supports(dex, DexEvent::BurnRpc) { return Ok(()); }

Type guard

fn has_rpc_burn_parser(dex: &Dex) -> bool { dex.parse_burn_event_rpc_fn.is_some() }

Try / catch

match dex.parse_burn_event_rpc(&log) {
    Ok(evt) => handle_burn(evt),
    Err(e) if e.to_string().contains("not defined in this dex") => tracing::debug!("RPC burn parsing unsupported on {}", dex.name()),
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: Calling dex.parse_burn_event_rpc(&log) on RPC liquidity-removal logs for a DEX that never registered an RPC burn parser.

Common situations: RPC-based liquidity tracking on HyperSync-only DEX adapters; incomplete new-DEX registration; forks with divergent Burn event signatures left unimplemented over RPC.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/8ab966a4101d08de. Report an issue: GitHub.