diff --git a/src/bdk.udl b/src/bdk.udl index 39bdf12..b676236 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -195,6 +195,8 @@ interface TxBuilder { TxBuilder enable_rbf_with_sequence(u32 nsequence); + TxBuilder add_data(sequence data); + [Throws=BdkError] PartiallySignedBitcoinTransaction finish([ByRef] Wallet wallet); }; diff --git a/src/lib.rs b/src/lib.rs index 0e49d29..ef3ab64 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -344,6 +344,7 @@ struct TxBuilder { drain_wallet: bool, drain_to: Option, rbf: Option, + data: Vec, } impl TxBuilder { @@ -354,6 +355,7 @@ impl TxBuilder { drain_wallet: false, drain_to: None, rbf: None, + data: Vec::new(), } } @@ -401,6 +403,13 @@ impl TxBuilder { }) } + fn add_data(&self, data: Vec) -> Arc { + Arc::new(TxBuilder { + data, + ..self.clone() + }) + } + fn finish(&self, wallet: &Wallet) -> Result, Error> { let wallet = wallet.get_wallet(); let mut tx_builder = wallet.build_tx(); @@ -426,6 +435,10 @@ impl TxBuilder { } } } + if !&self.data.is_empty() { + tx_builder.add_data(&self.data.as_slice()); + } + tx_builder .finish() .map(|(psbt, _)| PartiallySignedBitcoinTransaction {