Add TxBuilder::drain_wallet

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

View File

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

View File

@ -280,6 +280,7 @@ fn restore_extended_key(
struct TxBuilder {
recipients: Vec<(String, u64)>,
fee_rate: Option<f32>,
drain_wallet: bool,
}
impl TxBuilder {
@ -287,6 +288,7 @@ impl TxBuilder {
TxBuilder {
recipients: Vec::new(),
fee_rate: None,
drain_wallet: false,
}
}
@ -296,6 +298,7 @@ impl TxBuilder {
Arc::new(TxBuilder {
recipients,
fee_rate: self.fee_rate,
drain_wallet: self.drain_wallet,
})
}
@ -303,6 +306,15 @@ impl TxBuilder {
Arc::new(TxBuilder {
recipients: self.recipients.to_vec(),
fee_rate: Some(sat_per_vb),
drain_wallet: self.drain_wallet,
})
}
fn drain_wallet(&self) -> Arc<Self> {
Arc::new(TxBuilder {
recipients: self.recipients.to_vec(),
fee_rate: self.fee_rate,
drain_wallet: true,
})
}
@ -316,6 +328,9 @@ impl TxBuilder {
if let Some(sat_per_vb) = self.fee_rate {
tx_builder.fee_rate(FeeRate::from_sat_per_vb(sat_per_vb));
}
if self.drain_wallet {
tx_builder.drain_wallet();
}
tx_builder
.finish()
.map(|(psbt, _)| PartiallySignedBitcoinTransaction {