{"record":{"id":"4a02bd2f591168bb","repo":"nautechsystems/nautilus_trader","slug":"canonical-signer-nonce-transaction-has-no-authe","errorCode":null,"errorMessage":"Canonical signer-nonce transaction {} has no authenticated retained payload","messagePattern":"Canonical signer-nonce transaction (.+?) has no authenticated retained payload","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/execution/client.rs","lineNumber":3153,"sourceCode":"                self.chain_id,\n                &wallet_address,\n                end,\n                &self.manifest_digest,\n            )\n            .await?;\n\n        if let Some(cursor) = finalized_cursor.as_ref() {\n            anyhow::ensure!(\n                parse_verified_header(cursor)? == scanned_tip,\n                \"Replacement scan conflicts with the durable finalized header ledger\"\n            );\n        }\n\n        let mut mismatch = None;\n        let matched = candidate.and_then(|transaction| {\n            let Some(raw_transaction) = authenticated_payloads.get(&transaction.hash).cloned()\n            else {\n                mismatch = Some(anyhow::anyhow!(\n                    \"Canonical signer-nonce transaction {} has no authenticated retained payload\",\n                    transaction.hash\n                ));\n                return None;\n            };\n\n            if let Err(e) = validate_rpc_transaction_matches_payload(transaction, &raw_transaction)\n            {\n                mismatch = Some(e.context(format!(\n                    \"Canonical signer-nonce transaction {} failed authenticated payload validation\",\n                    transaction.hash\n                )));\n                return None;\n            }\n            Some((transaction.hash, raw_transaction))\n        });\n        let matched_hash = matched.as_ref().map(|(hash, _)| hash.to_string());\n        self.database","sourceCodeStart":3135,"sourceCodeEnd":3171,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/execution/client.rs#L3135-L3171","documentation":"When the replacement scan finds the canonical transaction with the wallet's nonce, that transaction's raw payload must exist in the authenticated payload set retained locally (authenticated_payloads keyed by tx hash). If the hash is missing, the canonical transaction cannot be authenticated against a locally retained signed payload, so the client fails the reconciliation rather than trusting an unverified transaction.","triggerScenarios":"A transaction from the wallet with the target nonce was found on-chain, but authenticated_payloads contains no entry for its hash — e.g. the signed raw bytes were never retained (broadcast by another process), retention was lost after a restart, or a replacement transaction from a different session was mined.","commonSituations":"Transaction broadcast outside this client (manual send, second executor); local payload store pruned or wiped; DB migration losing raw-tx rows; resuming reconciliation after a reinstall without the broadcast payloads.","solutions":["Ensure all broadcasts go through this client so raw signed payloads are retained before send","Restore the raw transaction payloads (from logs/backup) or re-derive the signed bytes if deterministic signing is available","If the transaction was sent externally, treat it as canonical state and re-sync local intent state instead of forcing reconciliation","Check payload retention/persistence settings and retention windows"],"exampleFix":"// before\nlet raw = signed_tx.raw_payload(); // dropped, only hash retained\nclient.broadcast(raw.hash_only());\n// after\nclient.retain_authenticated_payload(raw.hash(), raw.encoded_bytes());\nclient.broadcast(raw);","handlingStrategy":"validation","validationCode":"if let Some(tx) = found_canonical_tx {\n    if !authenticated_payloads.contains_key(&tx.hash) {\n        return Err(\"canonical tx payload not retained; cannot authenticate\");\n    }\n}","typeGuard":null,"tryCatchPattern":"match result {\n    Err(e) if e.to_string().contains(\"no authenticated retained payload\") => {\n        mark_intent_externally_mined_and_resync()\n    }\n    other => other,\n}","preventionTips":["Always broadcast through the client that retains raw payloads","Persist signed payloads durably before send","Extend retention windows beyond reconciliation horizons","Treat out-of-band sends as state changes to sync, not bypass"],"tags":["blockchain","authentication","payload","reconciliation"],"backgroundTag":"resource-not-found","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"}