nautechsystems/nautilus_trader · critical
Execution intent {} has no persisted signed transaction byte
Error message
Execution intent {} has no persisted signed transaction bytes What it means
During reconciliation of unresolved executions at connect time, the adapter asserts that a debug-level invariant holds: any execution intent being reconciled must have its signed transaction bytes persisted. A missing payload means the persistence layer lost or never wrote the signed tx before the intent was left unresolved, so reconnect recovery cannot proceed safely.
Source
Thrown at crates/adapters/blockchain/src/execution/client.rs:1258
.insert(authenticated_hash, raw_transaction.clone())
.is_none(),
"Execution intent {} has duplicate authenticated transaction hash {}",
intent.id,
hash.transaction_hash
);
if hash.id == current.id {
current_payload = Some(raw_transaction);
}
}
anyhow::ensure!(
!authenticated_payloads.is_empty(),
"Execution intent {} has no persisted signed transaction bytes",
intent.id
);
if intent.status == "broadcast" {
anyhow::ensure!(
current_payload.is_some(),
"Broadcast execution intent {} has no persisted signed transaction bytes",
intent.id
);
}
if intent.status == "signed" {
anyhow::bail!(
"Execution intent {} has a signed transaction {} that was not authorized for broadcast; its nonce remains reserved pending explicit recovery",
intent.id,
tx_hash
);
}
*self.in_flight.lock() = Some(InFlightSlot::AwaitingFinality(InFlightTransaction {
intent_id: intent.id,
nonce,
tx_hash,View on GitHub (pinned to 18893faf8b)
Solutions
- Re-derive the intent from the chain/exchange or discard the stale unresolved intent so reconciliation can skip it
- Check the persistence layer (DB/store) to find why signed tx bytes were not written when the intent was created
- Restore the persisted payload record from backup or re-sign the unsigned intent and persist before connecting
- Run in release mode only after fixing the underlying persistence gap — do not use debug-assert bypass as a fix
Example fix
// before: intent left unresolved with no payload after a crash // after: persist payload at sign time before marking intent unresolved store.persist_signed_payload(&intent.id, &signed_tx)?; reconcile_unresolved_execution(&mut intent).await?;
Defensive patterns
Strategy: try-catch
Validate before calling
let payloads = store.load_payloads(&intent.id)?;
assert!(!payloads.is_empty(), "intent {} missing signed payload before connect", intent.id); Type guard
fn has_signed_payload(intent: &ExecutionIntent) -> bool {
!intent.authenticated_payloads.is_empty()
} Try / catch
match connect().await {
Err(e) if e.to_string().contains("no persisted signed transaction bytes") => {
// drop/repair the stale intent, then reconnect
store.discard_unresolved_intent(&intent.id)?;
connect().await
}
r => r,
} Prevention
- Persist signed tx bytes atomically with the intent state transition
- Back up and validate the persistence store before connect
- Never wipe payload records without also clearing dependent intent rows
When it happens
Trigger: `connect()` calls `reconcile_unresolved_execution()` for an intent whose persisted signed-transaction payloads list is empty (or whose current payload is missing while status == "broadcast"). The assertion `!authenticated_payloads.is_empty()` fails in debug builds.
Common situations: Database/state store wiped or truncated between runs while intent rows survived; crash between signing and persisting; manually edited or partially migrated persistence records; running a debug build after manually clearing payloads.
Understand the failure class
Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.
Related errors
- Persisted swap trader does not match restored order
- Finalized execution transaction {tx_hash} no longer has a re
- Finalized block {} changed from {} to {} before intent valid
- Finalized transaction {} emitted {} Swap logs; expected exac
- Restored transaction purpose is inconsistent
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/e8ad5df319736bca.
Report an issue: GitHub.