diff --git a/bindings/cdk-js/src/wallet.rs b/bindings/cdk-js/src/wallet.rs index 1799c1cf..78376fb1 100644 --- a/bindings/cdk-js/src/wallet.rs +++ b/bindings/cdk-js/src/wallet.rs @@ -54,13 +54,10 @@ impl JsWallet { } #[wasm_bindgen(js_name = totalPendingBalance)] - pub async fn total_pending_balance(&self) -> Result { - Ok(self - .inner - .total_pending_balance() - .await - .map_err(into_err)? - .into()) + pub async fn total_pending_balance(&self) -> Result { + Ok(serde_wasm_bindgen::to_value( + &self.inner.total_pending_balance().await.map_err(into_err)?, + )?) } #[wasm_bindgen(js_name = checkAllPendingProofs)] diff --git a/crates/cdk/src/wallet.rs b/crates/cdk/src/wallet.rs index e0ecbd13..0d8edf62 100644 --- a/crates/cdk/src/wallet.rs +++ b/crates/cdk/src/wallet.rs @@ -159,20 +159,28 @@ impl Wallet { /// Total Balance of wallet #[instrument(skip(self))] - pub async fn total_pending_balance(&self) -> Result { - let mut balance = Amount::ZERO; + pub async fn total_pending_balance(&self) -> Result, Error> { + let mut balances = HashMap::new(); if let Some(proofs) = self .localstore - .get_proofs(None, None, Some(vec![State::Pending]), None) + .get_proofs( + None, + None, + Some(vec![State::Pending, State::Reserved]), + None, + ) .await? { - let amount = proofs.iter().map(|p| p.proof.amount).sum(); - - balance += amount; + for proof in proofs { + balances + .entry(proof.unit) + .and_modify(|ps| *ps += proof.proof.amount) + .or_insert(proof.proof.amount); + } } - Ok(balance) + Ok(balances) } #[instrument(skip(self))]