Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
casey committed Mar 2, 2025
1 parent c2da1f5 commit e822f10
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 62 deletions.
10 changes: 6 additions & 4 deletions src/wallet.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use {
self::persister::{DatabasePersister, TransactionPersister},
super::*,
batch::ParentInfo,
bdk::{keys::KeyMap, ChangeSet, KeychainKind, PersistedWallet, WalletPersister},
Expand All @@ -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,
Expand All @@ -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;

Expand Down Expand Up @@ -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<DatabasePersister>,
Expand Down Expand Up @@ -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(())
}

Expand Down
57 changes: 0 additions & 57 deletions src/wallet/database.rs
Original file line number Diff line number Diff line change
@@ -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<ChangeSet, Self::Error> {
let wtx = &persister.0;

let changeset = match wtx
.open_table(CHANGESET)?
.get(())?
.map(|result| result.value().to_string())
{
Some(result) => serde_json::from_str::<ChangeSet>(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(&current)?.as_str())?;

Ok(())
}
}

pub(crate) struct DatabasePersister(pub(crate) Arc<Database>);

impl WalletPersister for DatabasePersister {
type Error = Error;

fn initialize(persister: &mut Self) -> std::result::Result<ChangeSet, Self::Error> {
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<Database> {
let path = settings
.data_dir()
Expand Down
56 changes: 56 additions & 0 deletions src/wallet/persister.rs
Original file line number Diff line number Diff line change
@@ -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<ChangeSet, Self::Error> {
let wtx = &persister.0;

let changeset = match wtx
.open_table(CHANGESET)?
.get(())?
.map(|result| result.value().to_string())
{
Some(result) => serde_json::from_str::<ChangeSet>(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(&current)?.as_str())?;

Ok(())
}
}

pub(crate) struct DatabasePersister(pub(crate) Arc<Database>);

impl WalletPersister for DatabasePersister {
type Error = Error;

fn initialize(persister: &mut Self) -> std::result::Result<ChangeSet, Self::Error> {
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(())
}
}
1 change: 0 additions & 1 deletion src/wallet/wallet_constructor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit e822f10

Please sign in to comment.