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")); } };