]> Untitled Git - bdk/commitdiff
fix(electrum): verify txid of server-returned transactions
authorElias Rohrer <dev@tnull.de>
Thu, 23 Apr 2026 16:54:52 +0000 (18:54 +0200)
committerElias Rohrer <dev@tnull.de>
Thu, 23 Apr 2026 16:55:27 +0000 (18:55 +0200)
An Electrum server could return an arbitrary transaction when
`fetch_tx()` requests a specific txid. The returned transaction was
cached and used without verifying that its computed txid matches the
requested one.

Add a verification check that `tx.compute_txid() == txid` after
fetching from the server, returning an error on mismatch.

Signed-off-by: Elias Rohrer <dev@tnull.de>
crates/electrum/src/bdk_electrum_client.rs

index 25da3998adfa0fd88cacea97ce65792eb5c69c30..689b20849d37832f323ab8910d72bbee41d89661 100644 (file)
@@ -78,6 +78,12 @@ impl<E: ElectrumApi> BdkElectrumClient<E> {
         drop(tx_cache);
 
         let tx = Arc::new(self.inner.transaction_get(&txid)?);
+        let returned_txid = tx.compute_txid();
+        if returned_txid != txid {
+            return Err(Error::Message(format!(
+                "electrum server returned transaction with unexpected txid: expected {txid}, got {returned_txid}"
+            )));
+        }
 
         self.tx_cache.lock().unwrap().insert(txid, Arc::clone(&tx));