{"record":{"id":"98f32f37184ebfe0","repo":"nautechsystems/nautilus_trader","slug":"execution-intent-has-invalid-transaction-hash","errorCode":null,"errorMessage":"Execution intent {} has invalid transaction hash {}","messagePattern":"Execution intent (.+?) has invalid transaction hash (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/execution/client.rs","lineNumber":1238,"sourceCode":"                policy,\n                &intent,\n                hash,\n                \"recovery\",\n            )\n            .map_err(|e| {\n                anyhow::anyhow!(\n                    \"Execution intent {} signed transaction {} failed authentication: {e}\",\n                    intent.id,\n                    hash.transaction_hash\n                )\n            })?;\n            let authenticated_hash = B256::from_str(&hash.transaction_hash).with_context(|| {\n                format!(\n                    \"Execution intent {} has invalid transaction hash {}\",\n                    intent.id, hash.transaction_hash\n                )\n            })?;\n            anyhow::ensure!(\n                authenticated_payloads\n                    .insert(authenticated_hash, raw_transaction.clone())\n                    .is_none(),\n                \"Execution intent {} has duplicate authenticated transaction hash {}\",\n                intent.id,\n                hash.transaction_hash\n            );\n\n            if hash.id == current.id {\n                current_payload = Some(raw_transaction);\n            }\n        }\n        anyhow::ensure!(\n            !authenticated_payloads.is_empty(),\n            \"Execution intent {} has no persisted signed transaction bytes\",\n            intent.id\n        );\n","sourceCodeStart":1220,"sourceCodeEnd":1256,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/execution/client.rs#L1220-L1256","documentation":"During reconciliation of unresolved executions, a transaction hash attached to an intent failed to parse as a B256 hash; the stored hash string is malformed, so the intent cannot be authenticated or matched to an on-chain transaction.","triggerScenarios":"connect() -> reconcile_unresolved_execution(): B256::from_str(&hash.transaction_hash) fails while building authenticated_payloads after successful authentication.","commonSituations":"Corrupted rows; hashes stored with '0x' prefix vs not (depending on parser), wrong length, or non-hex characters; manual DB edits.","solutions":["Fix the transaction_hash value in the row to a valid 32-byte hex hash","Delete the malformed row and let recovery re-derive the transaction record","Check the writer that stores hashes to ensure canonical encoding is persisted"],"exampleFix":"// before\ntransaction_hash = \"0xdeadbeef\"  // too short / invalid\n// after\ntransaction_hash = \"0x<64 hex chars>\"","handlingStrategy":"validation","validationCode":"fn is_valid_tx_hash(s: &str) -> bool {\n    B256::from_str(s).is_ok()\n}\n// pre-check rows\nlet bad: Vec<_> = hashes.iter().filter(|h| !is_valid_tx_hash(&h.transaction_hash)).collect();","typeGuard":"fn valid_hash(s: &str) -> Option<B256> {\n    B256::from_str(s).ok()\n}","tryCatchPattern":null,"preventionTips":["Persist hashes in one canonical format (e.g. 0x-prefixed 64 hex chars)","Validate hash format at insert time","Prevent manual DB edits"],"tags":["blockchain","hash","parsing","database"],"backgroundTag":"invalid-argument-format","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"}