From e822f10b27acc221190571d4f43b12f7522a7958 Mon Sep 17 00:00:00 2001 From: Casey Rodarmor Date: Sat, 1 Mar 2025 17:34:54 -0800 Subject: [PATCH] Refactor --- src/wallet.rs | 10 +++--- src/wallet/database.rs | 57 -------------------------------- src/wallet/persister.rs | 56 +++++++++++++++++++++++++++++++ src/wallet/wallet_constructor.rs | 1 - 4 files changed, 62 insertions(+), 62 deletions(-) create mode 100644 src/wallet/persister.rs diff --git a/src/wallet.rs b/src/wallet.rs index 0dbd4419f7..94b8d5ac05 100644 --- a/src/wallet.rs +++ b/src/wallet.rs @@ -1,4 +1,5 @@ use { + self::persister::{DatabasePersister, TransactionPersister}, super::*, batch::ParentInfo, bdk::{keys::KeyMap, ChangeSet, KeychainKind, PersistedWallet, WalletPersister}, @@ -7,7 +8,7 @@ use { psbt::Psbt, secp256k1::Secp256k1, }, - database::{create_database, open_database, DatabasePersister, TransactionPersister}, + database::{create_database, open_database}, entry::{EtchingEntry, EtchingEntryValue}, fee_rate::FeeRate, index::entry::Entry, @@ -25,6 +26,7 @@ pub mod batch; pub mod database; pub mod descriptor; pub mod entry; +mod persister; pub mod transaction_builder; pub mod wallet_constructor; @@ -66,7 +68,6 @@ pub(crate) struct Wallet { has_rune_index: bool, has_sat_index: bool, ord_client: reqwest::blocking::Client, - persister: DatabasePersister, rpc_url: Url, settings: Settings, pub(crate) wallet: PersistedWallet, @@ -126,8 +127,9 @@ impl Wallet { } pub(crate) fn persist(&mut self) -> Result { - self.wallet.persist(&mut self.persister)?; - + self + .wallet + .persist(&mut DatabasePersister(self.database.clone()))?; Ok(()) } diff --git a/src/wallet/database.rs b/src/wallet/database.rs index 34d00c6a68..1905d4a6cd 100644 --- a/src/wallet/database.rs +++ b/src/wallet/database.rs @@ -1,62 +1,5 @@ -use bdk_wallet::chain::Merge; - use super::*; -pub(crate) struct TransactionPersister<'a>(pub(crate) &'a mut WriteTransaction); - -impl WalletPersister for TransactionPersister<'_> { - type Error = Error; - - fn initialize(persister: &mut Self) -> std::result::Result { - let wtx = &persister.0; - - let changeset = match wtx - .open_table(CHANGESET)? - .get(())? - .map(|result| result.value().to_string()) - { - Some(result) => serde_json::from_str::(result.as_str())?, - None => ChangeSet::default(), - }; - - Ok(changeset) - } - - fn persist(persister: &mut Self, changeset: &ChangeSet) -> std::result::Result<(), Self::Error> { - let mut current = Self::initialize(persister)?; - - current.merge(changeset.clone()); - - let wtx = &persister.0; - - wtx - .open_table(CHANGESET)? - .insert((), serde_json::to_string(¤t)?.as_str())?; - - Ok(()) - } -} - -pub(crate) struct DatabasePersister(pub(crate) Arc); - -impl WalletPersister for DatabasePersister { - type Error = Error; - - fn initialize(persister: &mut Self) -> std::result::Result { - TransactionPersister::initialize(&mut TransactionPersister(&mut persister.0.begin_write()?)) - } - - fn persist(persister: &mut Self, changeset: &ChangeSet) -> std::result::Result<(), Self::Error> { - let mut wtx = persister.0.begin_write()?; - - TransactionPersister::persist(&mut TransactionPersister(&mut wtx), changeset)?; - - wtx.commit()?; - - Ok(()) - } -} - pub(crate) fn create_database(wallet_name: &String, settings: &Settings) -> Result { let path = settings .data_dir() diff --git a/src/wallet/persister.rs b/src/wallet/persister.rs new file mode 100644 index 0000000000..eeeec9d34f --- /dev/null +++ b/src/wallet/persister.rs @@ -0,0 +1,56 @@ +use {super::*, bdk::chain::Merge}; + +pub(crate) struct TransactionPersister<'a>(pub(crate) &'a mut WriteTransaction); + +impl WalletPersister for TransactionPersister<'_> { + type Error = Error; + + fn initialize(persister: &mut Self) -> std::result::Result { + let wtx = &persister.0; + + let changeset = match wtx + .open_table(CHANGESET)? + .get(())? + .map(|result| result.value().to_string()) + { + Some(result) => serde_json::from_str::(result.as_str())?, + None => ChangeSet::default(), + }; + + Ok(changeset) + } + + fn persist(persister: &mut Self, changeset: &ChangeSet) -> std::result::Result<(), Self::Error> { + let mut current = Self::initialize(persister)?; + + current.merge(changeset.clone()); + + let wtx = &persister.0; + + wtx + .open_table(CHANGESET)? + .insert((), serde_json::to_string(¤t)?.as_str())?; + + Ok(()) + } +} + +pub(crate) struct DatabasePersister(pub(crate) Arc); + +impl WalletPersister for DatabasePersister { + type Error = Error; + + fn initialize(persister: &mut Self) -> std::result::Result { + TransactionPersister::initialize(&mut TransactionPersister(&mut persister.0.begin_write()?)) + } + + fn persist(persister: &mut Self, changeset: &ChangeSet) -> std::result::Result<(), Self::Error> { + let mut wtx = persister.0.begin_write()?; + + TransactionPersister::persist(&mut TransactionPersister(&mut wtx), changeset)?; + + wtx.commit()?; + + Ok(()) + } +} diff --git a/src/wallet/wallet_constructor.rs b/src/wallet/wallet_constructor.rs index ee681fec48..9285280f09 100644 --- a/src/wallet/wallet_constructor.rs +++ b/src/wallet/wallet_constructor.rs @@ -79,7 +79,6 @@ impl WalletConstructor { has_rune_index: status.rune_index, has_sat_index: status.sat_index, ord_client: self.ord_client, - persister, rpc_url: self.rpc_url, settings: self.settings, wallet,