nautechsystems/nautilus_trader · error
Pool state header changed before signing
Error message
Pool state header changed before signing
What it means
Pre-sign anchor re-verification: the profiler watermark block re-read at signing time differs from the one the swap quote was anchored to, meaning pool state advanced (or reorged) and the quote is stale.
Source
Thrown at crates/adapters/blockchain/src/execution/client.rs:2693
}
}
}
async fn verify_swap_anchors_before_sign(
&self,
anchors: &SwapQuoteAnchors,
) -> anyhow::Result<Vec<ExecutionVerificationDecision>> {
let checkpoint = required_verification(
self.verification.verify_checkpoint().await,
"pre-sign checkpoint reread",
)?;
let watermark = required_verification(
self.verification
.verify_block(anchors.watermark.number)
.await,
"pre-sign profiler watermark reread",
)?;
anyhow::ensure!(
watermark.value == anchors.watermark,
"Pool state header changed before signing"
);
let ancestry = required_verification(
self.verification
.verify_header_window(watermark.value, anchors.state.number)
.await,
"pre-sign profiler ancestry reread",
)?;
if let Some(last) = ancestry.value.last() {
anyhow::ensure!(
*last == anchors.state,
"Swap decision header changed in the pre-sign ancestry reread"
);
} else {
anyhow::ensure!(
watermark.value == anchors.state,View on GitHub (pinned to 18893faf8b)
Solutions
- Abort and retry the swap with refreshed anchors
- Ensure the signing step happens promptly after quoting
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at crates/adapters/blockchain/src/execution/client.rs:2693 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/e858b42e07f9462c.
Report an issue: GitHub.