{"record":{"id":"d7258ce443d6be16","repo":"nautechsystems/nautilus_trader","slug":"rpc-tick-tick-value-topology-mismatch-expected","errorCode":null,"errorMessage":"RPC tick {tick_value} topology mismatch: expected gross={} net={}, received gross={} net={} initialized={}","messagePattern":"RPC tick (.+?) topology mismatch: expected gross=(.+?) net=(.+?), received gross=(.+?) net=(.+?) initialized=(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/data/core.rs","lineNumber":2152,"sourceCode":"                expected_tick_values.len(),\n                actual_ticks.len()\n            );\n        }\n\n        for tick_value in expected_tick_values {\n            let expected_tick = profiler\n                .get_tick(tick_value)\n                .with_context(|| format!(\"missing replay tick {tick_value}\"))?;\n            let actual_tick = actual_ticks\n                .get(&tick_value)\n                .with_context(|| format!(\"RPC snapshot omitted tick {tick_value}\"))?;\n\n            if !actual_tick.initialized\n                || actual_tick.liquidity_gross == 0\n                || actual_tick.liquidity_gross != expected_tick.liquidity_gross\n                || actual_tick.liquidity_net != expected_tick.liquidity_net\n            {\n                anyhow::bail!(\n                    \"RPC tick {tick_value} topology mismatch: expected gross={} net={}, received gross={} net={} initialized={}\",\n                    expected_tick.liquidity_gross,\n                    expected_tick.liquidity_net,\n                    actual_tick.liquidity_gross,\n                    actual_tick.liquidity_net,\n                    actual_tick.initialized\n                );\n            }\n        }\n\n        let mut derived_ticks: AHashMap<i32, (u128, i128)> = AHashMap::new();\n        let mut active_liquidity = 0_u128;\n\n        for position in &snapshot.positions {\n            if position.tick_lower >= position.tick_upper\n                || position.tick_lower < PoolTick::MIN_TICK\n                || position.tick_upper > PoolTick::MAX_TICK\n                || position.tick_lower % tick_spacing != 0","sourceCodeStart":2134,"sourceCodeEnd":2170,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/data/core.rs#L2134-L2170","documentation":"Per-tick comparison in validate_rpc_snapshot_topology: an expected tick's liquidity_gross, liquidity_net, or initialized flag disagrees with the RPC snapshot, meaning the RPC node's tick state diverges from the HyperSync-derived expectation.","triggerScenarios":"Thrown at crates/adapters/blockchain/src/data/core.rs:2152 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Re-fetch the snapshot from a healthy RPC node","Re-run HyperSync ingestion to refresh the expected tick state"],"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"}