diff --git a/crates/cdk-fake-wallet/src/lib.rs b/crates/cdk-fake-wallet/src/lib.rs index 80e221ea..aeb80790 100644 --- a/crates/cdk-fake-wallet/src/lib.rs +++ b/crates/cdk-fake-wallet/src/lib.rs @@ -327,7 +327,7 @@ pub struct FakeWallet { fee_reserve: FeeReserve, sender: tokio::sync::mpsc::Sender, receiver: Arc>>>, - payment_states: Arc>>, + payment_states: Arc>>, failed_payment_check: Arc>>, payment_delay: u64, wait_invoice_cancel_token: CancellationToken, @@ -342,7 +342,7 @@ impl FakeWallet { /// Create new [`FakeWallet`] pub fn new( fee_reserve: FeeReserve, - payment_states: HashMap, + payment_states: HashMap, fail_payment_check: HashSet, payment_delay: u64, unit: CurrencyUnit, @@ -360,7 +360,7 @@ impl FakeWallet { /// Create new [`FakeWallet`] with custom secondary repayment queue size pub fn new_with_repay_queue_size( fee_reserve: FeeReserve, - payment_states: HashMap, + payment_states: HashMap, fail_payment_check: HashSet, payment_delay: u64, unit: CurrencyUnit, @@ -563,7 +563,22 @@ impl MintPayment for FakeWallet { .map(|s| s.check_payment_state) .unwrap_or(MeltQuoteState::Paid); - payment_states.insert(payment_hash.clone(), checkout_going_status); + let amount_msat: u64 = if let Some(melt_options) = bolt11_options.melt_options { + melt_options.amount_msat().into() + } else { + // Fall back to invoice amount + bolt11 + .amount_milli_satoshis() + .ok_or(Error::UnknownInvoiceAmount)? + }; + + let amount_spent = if checkout_going_status == MeltQuoteState::Paid { + amount_msat.into() + } else { + Amount::ZERO + }; + + payment_states.insert(payment_hash.clone(), (checkout_going_status, amount_spent)); if let Some(description) = status { if description.check_err { @@ -574,15 +589,6 @@ impl MintPayment for FakeWallet { ensure_cdk!(!description.pay_err, Error::UnknownInvoice.into()); } - let amount_msat: u64 = if let Some(melt_options) = bolt11_options.melt_options { - melt_options.amount_msat().into() - } else { - // Fall back to invoice amount - bolt11 - .amount_milli_satoshis() - .ok_or(Error::UnknownInvoiceAmount)? - }; - let total_spent = convert_currency_amount( amount_msat, &CurrencyUnit::Msat, @@ -784,7 +790,7 @@ impl MintPayment for FakeWallet { let states = self.payment_states.lock().await; let status = states.get(&request_lookup_id.to_string()).cloned(); - let status = status.unwrap_or(MeltQuoteState::Paid); + let (status, total_spent) = status.unwrap_or((MeltQuoteState::Unknown, Amount::default())); let fail_payments = self.failed_payment_check.lock().await; @@ -796,7 +802,7 @@ impl MintPayment for FakeWallet { payment_proof: Some("".to_string()), payment_lookup_id: request_lookup_id.clone(), status, - total_spent: Amount::ZERO, + total_spent, unit: CurrencyUnit::Msat, }) }