Make maintain_single_recipient return a Result

preferable to panicking.
This commit is contained in:
LLFourn 2021-01-29 12:10:22 +11:00
parent 33426d4c3a
commit dbf8cf7674
No known key found for this signature in database
GPG Key ID: A27093B54DA11F65
2 changed files with 12 additions and 6 deletions

View File

@ -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);

View File

@ -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::<Vec<_>>();
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)
}
}