]> Untitled Git - bdk/commitdiff
refactor(electrum): remove `unwrap()`s and `expect()`s
authorWei Chen <wzc110@gmail.com>
Wed, 25 Jun 2025 22:01:53 +0000 (22:01 +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 b0b30ea6812802d2725f315de7d339bf096c8528..6bbe2a659106973e926390a55aec564308d0ec69 100644 (file)
@@ -579,8 +579,17 @@ impl<E: ElectrumApi> BdkElectrumClient<E> {
                     let outpoint = vin.previous_output;
                     let vout = outpoint.vout;
                     let prev_tx = self.fetch_tx(outpoint.txid)?;
-                    let txout = prev_tx.output[vout as usize].clone();
-                    let _ = tx_update.txouts.insert(outpoint, txout);
+                    // Ensure server returns the expected txout.
+                    let txout = prev_tx
+                        .output
+                        .get(vout as usize)
+                        .ok_or_else(|| {
+                            electrum_client::Error::Message(format!(
+                                "prevout {outpoint} does not exist"
+                            ))
+                        })?
+                        .clone();
+                    tx_update.txouts.insert(outpoint, txout);
                 }
             }
         }
@@ -652,11 +661,11 @@ fn fetch_tip_and_latest_blocks(
         })
         .fold(agreement_cp, |prev_cp, block| {
             Some(match prev_cp {
-                Some(cp) => cp.push(block).expect("must extend checkpoint"),
+                Some(cp) => cp.push(block).ok()?,
                 None => CheckPoint::new(block),
             })
         })
-        .expect("must have at least one checkpoint");
+        .ok_or_else(|| Error::Message("failed to construct new checkpoint tip".to_string()))?;
 
     Ok((new_tip, new_blocks))
 }