{"record":{"id":"2aa110307852de13","repo":"nautechsystems/nautilus_trader","slug":"rpc-active-liquidity-mismatch-positions-sum-to-a","errorCode":null,"errorMessage":"RPC active liquidity mismatch: positions sum to {active_liquidity}, global state reports {}","messagePattern":"RPC active liquidity mismatch: positions sum to (.+?), global state reports (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/data/core.rs","lineNumber":2220,"sourceCode":"                .0\n                .checked_add(position.liquidity)\n                .context(\"upper tick liquidity gross overflow\")?;\n            upper.1 = upper\n                .1\n                .checked_sub(liquidity_net)\n                .context(\"upper tick liquidity net underflow\")?;\n\n            if position.tick_lower <= snapshot.state.current_tick\n                && snapshot.state.current_tick < position.tick_upper\n            {\n                active_liquidity = active_liquidity\n                    .checked_add(position.liquidity)\n                    .context(\"active position liquidity overflow\")?;\n            }\n        }\n\n        if active_liquidity != snapshot.state.liquidity {\n            anyhow::bail!(\n                \"RPC active liquidity mismatch: positions sum to {active_liquidity}, global state reports {}\",\n                snapshot.state.liquidity\n            );\n        }\n\n        if derived_ticks.len() != actual_ticks.len() {\n            anyhow::bail!(\n                \"RPC tick topology does not match positions: derived {} ticks, received {}\",\n                derived_ticks.len(),\n                actual_ticks.len()\n            );\n        }\n\n        for (tick_value, (liquidity_gross, liquidity_net)) in derived_ticks {\n            let actual_tick = actual_ticks\n                .get(&tick_value)\n                .with_context(|| format!(\"RPC snapshot omitted position boundary {tick_value}\"))?;\n","sourceCodeStart":2202,"sourceCodeEnd":2238,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/data/core.rs#L2202-L2238","documentation":"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.","triggerScenarios":"Thrown at crates/adapters/blockchain/src/data/core.rs:2220 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Re-fetch the snapshot atomically (same block) for positions and global state","Re-sync pool data so both sources agree"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}