nautechsystems/nautilus_trader · error

RPC active liquidity mismatch: positions sum to {active_liqu

Error message

RPC active liquidity mismatch: positions sum to {active_liquidity}, global state reports {}

What it means

Cross-check in validate_rpc_snapshot_topology: summing the liquidity of positions active at the current tick must equal the pool's global in-range liquidity; a mismatch means positions and global state were captured at different blocks or one source is incomplete.

Source

Thrown at crates/adapters/blockchain/src/data/core.rs:2220

                .0
                .checked_add(position.liquidity)
                .context("upper tick liquidity gross overflow")?;
            upper.1 = upper
                .1
                .checked_sub(liquidity_net)
                .context("upper tick liquidity net underflow")?;

            if position.tick_lower <= snapshot.state.current_tick
                && snapshot.state.current_tick < position.tick_upper
            {
                active_liquidity = active_liquidity
                    .checked_add(position.liquidity)
                    .context("active position liquidity overflow")?;
            }
        }

        if active_liquidity != snapshot.state.liquidity {
            anyhow::bail!(
                "RPC active liquidity mismatch: positions sum to {active_liquidity}, global state reports {}",
                snapshot.state.liquidity
            );
        }

        if derived_ticks.len() != actual_ticks.len() {
            anyhow::bail!(
                "RPC tick topology does not match positions: derived {} ticks, received {}",
                derived_ticks.len(),
                actual_ticks.len()
            );
        }

        for (tick_value, (liquidity_gross, liquidity_net)) in derived_ticks {
            let actual_tick = actual_ticks
                .get(&tick_value)
                .with_context(|| format!("RPC snapshot omitted position boundary {tick_value}"))?;

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Re-fetch the snapshot atomically (same block) for positions and global state
  2. Re-sync pool data so both sources agree
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/adapters/blockchain/src/data/core.rs:2220 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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