diff --git a/crates/cdk/src/mint/mint_nut04.rs b/crates/cdk/src/mint/mint_nut04.rs index 33e0c324..03c2d66e 100644 --- a/crates/cdk/src/mint/mint_nut04.rs +++ b/crates/cdk/src/mint/mint_nut04.rs @@ -200,14 +200,31 @@ impl Mint { .get_mint_quote_by_request_lookup_id(request_lookup_id) .await { - tracing::debug!( - "Quote {} paid by lookup id {}", - mint_quote.id, - request_lookup_id - ); - self.localstore - .update_mint_quote_state(&mint_quote.id, MintQuoteState::Paid) - .await?; + if mint_quote.state != MintQuoteState::Issued + && mint_quote.state != MintQuoteState::Paid + { + tracing::debug!( + "Quote {} paid by lookup id {}", + mint_quote.id, + request_lookup_id + ); + + let unix_time = unix_time(); + + if mint_quote.expiry < unix_time { + tracing::warn!( + "Mint quote {} paid at {} expired at {}", + mint_quote.id, + mint_quote.expiry, + unix_time + ); + return Err(Error::ExpiredQuote(mint_quote.expiry, unix_time)); + } + + self.localstore + .update_mint_quote_state(&mint_quote.id, MintQuoteState::Paid) + .await?; + } } Ok(()) } @@ -218,16 +235,13 @@ impl Mint { &self, mint_request: nut04::MintBolt11Request, ) -> Result { - // Check quote is known and not expired - match self.localstore.get_mint_quote(&mint_request.quote).await? { - Some(quote) => { - if quote.expiry < unix_time() { - return Err(Error::ExpiredQuote(quote.expiry, unix_time())); - } - } - None => { - return Err(Error::UnknownQuote); - } + if self + .localstore + .get_mint_quote(&mint_request.quote) + .await? + .is_none() + { + return Err(Error::UnknownQuote); } let state = self