From 1aba927f1398ca8312a4c48a632849d4ae987626 Mon Sep 17 00:00:00 2001 From: Dr Maxim Orlovsky Date: Sat, 7 Sep 2024 18:47:03 +0200 Subject: [PATCH] wallet: save cache upon updates. Closes #69 --- src/indexers/electrum.rs | 18 +++++++++--------- src/indexers/esplora.rs | 18 +++++++++--------- src/wallet.rs | 8 +------- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/indexers/electrum.rs b/src/indexers/electrum.rs index a2cd2d1..a5207cf 100644 --- a/src/indexers/electrum.rs +++ b/src/indexers/electrum.rs @@ -67,6 +67,14 @@ impl Indexer for Client { descriptor: &WalletDescr, ) -> MayError, Vec> { let mut cache = WalletCache::new_nonsync(descriptor.generator()); + self.update::(descriptor, &mut cache).map(|_| cache) + } + + fn update, L2: Layer2>( + &self, + descriptor: &WalletDescr, + cache: &mut WalletCache, + ) -> MayError> { let mut errors = Vec::::new(); let mut address_index = BTreeMap::new(); @@ -271,15 +279,7 @@ impl Indexer for Client { .insert(wallet_addr.expect_transmute()); } - if errors.is_empty() { MayError::ok(cache) } else { MayError::err(cache, errors) } - } - - fn update, L2: Layer2>( - &self, - _descr: &WalletDescr, - _cache: &mut WalletCache, - ) -> MayError> { - todo!() + if errors.is_empty() { MayError::ok(0) } else { MayError::err(0, errors) } } fn publish(&self, tx: &Tx) -> Result<(), Self::Error> { diff --git a/src/indexers/esplora.rs b/src/indexers/esplora.rs index 6e6545b..349ce90 100644 --- a/src/indexers/esplora.rs +++ b/src/indexers/esplora.rs @@ -197,6 +197,14 @@ impl Indexer for Client { descriptor: &WalletDescr, ) -> MayError, Vec> { let mut cache = WalletCache::new_nonsync(descriptor.generator()); + self.update::(descriptor, &mut cache).map(|_| cache) + } + + fn update, L2: Layer2>( + &self, + descriptor: &WalletDescr, + cache: &mut WalletCache, + ) -> MayError> { let mut errors = vec![]; let mut address_index = BTreeMap::new(); @@ -302,15 +310,7 @@ impl Indexer for Client { .insert(wallet_addr.expect_transmute()); } - if errors.is_empty() { MayError::ok(cache) } else { MayError::err(cache, errors) } - } - - fn update, L2: Layer2>( - &self, - _descr: &WalletDescr, - _cache: &mut WalletCache, - ) -> MayError> { - todo!() + if errors.is_empty() { MayError::ok(0) } else { MayError::err(0, errors) } } fn publish(&self, tx: &Tx) -> Result<(), Self::Error> { self.inner.broadcast(tx) } diff --git a/src/wallet.rs b/src/wallet.rs index 02d8795..c53067f 100644 --- a/src/wallet.rs +++ b/src/wallet.rs @@ -465,13 +465,7 @@ impl, L2: Layer2> Wallet { } pub fn update(&mut self, indexer: &I) -> MayError<(), Vec> { - // Not yet implemented: - // self.cache.update::(&self.descr, &self.indexer) - - WalletCache::with::<_, K, _, L2>(&self.descr, indexer).map(|cache| { - self.cache = cache; - self.cache.mark_dirty(); - }) + self.cache.update::(&self.descr, indexer).map(|_| ()) } pub fn to_deriver(&self) -> D