]> Untitled Git - bdk/commitdiff
fix(electrum): Return error on incorrect network
author志宇 <hello@evanlinjin.me>
Thu, 10 Jul 2025 03:04:24 +0000 (03:04 +0000)
committerWei Chen <wzc110@gmail.com>
Fri, 11 Jul 2025 19:33:33 +0000 (19:33 +0000)
crates/electrum/src/bdk_electrum_client.rs

index 6bbe2a659106973e926390a55aec564308d0ec69..672cf93b5dcd6c044a591d4216c9effa2f97cd22 100644 (file)
@@ -647,25 +647,19 @@ fn fetch_tip_and_latest_blocks(
             }
         }
         agreement_cp
+            .ok_or_else(|| Error::Message("cannot find agreement block with server".to_string()))?
     };
 
-    let agreement_height = agreement_cp.as_ref().map(CheckPoint::height);
-
-    let new_tip = new_blocks
+    let extension = new_blocks
         .iter()
-        // Prune `new_blocks` to only include blocks that are actually new.
-        .filter(|(height, _)| Some(*<&u32>::clone(height)) > agreement_height)
-        .map(|(height, hash)| BlockId {
-            height: *height,
-            hash: *hash,
-        })
-        .fold(agreement_cp, |prev_cp, block| {
-            Some(match prev_cp {
-                Some(cp) => cp.push(block).ok()?,
-                None => CheckPoint::new(block),
-            })
+        .filter({
+            let agreement_height = agreement_cp.height();
+            move |(height, _)| **height > agreement_height
         })
-        .ok_or_else(|| Error::Message("failed to construct new checkpoint tip".to_string()))?;
+        .map(|(&height, &hash)| BlockId { height, hash });
+    let new_tip = agreement_cp
+        .extend(extension)
+        .expect("extension heights already checked to be greater than agreement height");
 
     Ok((new_tip, new_blocks))
 }