Jelajahi Sumber

fix: mint publish quote back to unpaid on failure (#1597)

tsk 1 bulan lalu
induk
melakukan
c6243acb0b
2 mengubah file dengan 10 tambahan dan 5 penghapusan
  1. 1 3
      crates/cdk/src/mint/melt/mod.rs
  2. 9 2
      crates/cdk/src/mint/melt/shared.rs

+ 1 - 3
crates/cdk/src/mint/melt/mod.rs

@@ -661,14 +661,12 @@ impl Mint {
             }
         });
 
-        debug_assert!(quote.state == MeltQuoteState::Pending);
-
         // Return immediately with the quote in PENDING state
         Ok(MeltQuoteBolt11Response {
             quote: quote_id,
             amount: quote.amount().into(),
             fee_reserve: quote.fee_reserve().into(),
-            state: quote.state,
+            state: MeltQuoteState::Pending,
             expiry: quote.expiry,
             payment_preimage: None,
             change: None,

+ 9 - 2
crates/cdk/src/mint/melt/shared.rs

@@ -119,7 +119,7 @@ pub async fn rollback_melt_quote(
     }
 
     // Get and lock the quote, then reset state from Pending to Unpaid
-    if let Some(mut quote) = tx.get_melt_quote(quote_id).await? {
+    let quote_option = if let Some(mut quote) = tx.get_melt_quote(quote_id).await? {
         let previous_state = tx
             .update_melt_quote_state(&mut quote, MeltQuoteState::Unpaid, None)
             .await?;
@@ -130,7 +130,10 @@ pub async fn rollback_melt_quote(
                 previous_state
             );
         }
-    }
+        Some(quote)
+    } else {
+        None
+    };
 
     // Delete melt request tracking record
     tx.delete_melt_request(quote_id).await?;
@@ -154,6 +157,10 @@ pub async fn rollback_melt_quote(
         }
     }
 
+    if let Some(quote) = quote_option {
+        pubsub.melt_quote_status(&*quote, None, None, MeltQuoteState::Unpaid);
+    }
+
     tracing::info!(
         "Successfully rolled back melt quote {} and deleted saga {}",
         quote_id,