Browse Source

fix(mint): check sig flag even if no inputs included

thesimplekid 7 months ago
parent
commit
62e0879d8c
1 changed files with 23 additions and 23 deletions
  1. 23 23
      crates/cdk/src/mint/mod.rs

+ 23 - 23
crates/cdk/src/mint/mod.rs

@@ -857,11 +857,26 @@ impl Mint {
         &self,
         melt_request: &MeltBolt11Request,
     ) -> Result<MeltQuote, Error> {
-        let ys: Vec<PublicKey> = melt_request
+        let state = self
+            .localstore
+            .update_melt_quote_state(&melt_request.quote, MeltQuoteState::Pending)
+            .await?;
+
+        match state {
+            MeltQuoteState::Unpaid => (),
+            MeltQuoteState::Pending => {
+                return Err(Error::PendingQuote);
+            }
+            MeltQuoteState::Paid => {
+                return Err(Error::PaidQuote);
+            }
+        }
+
+        let ys = melt_request
             .inputs
             .iter()
-            .flat_map(|p| hash_to_curve(&p.secret.to_bytes()))
-            .collect();
+            .map(|p| hash_to_curve(&p.secret.to_bytes()))
+            .collect::<Result<Vec<PublicKey>, _>>()?;
 
         // Ensure proofs are unique and not being double spent
         if melt_request.inputs.len() != ys.iter().collect::<HashSet<_>>().len() {
@@ -877,21 +892,6 @@ impl Mint {
             self.verify_proof(proof).await?;
         }
 
-        let state = self
-            .localstore
-            .update_melt_quote_state(&melt_request.quote, MeltQuoteState::Pending)
-            .await?;
-
-        match state {
-            MeltQuoteState::Unpaid => (),
-            MeltQuoteState::Pending => {
-                return Err(Error::PendingQuote);
-            }
-            MeltQuoteState::Paid => {
-                return Err(Error::PaidQuote);
-            }
-        }
-
         let quote = self
             .localstore
             .get_melt_quote(&melt_request.quote)
@@ -933,13 +933,13 @@ impl Mint {
             keyset_units.insert(keyset.unit);
         }
 
-        if let Some(outputs) = &melt_request.outputs {
-            let EnforceSigFlag { sig_flag, .. } = enforce_sig_flag(melt_request.inputs.clone());
+        let EnforceSigFlag { sig_flag, .. } = enforce_sig_flag(melt_request.inputs.clone());
 
-            if sig_flag.eq(&SigFlag::SigAll) {
-                return Err(Error::SigAllUsedInMelt);
-            }
+        if sig_flag.eq(&SigFlag::SigAll) {
+            return Err(Error::SigAllUsedInMelt);
+        }
 
+        if let Some(outputs) = &melt_request.outputs {
             let output_keysets_ids: HashSet<Id> = outputs.iter().map(|b| b.keyset_id).collect();
             for id in output_keysets_ids {
                 let keyset = self