From e86fd7f69b186c7bdd896a888a5d215663e6d6f9 Mon Sep 17 00:00:00 2001 From: Tony Giorgio Date: Fri, 26 Jan 2024 17:57:38 -0600 Subject: [PATCH] Scan for fedimint ecash --- mutiny-core/src/federation.rs | 11 +++++++++++ mutiny-core/src/lib.rs | 17 +++++++++++++++++ mutiny-wasm/src/lib.rs | 8 ++++++++ 3 files changed, 36 insertions(+) diff --git a/mutiny-core/src/federation.rs b/mutiny-core/src/federation.rs index c5c1f75a4..e3cb68c5c 100644 --- a/mutiny-core/src/federation.rs +++ b/mutiny-core/src/federation.rs @@ -533,6 +533,17 @@ impl FederationClient { pub async fn delete_fedimint_storage(&self) -> Result<(), MutinyError> { self.fedimint_storage.delete_store().await } + + pub async fn recover_backup(&self) -> Result<(), MutinyError> { + self.fedimint_client + .restore_from_backup(None) + .await + .map_err(|e| { + log_error!(self.logger, "Could not restore from backup: {}", e); + e + })?; + Ok(()) + } } // A federation private key will be derived from diff --git a/mutiny-core/src/lib.rs b/mutiny-core/src/lib.rs index 4b514f7bf..0e12c563a 100644 --- a/mutiny-core/src/lib.rs +++ b/mutiny-core/src/lib.rs @@ -1714,6 +1714,23 @@ impl MutinyWallet { Ok(()) } + pub async fn recover_federation_backups(&self) -> Result<(), MutinyError> { + let federation_ids = self.list_federation_ids().await?; + + let federations = self.federations.read().await; + for fed_id in federation_ids { + federations + .get(&fed_id) + .ok_or(MutinyError::NotFound)? + .recover_backup() + .await?; + + log_info!(self.logger, "Scanned federation backups: {}", fed_id); + } + + Ok(()) + } + pub async fn get_total_federation_balance(&self) -> Result { let federation_ids = self.list_federation_ids().await?; let mut total_balance = 0; diff --git a/mutiny-wasm/src/lib.rs b/mutiny-wasm/src/lib.rs index fd34a152b..18d45b9d2 100644 --- a/mutiny-wasm/src/lib.rs +++ b/mutiny-wasm/src/lib.rs @@ -1116,6 +1116,14 @@ impl MutinyWallet { Ok(self.inner.get_federation_balances().await?.into()) } + /// Scans all federations for user ecash. + /// + /// This can be useful if you think you have some federation funds missing. + #[wasm_bindgen] + pub async fn recover_federation_backups(&mut self) -> Result<(), MutinyJsError> { + Ok(self.inner.recover_federation_backups().await?) + } + pub fn get_address_labels( &self, ) -> Result> */, MutinyJsError> {