{"record":{"id":"026d690c607c1d94","repo":"nautechsystems/nautilus_trader","slug":"active-execution-intent-has-no-nonce","errorCode":null,"errorMessage":"Active execution intent {} has no nonce","messagePattern":"Active execution intent (.+?) has no nonce","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/execution/client.rs","lineNumber":1171,"sourceCode":"\n        if intent.status == \"prepared\" {\n            database\n                .mark_execution_intent_recoverable(intent.id)\n                .await?;\n            release_preparing_slot(&self.in_flight);\n            return Ok(());\n        }\n\n        let purpose = TransactionPurpose::parse(&intent.purpose).ok_or_else(|| {\n            anyhow::anyhow!(\n                \"Execution intent {} has unknown purpose {}\",\n                intent.id,\n                intent.purpose\n            )\n        })?;\n        let nonce = intent\n            .nonce\n            .ok_or_else(|| anyhow::anyhow!(\"Active execution intent {} has no nonce\", intent.id))?;\n        *self.in_flight.lock() = Some(InFlightSlot::Recovering(RecoveryTransaction {\n            intent_id: intent.id,\n            nonce,\n            purpose,\n        }));\n        let hashes = database.get_execution_transaction_hashes(intent.id).await?;\n        let current = current_execution_hash(intent.id, &hashes)?;\n        let tx_hash = B256::from_str(&current.transaction_hash).with_context(|| {\n            format!(\n                \"Execution intent {} has invalid transaction hash {}\",\n                intent.id, current.transaction_hash\n            )\n        })?;\n        let policy = PayloadPolicy {\n            chain_id: self.chain.chain_id,\n            signer: self.wallet_address,\n            gas_limit: self.config.gas_limit,\n            max_fee_per_gas: self.config.max_fee_per_gas_wei,","sourceCodeStart":1153,"sourceCodeEnd":1189,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/execution/client.rs#L1153-L1189","documentation":"Reconciliation guard for unresolved execution intents: an active intent has no stored nonce, so its on-chain transaction state cannot be tracked or recovered; the intent is reported as unrecoverable instead of silently skipped.","triggerScenarios":"connect() -> reconcile_unresolved_execution(): intent passes schema and purpose checks but intent.nonce is None when recovered from the database.","commonSituations":"Intent row written in an early 'preparing' phase that crashed before nonce assignment; partial write; manual row insertion without a nonce.","solutions":["Delete or mark the incomplete intent inactive so reconciliation skips it, then let the client create a fresh intent","Backfill the nonce manually only if you can verify it matches the on-chain account nonce and stored signed bytes","Fix the writer path so nonce is persisted atomically with the intent"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"let intent = database.get_active_execution_intent(chain_id, &wallet).await?;\nif intent.as_ref().and_then(|i| i.nonce).is_none() {\n    // deactivate the incomplete intent before connecting\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Persist the nonce atomically with intent creation","Mark intents inactive on early-phase failures","Monitor for intents stuck without a nonce"],"tags":["blockchain","nonce","database","recovery"],"backgroundTag":"empty-required-field","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}