{"record":{"id":"c0fad67d41701df1","repo":"nautechsystems/nautilus_trader","slug":"empty-pre-sign-ancestry-does-not-end-at-the-swap-d","errorCode":null,"errorMessage":"Empty pre-sign ancestry does not end at the swap decision header","messagePattern":"Empty pre-sign ancestry does not end at the swap decision header","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/execution/client.rs","lineNumber":2710,"sourceCode":"        )?;\n        anyhow::ensure!(\n            watermark.value == anchors.watermark,\n            \"Pool state header changed before signing\"\n        );\n        let ancestry = required_verification(\n            self.verification\n                .verify_header_window(watermark.value, anchors.state.number)\n                .await,\n            \"pre-sign profiler ancestry reread\",\n        )?;\n\n        if let Some(last) = ancestry.value.last() {\n            anyhow::ensure!(\n                *last == anchors.state,\n                \"Swap decision header changed in the pre-sign ancestry reread\"\n            );\n        } else {\n            anyhow::ensure!(\n                watermark.value == anchors.state,\n                \"Empty pre-sign ancestry does not end at the swap decision header\"\n            );\n        }\n        let quote = match anchors.quote_kind {\n            SwapQuoteKind::ExactInput(amount_in) => required_verification(\n                self.verification\n                    .verify_quote_exact_input_single(\n                        &anchors.quote_contract,\n                        anchors.token_in,\n                        anchors.token_out,\n                        amount_in,\n                        anchors.fee,\n                        anchors.state.number,\n                    )\n                    .await,\n                \"pre-sign exact-input quote reread\",\n            )?,","sourceCodeStart":2692,"sourceCodeEnd":2728,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/execution/client.rs#L2692-L2728","documentation":"Pre-sign verification guard: the re-read header ancestry chain no longer terminates at the previously anchored swap-decision block header, meaning chain state moved under the pending decision; signing is aborted.","triggerScenarios":"Thrown at crates/adapters/blockchain/src/execution/client.rs:2710 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry the pre-sign verification","Check block data availability for the watermark-to-decision window"],"exampleFix":null,"handlingStrategy":"retry","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"}