From d9fb5f814a745098c8a3c4ac8784ce2d28f52139 Mon Sep 17 00:00:00 2001 From: thesimplekid Date: Wed, 30 Oct 2024 21:43:27 +0000 Subject: [PATCH] feat: allow minting after expiry --- crates/cdk/src/mint/mint_nut04.rs | 57 ++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/crates/cdk/src/mint/mint_nut04.rs b/crates/cdk/src/mint/mint_nut04.rs index 91ead8baf..7d46263db 100644 --- a/crates/cdk/src/mint/mint_nut04.rs +++ b/crates/cdk/src/mint/mint_nut04.rs @@ -198,13 +198,41 @@ impl Mint { .await { tracing::debug!( - "Quote {} paid by lookup id {}", - mint_quote.id, - request_lookup_id + "Received payment notification for mint quote {}", + mint_quote.id ); - self.localstore - .update_mint_quote_state(&mint_quote.id, MintQuoteState::Paid) - .await?; + + if mint_quote.state != MintQuoteState::Issued + && mint_quote.state != MintQuoteState::Paid + { + let unix_time = unix_time(); + + if mint_quote.expiry < unix_time { + tracing::warn!( + "Mint quote {} paid at {} expired at {}, leaving current state", + mint_quote.id, + mint_quote.expiry, + unix_time, + ); + return Err(Error::ExpiredQuote(mint_quote.expiry, unix_time)); + } + + tracing::debug!( + "Marking quote {} paid by lookup id {}", + mint_quote.id, + request_lookup_id + ); + + self.localstore + .update_mint_quote_state(&mint_quote.id, MintQuoteState::Paid) + .await?; + } else { + tracing::debug!( + "{} Quote already {} continuing", + mint_quote.id, + mint_quote.state + ); + } } Ok(()) } @@ -215,16 +243,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