diff --git a/src/bdk.udl b/src/bdk.udl index 5ee8f95..9f386de 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -66,7 +66,13 @@ interface DatabaseConfig { interface OfflineWallet { [Throws=BdkError] constructor(string descriptor, Network network, DatabaseConfig database_config); + + // OfflineWalletOperations string get_new_address(); + [Throws=BdkError] + u64 get_balance(); + [Throws=BdkError] + void sign([ByRef] PartiallySignedBitcoinTransaction psbt); }; dictionary ElectrumConfig { @@ -98,14 +104,18 @@ callback interface BdkProgress { interface OnlineWallet { [Throws=BdkError] constructor(string descriptor, Network network, DatabaseConfig database_config, BlockchainConfig blockchain_config); + + // OfflineWalletOperations string get_new_address(); - Network get_network(); - [Throws=BdkError] - void sync(BdkProgress progress_update, u32? max_address_param); [Throws=BdkError] u64 get_balance(); [Throws=BdkError] void sign([ByRef] PartiallySignedBitcoinTransaction psbt); + + // OnlineWalletInterface + Network get_network(); + [Throws=BdkError] + void sync(BdkProgress progress_update, u32? max_address_param); [Throws=BdkError] string broadcast([ByRef] PartiallySignedBitcoinTransaction psbt); }; diff --git a/src/lib.rs b/src/lib.rs index 3c232b4..d9d375f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -65,6 +65,22 @@ trait OfflineWalletOperations: WalletHolder { .address .to_string() } + + fn get_balance(&self) -> Result { + self.get_wallet().get_balance() + } + + fn sign<'a>(&self, psbt: &'a PartiallySignedBitcoinTransaction) -> Result<(), Error> { + let mut psbt = psbt.internal.lock().unwrap(); + let finalized = self.get_wallet().sign(&mut psbt, SignOptions::default())?; + match finalized { + true => Ok(()), + false => Err(BdkError::Generic(format!( + "transaction signing not finalized {:?}", + psbt + ))), + } + } } impl OfflineWallet { @@ -188,22 +204,6 @@ impl OnlineWallet { .sync(BdkProgressHolder { progress_update }, max_address_param) } - fn get_balance(&self) -> Result { - self.wallet.lock().unwrap().get_balance() - } - - fn sign<'a>(&self, psbt: &'a PartiallySignedBitcoinTransaction) -> Result<(), Error> { - let mut psbt = psbt.internal.lock().unwrap(); - let finalized = self.get_wallet().sign(&mut psbt, SignOptions::default())?; - match finalized { - true => Ok(()), - false => Err(BdkError::Generic(format!( - "transaction signing not finalized {:?}", - psbt - ))), - } - } - fn broadcast<'a>(&self, psbt: &'a PartiallySignedBitcoinTransaction) -> Result { let tx = psbt.internal.lock().unwrap().clone().extract_tx(); let tx_id = self.get_wallet().broadcast(tx)?;