{"record":{"id":"dae866804d14c510","repo":"nautechsystems/nautilus_trader","slug":"cannot-parse-kraken-futures-instrument-symbol","errorCode":null,"errorMessage":"Cannot parse Kraken Futures instrument '{symbol}': {field} {value} requires precision {precision}, but this build supports at most {FIXED_PRECISION}","messagePattern":"Cannot parse Kraken Futures instrument '(.+?)': (.+?) (.+?) requires precision (.+?), but this build supports at most (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/kraken/src/common/parse.rs","lineNumber":465,"sourceCode":"        .ts_init(ts_init)\n        .build()\n        .unwrap();\n\n    Ok(InstrumentAny::CryptoPerpetual(instrument))\n}\n\nfn check_futures_precision(\n    symbol: &str,\n    field: &str,\n    value: impl Display,\n    precision: u32,\n) -> anyhow::Result<()> {\n    if precision <= u32::from(FIXED_PRECISION) {\n        return Ok(());\n    }\n\n    #[cfg(feature = \"high-precision\")]\n    anyhow::bail!(\n        \"Cannot parse Kraken Futures instrument '{symbol}': {field} {value} requires precision \\\n         {precision}, but this build supports at most {FIXED_PRECISION}\"\n    );\n\n    #[cfg(not(feature = \"high-precision\"))]\n    anyhow::bail!(\n        \"Cannot parse Kraken Futures instrument '{symbol}': {field} {value} requires precision \\\n         {precision}, but this build supports at most {FIXED_PRECISION}; enable the \\\n         'high-precision' Cargo feature and rebuild\"\n    );\n}\n\nfn parse_price(value: &str, field: &str) -> anyhow::Result<Price> {\n    Price::from_str(value).map_err(|e| anyhow::anyhow!(\"Failed to parse {field}='{value}': {e}\"))\n}\n\nfn parse_quantity(value: &str, field: &str) -> anyhow::Result<Quantity> {\n    Quantity::from_str(value).map_err(|e| anyhow::anyhow!(\"Failed to parse {field}='{value}': {e}\"))","sourceCodeStart":447,"sourceCodeEnd":483,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/kraken/src/common/parse.rs#L447-L483","documentation":"When parsing a Kraken Futures instrument, a price/size precision value exceeded FIXED_PRECISION, the maximum decimal precision supported by this build. The check_futures_precision helper bails early so the instrument is never created with values that would lose accuracy. With the 'high-precision' Cargo feature enabled, a different variant of this same message is emitted (see companion error).","triggerScenarios":"parse_futures_instrument -> check_futures_precision is called with a symbol whose Kraken Futures tick_size, contract_value_tradeable, or similar field has more decimal places than FIXED_PRECISION, and the crate is compiled WITHOUT the 'high-precision' feature (this arm is #[cfg(feature = \"high-precision\")], so with high-precision this exact message fires with no rebuild hint).","commonSituations":"Subscribing to a Kraken Futures market with unusually fine tick sizes (e.g. highly quoted small-cap perpetuals); running a default build that lacks the high-precision feature while trading instruments needing extra decimals.","solutions":["Rebuild the crate with the high-precision Cargo feature: cargo build --features kraken/high-precision (or add it under crate features).","If high precision is not needed, exclude the offending symbol from the instrument filter so it is never parsed.","Verify the instrument's precision on Kraken's /instruments endpoint to confirm the requirement before rebuilding."],"exampleFix":"// before (Cargo.toml)\nnautilus-adapters = { path = \"crates/adapters/kraken\" }\n// after\nnautilus-adapters = { path = \"crates/adapters/kraken\", features = [\"high-precision\"] }","handlingStrategy":"validation","validationCode":"// Before subscribing, check the instrument's tick size decimals\nlet decimals = tick_size_str.split('.').nth(1).map(|f| f.len()).unwrap_or(0);\nif decimals > FIXED_PRECISION {\n    eprintln!(\"skip {}: needs precision {} > {}\", symbol, decimals, FIXED_PRECISION);\n}","typeGuard":null,"tryCatchPattern":"match parse_futures_instrument(...) {\n    Err(e) if e.to_string().contains(\"requires precision\") => skip_symbol(symbol),\n    Err(e) => return Err(e),\n    Ok(inst) => register(inst),\n}","preventionTips":["Enable the 'high-precision' feature in production Kraken Futures builds.","Filter instrument lists by max decimal precision before parsing.","Pin and review Kraken /instruments data when adding new symbols."],"tags":["precision","kraken-futures","instrument-parsing","cargo-feature"],"backgroundTag":"value-out-of-range","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"}