From a99e022756e3741db3133da2409981126c317554 Mon Sep 17 00:00:00 2001 From: Sudarsan Balaji Date: Mon, 24 Jan 2022 20:32:49 +0000 Subject: [PATCH] Rename OnlineWallet to Wallet and remove OfflineWallet --- Cargo.toml | 2 +- src/bdk.udl | 23 ++--------------- src/lib.rs | 73 +++++++++++++++-------------------------------------- 3 files changed, 24 insertions(+), 74 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6be537d..b8593e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bdk-ffi" -version = "0.1.0" +version = "0.2.0" authors = ["Steve Myers ", "Sudarsan Balaji "] edition = "2018" diff --git a/src/bdk.udl b/src/bdk.udl index bde407e..2b58a78 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -84,21 +84,6 @@ interface Transaction { Confirmed(TransactionDetails details, BlockTime confirmation); }; -interface OfflineWallet { - [Throws=BdkError] - constructor(string descriptor, Network network, DatabaseConfig database_config); - - // OfflineWalletOperations - string get_new_address(); - string get_last_unused_address(); - [Throws=BdkError] - u64 get_balance(); - [Throws=BdkError] - void sign([ByRef] PartiallySignedBitcoinTransaction psbt); - [Throws=BdkError] - sequence get_transactions(); -}; - dictionary ElectrumConfig { string url; string? socks5; @@ -125,11 +110,9 @@ callback interface BdkProgress { void update(f32 progress, string? message); }; -interface OnlineWallet { +interface Wallet { [Throws=BdkError] constructor(string descriptor, string? change_descriptor, Network network, DatabaseConfig database_config, BlockchainConfig blockchain_config); - - // OfflineWalletOperations string get_new_address(); string get_last_unused_address(); [Throws=BdkError] @@ -138,8 +121,6 @@ interface OnlineWallet { void sign([ByRef] PartiallySignedBitcoinTransaction psbt); [Throws=BdkError] sequence get_transactions(); - - // OnlineWalletInterface Network get_network(); [Throws=BdkError] void sync(BdkProgress progress_update, u32? max_address_param); @@ -149,7 +130,7 @@ interface OnlineWallet { interface PartiallySignedBitcoinTransaction { [Throws=BdkError] - constructor([ByRef] OnlineWallet wallet, string recipient, u64 amount, float? fee_rate); + constructor([ByRef] Wallet wallet, string recipient, u64 amount, float? fee_rate); }; dictionary ExtendedKeyInfo { diff --git a/src/lib.rs b/src/lib.rs index 087143d..9ddd8ff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,7 +12,7 @@ use bdk::keys::bip39::{Language, Mnemonic, WordCount}; use bdk::keys::{DerivableKey, ExtendedKey, GeneratableKey, GeneratedKey}; use bdk::miniscript::BareCtx; use bdk::wallet::AddressIndex; -use bdk::{BlockTime, Error, FeeRate, SignOptions, Wallet}; +use bdk::{BlockTime, Error, FeeRate, SignOptions, Wallet as BdkWallet }; use std::convert::TryFrom; use std::str::FromStr; use std::sync::{Mutex, MutexGuard}; @@ -48,17 +48,7 @@ pub enum BlockchainConfig { } trait WalletHolder { - fn get_wallet(&self) -> MutexGuard>; -} - -struct OfflineWallet { - wallet: Mutex>, -} - -impl WalletHolder<()> for OfflineWallet { - fn get_wallet(&self) -> MutexGuard> { - self.wallet.lock().unwrap() - } + fn get_wallet(&self) -> MutexGuard>; } #[derive(Debug, Clone, PartialEq, Eq, Default)] @@ -105,7 +95,7 @@ impl From<&bdk::TransactionDetails> for Transaction { } } -trait OfflineWalletOperations: WalletHolder { +trait WalletOperations: WalletHolder { fn get_new_address(&self) -> String { self.get_wallet() .get_address(AddressIndex::New) @@ -144,26 +134,8 @@ trait OfflineWalletOperations: WalletHolder { } } -impl OfflineWallet { - fn new( - descriptor: String, - network: Network, - database_config: DatabaseConfig, - ) -> Result { - let any_database_config = match database_config { - DatabaseConfig::Memory { .. } => AnyDatabaseConfig::Memory(()), - DatabaseConfig::Sled { config } => AnyDatabaseConfig::Sled(config), - }; - let database = AnyDatabase::from_config(&any_database_config)?; - let wallet = Mutex::new(Wallet::new_offline(&descriptor, None, network, database)?); - Ok(OfflineWallet { wallet }) - } -} - -impl OfflineWalletOperations<()> for OfflineWallet {} - -struct OnlineWallet { - wallet: Mutex>, +struct Wallet { + _wallet: Mutex>, } pub trait BdkProgress: Send + Sync { @@ -188,12 +160,12 @@ struct PartiallySignedBitcoinTransaction { impl PartiallySignedBitcoinTransaction { fn new( - online_wallet: &OnlineWallet, + wallet: &Wallet, recipient: String, amount: u64, fee_rate: Option, // satoshis per vbyte ) -> Result { - let wallet = online_wallet.get_wallet(); + let wallet = wallet.get_wallet(); match Address::from_str(&recipient) { Ok(address) => { let (psbt, details) = { @@ -216,7 +188,15 @@ impl PartiallySignedBitcoinTransaction { } } -impl OnlineWallet { +impl WalletHolder for Wallet { + fn get_wallet(&self) -> MutexGuard> { + self._wallet.lock().unwrap() + } +} + +impl WalletOperations for Wallet {} + +impl Wallet { fn new( descriptor: String, change_descriptor: Option, @@ -250,18 +230,18 @@ impl OnlineWallet { }; let database = AnyDatabase::from_config(&any_database_config)?; let blockchain = AnyBlockchain::from_config(&any_blockchain_config)?; - let wallet = Mutex::new(Wallet::new( + let _wallet = Mutex::new(BdkWallet::new( &descriptor, change_descriptor.to_owned().as_ref(), network, database, blockchain, )?); - Ok(OnlineWallet { wallet }) + Ok(Wallet { _wallet }) } fn get_network(&self) -> Network { - self.wallet.lock().unwrap().network() + self.get_wallet().network() } fn sync( @@ -270,9 +250,7 @@ impl OnlineWallet { max_address_param: Option, ) -> Result<(), BdkError> { progress_update.update(21.0, Some("message".to_string())); - self.wallet - .lock() - .unwrap() + self.get_wallet() .sync(BdkProgressHolder { progress_update }, max_address_param) } @@ -286,14 +264,6 @@ impl OnlineWallet { } } -impl WalletHolder for OnlineWallet { - fn get_wallet(&self) -> MutexGuard> { - self.wallet.lock().unwrap() - } -} - -impl OfflineWalletOperations for OnlineWallet {} - pub struct ExtendedKeyInfo { mnemonic: String, xprv: String, @@ -334,5 +304,4 @@ fn restore_extended_key( }) } -uniffi::deps::static_assertions::assert_impl_all!(OfflineWallet: Sync, Send); -uniffi::deps::static_assertions::assert_impl_all!(OnlineWallet: Sync, Send); +uniffi::deps::static_assertions::assert_impl_all!(Wallet: Sync, Send);