From ba68103be1c8a82d60c0f261a6bbd5b1dd635a7c Mon Sep 17 00:00:00 2001 From: Sudarsan Balaji Date: Thu, 31 Mar 2022 17:17:24 +0100 Subject: [PATCH] Add TxBuilder::drain_wallet --- src/bdk.udl | 1 + src/lib.rs | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/bdk.udl b/src/bdk.udl index a898058..9fc6c88 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -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); }; diff --git a/src/lib.rs b/src/lib.rs index 7cb9ecd..c61c14a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -280,6 +280,7 @@ fn restore_extended_key( struct TxBuilder { recipients: Vec<(String, u64)>, fee_rate: Option, + 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 { + 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 {