diff --git a/crates/cdk/src/mint/melt.rs b/crates/cdk/src/mint/melt.rs index 2f6c2c5e..09edc044 100644 --- a/crates/cdk/src/mint/melt.rs +++ b/crates/cdk/src/mint/melt.rs @@ -662,6 +662,7 @@ impl Mint { "Lightning payment for quote {} failed.", melt_request.quote() ); + proof_writer.rollback().await?; return Err(Error::PaymentFailed); } MeltQuoteState::Pending => { diff --git a/crates/cdk/src/mint/proof_writer.rs b/crates/cdk/src/mint/proof_writer.rs index a9919e91..eddfc534 100644 --- a/crates/cdk/src/mint/proof_writer.rs +++ b/crates/cdk/src/mint/proof_writer.rs @@ -143,13 +143,28 @@ impl ProofWriter { } /// Rollback all changes in this ProofWriter consuming it. - pub async fn rollback(mut self, tx: &mut Tx<'_, '_>) -> Result<(), Error> { + pub async fn rollback(mut self) -> Result<(), Error> { + let db = if let Some(db) = self.db.take() { + db + } else { + return Ok(()); + }; + let mut tx = db.begin_transaction().await?; let (ys, original_states) = if let Some(proofs) = self.proof_original_states.take() { proofs.into_iter().unzip::<_, _, Vec<_>, Vec<_>>() } else { return Ok(()); }; - reset_proofs_to_original_state(tx, &ys, original_states).await?; + + tracing::info!( + "Rollback {} proofs to their original states {:?}", + ys.len(), + original_states + ); + + reset_proofs_to_original_state(&mut tx, &ys, original_states).await?; + tx.commit().await?; + Ok(()) } }