{"record":{"id":"136a84aa40f783fd","repo":"nautechsystems/nautilus_trader","slug":"finalized-execution-transaction-tx-hash-no-longe","errorCode":null,"errorMessage":"Finalized execution transaction {tx_hash} no longer has a receipt","messagePattern":"Finalized execution transaction (.+?) no longer has a receipt","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/execution/client.rs","lineNumber":990,"sourceCode":"                .mark_execution_event_emitted(intent.id, \"acknowledgement\")\n                .await?;\n        }\n\n        let executor = self.transaction_executor()?;\n        let prepared = PreparedTransaction {\n            intent_id: intent.id,\n            created_block: intent.created_block,\n            nonce,\n            tx_hash,\n            raw_tx: current.raw_transaction.clone().unwrap_or_default(),\n        };\n        let outcome = if matches!(intent.status.as_str(), \"finalized\" | \"reverted\") {\n            let receipt = executor\n                .http_rpc_client\n                .get_transaction_receipt(&tx_hash)\n                .await?\n                .ok_or_else(|| {\n                    anyhow::anyhow!(\n                        \"Finalized execution transaction {tx_hash} no longer has a receipt\"\n                    )\n                })?;\n            anyhow::ensure!(\n                executor.receipt_is_stably_finalized(&receipt).await?,\n                \"Persisted terminal transaction {tx_hash} is not stable at the finalized boundary\"\n            );\n\n            if intent.status == \"finalized\" {\n                InclusionOutcome::Finalized(IncludedTransaction {\n                    intent_id: intent.id,\n                    tx_hash,\n                    block_number: receipt.block_number,\n                    receipt,\n                })\n            } else {\n                InclusionOutcome::Reverted(tx_hash)\n            }","sourceCodeStart":972,"sourceCodeEnd":1008,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/2114cf6f761429e0adb5ca9596fcd7b895b16011/crates/adapters/blockchain/src/execution/client.rs#L972-L1008","documentation":"The durable store says the intent reached a terminal status ('finalized' or 'reverted'), but the RPC node returned a null receipt when the reconciler re-fetched it via get_transaction_receipt(tx_hash). For a finalized transaction a receipt should always exist, so this indicates the connected node cannot see the transaction at all rather than a normal pending state.","triggerScenarios":"connect()-time reconciliation of a terminal intent while: the http_rpc_url points to a different chain than the intent's chain_id, the node pruned ancient history, or a load-balanced RPC endpoint served an inconsistent backend that lacks the block.","commonSituations":"Switching RPC providers (e.g. from a mainnet endpoint to an L2 endpoint) without updating chain config; using pruned/archive-lite nodes; load balancers routing eth_getTransactionReceipt to lagging replicas.","solutions":["Verify the RPC endpoint serves the intent's chain: compare eth_chainId output with the configured chain_id","Fetch the receipt manually (eth_getTransactionReceipt with the tx_hash from the error) to confirm the node really cannot see it","Switch to a correct, non-pruned RPC provider (or an archive node) and reconnect so reconciliation completes","If the row itself is wrong (tx never landed), repair the intent status in Postgres after verifying on-chain"],"exampleFix":"# before: wrong RPC endpoint for the persisted intent's chain\nconfig.http_rpc_url = \"https://rpc.other-chain.example\"\n\n# after: endpoint matches the intent's chain_id so the receipt is visible\nconfig.http_rpc_url = \"https://eth-mainnet.g.alchemy.com/v2/<key>\"\nassert web3.eth.chain_id == intent_chain_id","handlingStrategy":"validation","validationCode":"from web3 import Web3\n\nw3 = Web3(Web3.HTTPProvider(rpc_url))\nassert w3.is_connected()\nassert w3.eth.chain_id == configured_chain_id, 'RPC chain differs from config'\nreceipt = w3.eth.get_transaction_receipt(last_finalized_tx_hash)\nassert receipt is not None, 'node cannot see the finalized transaction'","typeGuard":null,"tryCatchPattern":"try:\n    client.connect()\nexcept Exception as e:\n    if 'no longer has a receipt' in str(e):\n        # endpoint mismatch or pruned node: switch RPC, verify chain_id, then retry\n        ...\n    raise","preventionTips":["Pin http_rpc_url to a provider that serves the intent's chain and keeps full history","Recheck eth_chainId after any RPC provider change before reconnecting a wallet with active intents"],"tags":["blockchain","reconciliation","rpc","transaction-receipt","finality"],"backgroundTag":"transaction-receipt-not-found","analyzedSha":"2114cf6f761429e0adb5ca9596fcd7b895b16011","analyzedAt":"2026-08-21T11:28:30.864Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}