nautechsystems/nautilus_trader · error
Execution intent {} signed transaction {} failed authenticat
Error message
Execution intent {} signed transaction {} failed authentication: {e} What it means
During recovery, a persisted signed transaction failed the authentication policy check (signature/payload validation). The stored signed bytes are not trustworthy for replay, so reconciliation aborts with the underlying cause embedded.
Source
Thrown at crates/adapters/blockchain/src/execution/client.rs:1226
if !hash.payload_expected {
anyhow::ensure!(
hash.raw_transaction.is_none() && hash.sealed_transaction.is_none(),
"Replacement transaction {} unexpectedly retains signed bytes",
hash.transaction_hash
);
continue;
}
let raw_transaction = open_execution_payload(
self.payload_keys
.as_deref()
.expect("payload keys checked above"),
policy,
&intent,
hash,
"recovery",
)
.map_err(|e| {
anyhow::anyhow!(
"Execution intent {} signed transaction {} failed authentication: {e}",
intent.id,
hash.transaction_hash
)
})?;
let authenticated_hash = B256::from_str(&hash.transaction_hash).with_context(|| {
format!(
"Execution intent {} has invalid transaction hash {}",
intent.id, hash.transaction_hash
)
})?;
anyhow::ensure!(
authenticated_payloads
.insert(authenticated_hash, raw_transaction.clone())
.is_none(),
"Execution intent {} has duplicate authenticated transaction hash {}",
intent.id,
hash.transaction_hashView on GitHub (pinned to 18893faf8b)
Solutions
- Inspect the nested cause (the {e}) to identify whether signature, policy, or payload failed
- Discard the failing transaction row and re-sign the intent through the recovery flow
- Verify the signer/policy configuration matches what was used when the transaction was signed
- Confirm the database rows were not modified or copied across environments
Defensive patterns
Strategy: try-catch
Try / catch
match client.connect().await {
Err(e) if e.to_string().contains("failed authentication") => {
// read the inner cause, discard/re-sign the failing transaction, retry recovery
}
other => other?,
} Prevention
- Keep signer/policy configuration stable across restarts
- Verify signed bytes integrity (checksums) after persistence
- Alert on authentication failures during recovery rather than auto-retrying
When it happens
Trigger: connect() -> reconcile_unresolved_execution(): the authenticate step for (policy, intent, hash, "recovery") returns Err and is mapped into this error.
Common situations: Signed bytes tampered with or truncated in storage; policy/config changed since signing (different signer, chain, expiry); rows copied from another environment.
Understand the failure class
- Authentication and authorization failures — expired tokens, bad credentials, and missing scopes.
Related errors
- Execution intent {} has a signed transaction {} that was not
- A recoverable execution for wallet {} retains signed transac
- Active execution intent {} has no nonce
- Persisted transaction row references intent {}, expected {}
- Execution intent {} has duplicate authenticated transaction
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/63fbb1714ae074ca.
Report an issue: GitHub.