From 9fd463b592c7da8582f217677dc2d7d14741c9d8 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Sat, 12 Oct 2024 16:28:50 +0200 Subject: [PATCH] Fix bug with set_fees returning insufficient amount --- src/silentpayments.rs | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/silentpayments.rs b/src/silentpayments.rs index f86df8f..ed921f5 100644 --- a/src/silentpayments.rs +++ b/src/silentpayments.rs @@ -111,22 +111,19 @@ pub fn create_transaction( }) .collect(); - let mut fee_set = false; - for candidate in candidates { - if let Some(c) = candidate { - if c == change_address { - SpClient::set_fees(&mut new_psbt, fee_rate, change_address.clone())?; - fee_set = true; - break; - } else if c == sender_address { - SpClient::set_fees(&mut new_psbt, fee_rate, sender_address.clone())?; - fee_set = true; - break; + let fee_set = candidates.iter().filter_map(|candidate_opt| { + candidate_opt.as_ref().and_then(|c| { + if *c == change_address { + Some(SpClient::set_fees(&mut new_psbt, fee_rate, change_address.clone())) + } else if *c == sender_address { + Some(SpClient::set_fees(&mut new_psbt, fee_rate, sender_address.clone())) + } else { + None } - } - } + }) + }).find_map(|result| result.ok()); - if !fee_set { + if fee_set.is_none() { return Err(Error::msg("Must specify payer for fee")); } };