Rename OnlineWallet to Wallet

and remove OfflineWallet
This commit is contained in:
Sudarsan Balaji 2022-01-24 20:32:49 +00:00
parent 672131ca0f
commit a99e022756
3 changed files with 24 additions and 74 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "bdk-ffi" name = "bdk-ffi"
version = "0.1.0" version = "0.2.0"
authors = ["Steve Myers <steve@notmandatory.org>", "Sudarsan Balaji <sudarsan.balaji@artfuldev.com>"] authors = ["Steve Myers <steve@notmandatory.org>", "Sudarsan Balaji <sudarsan.balaji@artfuldev.com>"]
edition = "2018" edition = "2018"

View File

@ -84,21 +84,6 @@ interface Transaction {
Confirmed(TransactionDetails details, BlockTime confirmation); 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<Transaction> get_transactions();
};
dictionary ElectrumConfig { dictionary ElectrumConfig {
string url; string url;
string? socks5; string? socks5;
@ -125,11 +110,9 @@ callback interface BdkProgress {
void update(f32 progress, string? message); void update(f32 progress, string? message);
}; };
interface OnlineWallet { interface Wallet {
[Throws=BdkError] [Throws=BdkError]
constructor(string descriptor, string? change_descriptor, Network network, DatabaseConfig database_config, BlockchainConfig blockchain_config); constructor(string descriptor, string? change_descriptor, Network network, DatabaseConfig database_config, BlockchainConfig blockchain_config);
// OfflineWalletOperations
string get_new_address(); string get_new_address();
string get_last_unused_address(); string get_last_unused_address();
[Throws=BdkError] [Throws=BdkError]
@ -138,8 +121,6 @@ interface OnlineWallet {
void sign([ByRef] PartiallySignedBitcoinTransaction psbt); void sign([ByRef] PartiallySignedBitcoinTransaction psbt);
[Throws=BdkError] [Throws=BdkError]
sequence<Transaction> get_transactions(); sequence<Transaction> get_transactions();
// OnlineWalletInterface
Network get_network(); Network get_network();
[Throws=BdkError] [Throws=BdkError]
void sync(BdkProgress progress_update, u32? max_address_param); void sync(BdkProgress progress_update, u32? max_address_param);
@ -149,7 +130,7 @@ interface OnlineWallet {
interface PartiallySignedBitcoinTransaction { interface PartiallySignedBitcoinTransaction {
[Throws=BdkError] [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 { dictionary ExtendedKeyInfo {

View File

@ -12,7 +12,7 @@ use bdk::keys::bip39::{Language, Mnemonic, WordCount};
use bdk::keys::{DerivableKey, ExtendedKey, GeneratableKey, GeneratedKey}; use bdk::keys::{DerivableKey, ExtendedKey, GeneratableKey, GeneratedKey};
use bdk::miniscript::BareCtx; use bdk::miniscript::BareCtx;
use bdk::wallet::AddressIndex; 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::convert::TryFrom;
use std::str::FromStr; use std::str::FromStr;
use std::sync::{Mutex, MutexGuard}; use std::sync::{Mutex, MutexGuard};
@ -48,17 +48,7 @@ pub enum BlockchainConfig {
} }
trait WalletHolder<B> { trait WalletHolder<B> {
fn get_wallet(&self) -> MutexGuard<Wallet<B, AnyDatabase>>; fn get_wallet(&self) -> MutexGuard<BdkWallet<B, AnyDatabase>>;
}
struct OfflineWallet {
wallet: Mutex<Wallet<(), AnyDatabase>>,
}
impl WalletHolder<()> for OfflineWallet {
fn get_wallet(&self) -> MutexGuard<Wallet<(), AnyDatabase>> {
self.wallet.lock().unwrap()
}
} }
#[derive(Debug, Clone, PartialEq, Eq, Default)] #[derive(Debug, Clone, PartialEq, Eq, Default)]
@ -105,7 +95,7 @@ impl From<&bdk::TransactionDetails> for Transaction {
} }
} }
trait OfflineWalletOperations<B>: WalletHolder<B> { trait WalletOperations<B>: WalletHolder<B> {
fn get_new_address(&self) -> String { fn get_new_address(&self) -> String {
self.get_wallet() self.get_wallet()
.get_address(AddressIndex::New) .get_address(AddressIndex::New)
@ -144,26 +134,8 @@ trait OfflineWalletOperations<B>: WalletHolder<B> {
} }
} }
impl OfflineWallet { struct Wallet {
fn new( _wallet: Mutex<BdkWallet<AnyBlockchain, AnyDatabase>>,
descriptor: String,
network: Network,
database_config: DatabaseConfig,
) -> Result<Self, BdkError> {
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<Wallet<AnyBlockchain, AnyDatabase>>,
} }
pub trait BdkProgress: Send + Sync { pub trait BdkProgress: Send + Sync {
@ -188,12 +160,12 @@ struct PartiallySignedBitcoinTransaction {
impl PartiallySignedBitcoinTransaction { impl PartiallySignedBitcoinTransaction {
fn new( fn new(
online_wallet: &OnlineWallet, wallet: &Wallet,
recipient: String, recipient: String,
amount: u64, amount: u64,
fee_rate: Option<f32>, // satoshis per vbyte fee_rate: Option<f32>, // satoshis per vbyte
) -> Result<Self, Error> { ) -> Result<Self, Error> {
let wallet = online_wallet.get_wallet(); let wallet = wallet.get_wallet();
match Address::from_str(&recipient) { match Address::from_str(&recipient) {
Ok(address) => { Ok(address) => {
let (psbt, details) = { let (psbt, details) = {
@ -216,7 +188,15 @@ impl PartiallySignedBitcoinTransaction {
} }
} }
impl OnlineWallet { impl WalletHolder<AnyBlockchain> for Wallet {
fn get_wallet(&self) -> MutexGuard<BdkWallet<AnyBlockchain, AnyDatabase>> {
self._wallet.lock().unwrap()
}
}
impl WalletOperations<AnyBlockchain> for Wallet {}
impl Wallet {
fn new( fn new(
descriptor: String, descriptor: String,
change_descriptor: Option<String>, change_descriptor: Option<String>,
@ -250,18 +230,18 @@ impl OnlineWallet {
}; };
let database = AnyDatabase::from_config(&any_database_config)?; let database = AnyDatabase::from_config(&any_database_config)?;
let blockchain = AnyBlockchain::from_config(&any_blockchain_config)?; let blockchain = AnyBlockchain::from_config(&any_blockchain_config)?;
let wallet = Mutex::new(Wallet::new( let _wallet = Mutex::new(BdkWallet::new(
&descriptor, &descriptor,
change_descriptor.to_owned().as_ref(), change_descriptor.to_owned().as_ref(),
network, network,
database, database,
blockchain, blockchain,
)?); )?);
Ok(OnlineWallet { wallet }) Ok(Wallet { _wallet })
} }
fn get_network(&self) -> Network { fn get_network(&self) -> Network {
self.wallet.lock().unwrap().network() self.get_wallet().network()
} }
fn sync( fn sync(
@ -270,9 +250,7 @@ impl OnlineWallet {
max_address_param: Option<u32>, max_address_param: Option<u32>,
) -> Result<(), BdkError> { ) -> Result<(), BdkError> {
progress_update.update(21.0, Some("message".to_string())); progress_update.update(21.0, Some("message".to_string()));
self.wallet self.get_wallet()
.lock()
.unwrap()
.sync(BdkProgressHolder { progress_update }, max_address_param) .sync(BdkProgressHolder { progress_update }, max_address_param)
} }
@ -286,14 +264,6 @@ impl OnlineWallet {
} }
} }
impl WalletHolder<AnyBlockchain> for OnlineWallet {
fn get_wallet(&self) -> MutexGuard<Wallet<AnyBlockchain, AnyDatabase>> {
self.wallet.lock().unwrap()
}
}
impl OfflineWalletOperations<AnyBlockchain> for OnlineWallet {}
pub struct ExtendedKeyInfo { pub struct ExtendedKeyInfo {
mnemonic: String, mnemonic: String,
xprv: 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!(Wallet: Sync, Send);
uniffi::deps::static_assertions::assert_impl_all!(OnlineWallet: Sync, Send);