{"record":{"id":"fabcb0a1f7394533","repo":"nautechsystems/nautilus_trader","slug":"rpc-position-has-invalid-tick-range-fo","errorCode":null,"errorMessage":"RPC position {} has invalid tick range [{}, {}) for spacing {tick_spacing}","messagePattern":"RPC position (.+?) has invalid tick range \\[(.+?), (.+?)\\) for spacing (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/data/core.rs","lineNumber":2173,"sourceCode":"                    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\n                || position.tick_upper % tick_spacing != 0\n            {\n                anyhow::bail!(\n                    \"RPC position {} has invalid tick range [{}, {}) for spacing {tick_spacing}\",\n                    position.owner,\n                    position.tick_lower,\n                    position.tick_upper\n                );\n            }\n\n            if position.liquidity == 0 {\n                continue;\n            }\n\n            let liquidity_net = i128::try_from(position.liquidity).with_context(|| {\n                format!(\n                    \"RPC position {} liquidity exceeds i128::MAX\",\n                    position.owner\n                )\n            })?;\n            let lower = derived_ticks.entry(position.tick_lower).or_default();","sourceCodeStart":2155,"sourceCodeEnd":2191,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/data/core.rs#L2155-L2191","documentation":"Sanity check on each position in the RPC snapshot: tick_lower must be strictly below tick_upper, within MIN_TICK..MAX_TICK, and aligned to the pool's tick spacing; violations mean the position data is corrupt or belongs to a different pool configuration.","triggerScenarios":"Thrown at crates/adapters/blockchain/src/data/core.rs:2173 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Re-fetch position data from the RPC node","Confirm the pool's tick spacing parameter matches the snapshot source"],"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"}