{"record":{"id":"1e29c4fa6850390c","repo":"FuelLabs/fuel-core","slug":"tendermint-rpc-response-id-does-not-match-reque","errorCode":null,"errorMessage":"Tendermint RPC response ID {} does not match request ID {}","messagePattern":"Tendermint RPC response ID (.+?) does not match request ID (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/services/shared-sequencer/src/http_api.rs","lineNumber":145,"sourceCode":"    let response = http.post(api_url).json(&request).send().await?;\n    if response.status() != reqwest::StatusCode::OK {\n        anyhow::bail!(\n            \"Tendermint RPC request failed with HTTP status {}\",\n            response.status()\n        );\n    }\n    let text = response.text().await?;\n    let response: api_types::RpcResponse<T> =\n        serde_json::from_str(&text).with_context(|| format!(\"response text {text}\"))?;\n\n    if response.jsonrpc != request.jsonrpc {\n        anyhow::bail!(\n            \"Tendermint RPC response uses unsupported JSON-RPC version {}\",\n            response.jsonrpc\n        );\n    }\n    if response.id != request.id {\n        anyhow::bail!(\n            \"Tendermint RPC response ID {} does not match request ID {}\",\n            response.id,\n            request.id\n        );\n    }\n\n    if let Some(error) = response.error {\n        anyhow::bail!(\"Tendermint RPC error: {error}\");\n    }\n\n    response\n        .result\n        .ok_or_else(|| anyhow::anyhow!(\"Tendermint RPC response has no result\"))\n}\n\n#[derive(Copy, Clone, Debug, Default)]\npub struct AccountMetadata {\n    pub account_number: u64,","sourceCodeStart":127,"sourceCodeEnd":163,"githubUrl":"https://github.com/FuelLabs/fuel-core/blob/add100d30d21498e8528c46be8567fbd2ea019af/crates/services/shared-sequencer/src/http_api.rs#L127-L163","documentation":"Response-correlation guard in rpc(): the JSON-RPC response's id field does not match the id sent in the request (hardcoded 1 on the client side). The server (or an intermediary) answered a different request than the one this call issued — possible with connection mix-ups, proxies, or non-conformant servers. The result payload must not be trusted because it belongs to another call.","triggerScenarios":"Thrown at crates/services/shared-sequencer/src/http_api.rs:145 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Reject the response and re-issue the request — never consume the mismatched result","Use unique incrementing request IDs per client instead of a constant to make cross-talk detectable","Check for intermediaries (load balancers, caches) that could return stale or mismatched RPC responses"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"add100d30d21498e8528c46be8567fbd2ea019af","analyzedAt":"2026-09-05T18:46:12.018Z","contentChangedAt":"2026-09-05T18:46:12.018Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}