From 62e0879d8c1be95d2bbbe3fc743dd336b7fd5351 Mon Sep 17 00:00:00 2001 From: thesimplekid Date: Tue, 13 Aug 2024 02:28:23 +0100 Subject: [PATCH] fix(mint): check sig flag even if no inputs included --- crates/cdk/src/mint/mod.rs | 52 +++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/crates/cdk/src/mint/mod.rs b/crates/cdk/src/mint/mod.rs index ee1a6f0c..a037da07 100644 --- a/crates/cdk/src/mint/mod.rs +++ b/crates/cdk/src/mint/mod.rs @@ -857,26 +857,6 @@ impl Mint { &self, melt_request: &MeltBolt11Request, ) -> Result { - let ys: Vec = melt_request - .inputs - .iter() - .flat_map(|p| hash_to_curve(&p.secret.to_bytes())) - .collect(); - - // Ensure proofs are unique and not being double spent - if melt_request.inputs.len() != ys.iter().collect::>().len() { - return Err(Error::DuplicateProofs); - } - - self.localstore - .add_proofs(melt_request.inputs.clone()) - .await?; - self.check_ys_spendable(&ys, State::Pending).await?; - - for proof in &melt_request.inputs { - self.verify_proof(proof).await?; - } - let state = self .localstore .update_melt_quote_state(&melt_request.quote, MeltQuoteState::Pending) @@ -892,6 +872,26 @@ impl Mint { } } + let ys = melt_request + .inputs + .iter() + .map(|p| hash_to_curve(&p.secret.to_bytes())) + .collect::, _>>()?; + + // Ensure proofs are unique and not being double spent + if melt_request.inputs.len() != ys.iter().collect::>().len() { + return Err(Error::DuplicateProofs); + } + + self.localstore + .add_proofs(melt_request.inputs.clone()) + .await?; + self.check_ys_spendable(&ys, State::Pending).await?; + + for proof in &melt_request.inputs { + self.verify_proof(proof).await?; + } + let quote = self .localstore .get_melt_quote(&melt_request.quote) @@ -933,13 +933,13 @@ impl Mint { keyset_units.insert(keyset.unit); } + let EnforceSigFlag { sig_flag, .. } = enforce_sig_flag(melt_request.inputs.clone()); + + if sig_flag.eq(&SigFlag::SigAll) { + return Err(Error::SigAllUsedInMelt); + } + if let Some(outputs) = &melt_request.outputs { - let EnforceSigFlag { sig_flag, .. } = enforce_sig_flag(melt_request.inputs.clone()); - - if sig_flag.eq(&SigFlag::SigAll) { - return Err(Error::SigAllUsedInMelt); - } - let output_keysets_ids: HashSet = outputs.iter().map(|b| b.keyset_id).collect(); for id in output_keysets_ids { let keyset = self