{"record":{"id":"b1e257f3c3645a2b","repo":"nautechsystems/nautilus_trader","slug":"rpc-tick-topology-does-not-match-positions-derive","errorCode":null,"errorMessage":"RPC tick topology does not match positions: derived {} ticks, received {}","messagePattern":"RPC tick topology does not match positions: derived (.+?) ticks, received (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/data/core.rs","lineNumber":2227,"sourceCode":"\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\n            if actual_tick.liquidity_gross != liquidity_gross\n                || actual_tick.liquidity_net != liquidity_net\n            {\n                anyhow::bail!(\n                    \"RPC tick {tick_value} does not match positions: derived gross={liquidity_gross} net={liquidity_net}, received gross={} net={}\",\n                    actual_tick.liquidity_gross,\n                    actual_tick.liquidity_net","sourceCodeStart":2209,"sourceCodeEnd":2245,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/data/core.rs#L2209-L2245","documentation":"Derived-topology check in validate_rpc_snapshot_topology: replaying all snapshot positions must reproduce exactly the tick set the RPC returned; extra or missing derived ticks mean the position list and tick data are inconsistent.","triggerScenarios":"Thrown at crates/adapters/blockchain/src/data/core.rs:2227 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Re-fetch the snapshot so positions and ticks come from the same block","Re-sync HyperSync data for the pool"],"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-14T00:17:10.932Z"}