Add TxBuilder::drain_to

This commit is contained in:
Sudarsan Balaji 2022-03-31 17:17:43 +01:00
parent ba68103be1
commit ee91ad5b31
No known key found for this signature in database
GPG Key ID: 6644FFAC82AC1970
2 changed files with 20 additions and 0 deletions

View File

@ -145,6 +145,7 @@ interface TxBuilder {
TxBuilder add_recipient(string address, u64 amount);
TxBuilder fee_rate(float sat_per_vbyte);
TxBuilder drain_wallet();
TxBuilder drain_to(string address);
[Throws=BdkError]
PartiallySignedBitcoinTransaction build([ByRef] Wallet wallet);
};

View File

@ -281,6 +281,7 @@ struct TxBuilder {
recipients: Vec<(String, u64)>,
fee_rate: Option<f32>,
drain_wallet: bool,
drain_to: Option<String>,
}
impl TxBuilder {
@ -289,6 +290,7 @@ impl TxBuilder {
recipients: Vec::new(),
fee_rate: None,
drain_wallet: false,
drain_to: None,
}
}
@ -299,6 +301,7 @@ impl TxBuilder {
recipients,
fee_rate: self.fee_rate,
drain_wallet: self.drain_wallet,
drain_to: self.drain_to.clone(),
})
}
@ -307,6 +310,7 @@ impl TxBuilder {
recipients: self.recipients.to_vec(),
fee_rate: Some(sat_per_vb),
drain_wallet: self.drain_wallet,
drain_to: self.drain_to.clone(),
})
}
@ -315,6 +319,16 @@ impl TxBuilder {
recipients: self.recipients.to_vec(),
fee_rate: self.fee_rate,
drain_wallet: true,
drain_to: self.drain_to.clone(),
})
}
fn drain_to(&self, address: String) -> Arc<Self> {
Arc::new(TxBuilder {
recipients: self.recipients.to_vec(),
fee_rate: self.fee_rate,
drain_wallet: self.drain_wallet,
drain_to: Some(address),
})
}
@ -331,6 +345,11 @@ impl TxBuilder {
if self.drain_wallet {
tx_builder.drain_wallet();
}
if let Some(address) = &self.drain_to {
let drain_to =
Address::from_str(address).map_err(|e| BdkError::Generic(e.to_string()))?;
tx_builder.drain_to(drain_to.script_pubkey());
}
tx_builder
.finish()
.map(|(psbt, _)| PartiallySignedBitcoinTransaction {