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 add_recipient(string address, u64 amount);
TxBuilder fee_rate(float sat_per_vbyte); TxBuilder fee_rate(float sat_per_vbyte);
TxBuilder drain_wallet(); TxBuilder drain_wallet();
TxBuilder drain_to(string address);
[Throws=BdkError] [Throws=BdkError]
PartiallySignedBitcoinTransaction build([ByRef] Wallet wallet); PartiallySignedBitcoinTransaction build([ByRef] Wallet wallet);
}; };

View File

@ -281,6 +281,7 @@ struct TxBuilder {
recipients: Vec<(String, u64)>, recipients: Vec<(String, u64)>,
fee_rate: Option<f32>, fee_rate: Option<f32>,
drain_wallet: bool, drain_wallet: bool,
drain_to: Option<String>,
} }
impl TxBuilder { impl TxBuilder {
@ -289,6 +290,7 @@ impl TxBuilder {
recipients: Vec::new(), recipients: Vec::new(),
fee_rate: None, fee_rate: None,
drain_wallet: false, drain_wallet: false,
drain_to: None,
} }
} }
@ -299,6 +301,7 @@ impl TxBuilder {
recipients, recipients,
fee_rate: self.fee_rate, fee_rate: self.fee_rate,
drain_wallet: self.drain_wallet, drain_wallet: self.drain_wallet,
drain_to: self.drain_to.clone(),
}) })
} }
@ -307,6 +310,7 @@ impl TxBuilder {
recipients: self.recipients.to_vec(), recipients: self.recipients.to_vec(),
fee_rate: Some(sat_per_vb), fee_rate: Some(sat_per_vb),
drain_wallet: self.drain_wallet, drain_wallet: self.drain_wallet,
drain_to: self.drain_to.clone(),
}) })
} }
@ -315,6 +319,16 @@ impl TxBuilder {
recipients: self.recipients.to_vec(), recipients: self.recipients.to_vec(),
fee_rate: self.fee_rate, fee_rate: self.fee_rate,
drain_wallet: true, 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 { if self.drain_wallet {
tx_builder.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 tx_builder
.finish() .finish()
.map(|(psbt, _)| PartiallySignedBitcoinTransaction { .map(|(psbt, _)| PartiallySignedBitcoinTransaction {