diff --git a/src/wallet/mod.rs b/src/wallet/mod.rs index aacfe480..bece035e 100644 --- a/src/wallet/mod.rs +++ b/src/wallet/mod.rs @@ -2543,7 +2543,8 @@ mod test { let mut builder = wallet.build_fee_bump(txid).unwrap(); builder .fee_rate(FeeRate::from_sat_per_vb(2.5)) - .maintain_single_recipient(); + .maintain_single_recipient() + .unwrap(); let (psbt, details) = builder.finish().unwrap(); assert_eq!(details.sent, original_details.sent); @@ -2584,7 +2585,10 @@ mod test { .unwrap(); let mut builder = wallet.build_fee_bump(txid).unwrap(); - builder.maintain_single_recipient().fee_absolute(300); + builder + .maintain_single_recipient() + .unwrap() + .fee_absolute(300); let (psbt, details) = builder.finish().unwrap(); assert_eq!(details.sent, original_details.sent); @@ -2643,6 +2647,7 @@ mod test { builder .drain_wallet() .maintain_single_recipient() + .unwrap() .fee_rate(FeeRate::from_sat_per_vb(5.0)); let (_, details) = builder.finish().unwrap(); assert_eq!(details.sent, 75_000); diff --git a/src/wallet/tx_builder.rs b/src/wallet/tx_builder.rs index 4fca77e3..a4848096 100644 --- a/src/wallet/tx_builder.rs +++ b/src/wallet/tx_builder.rs @@ -514,12 +514,13 @@ impl<'a, B, D: BatchDatabase> TxBuilder<'a, B, D, DefaultCoinSelectionAlgorithm, /// Fails if the transaction has more than one outputs. /// /// [`add_utxo`]: Self::add_utxo - pub fn maintain_single_recipient(&mut self) -> &mut Self { + pub fn maintain_single_recipient(&mut self) -> Result<&mut Self, Error> { let mut recipients = self.params.recipients.drain(..).collect::>(); - assert_eq!(recipients.len(), 1, "maintain_single_recipient must not be called while bumping a transactions with more than one output"); + if recipients.len() != 1 { + return Err(Error::SingleRecipientMultipleOutputs); + } self.params.single_recipient = Some(recipients.pop().unwrap().0); - // Since we are fee bumping and maintaining a single recipient we never want to add any more non-manual inputs. - self + Ok(self) } }