From 3075ac4e5937042dc53aa833a328cb6cbec39e31 Mon Sep 17 00:00:00 2001 From: C Date: Wed, 8 Oct 2025 17:52:40 -0300 Subject: [PATCH] Read the latest mint quote status in a transaction to avoid race conditions (#1166) * Read the latest mint quote status in a transaction to avoid race conditions Fixes #1162 * Reload quote for all cases * Exit on paid invoices only for bolt11 --- crates/cdk/src/mint/ln.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/crates/cdk/src/mint/ln.rs b/crates/cdk/src/mint/ln.rs index 447b0e3e..9e4b5961 100644 --- a/crates/cdk/src/mint/ln.rs +++ b/crates/cdk/src/mint/ln.rs @@ -45,6 +45,20 @@ impl Mint { let mut tx = self.localstore.begin_transaction().await?; + // reload the quote, as it state may have changed + *quote = tx + .get_mint_quote("e.id) + .await? + .ok_or(Error::UnknownQuote)?; + + let current_state = quote.state(); + + if quote.payment_method == PaymentMethod::Bolt11 + && (current_state == MintQuoteState::Issued || current_state == MintQuoteState::Paid) + { + return Ok(()); + } + for payment in ln_status { if !quote.payment_ids().contains(&&payment.payment_id) && payment.payment_amount > Amount::ZERO