| 
					
				 | 
			
			
				@@ -256,9 +256,53 @@ impl<L: LocalStore> Mint<L> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             self.verify_proof(proof).await? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (secret, proof) in secrets.iter().zip(swap_request.inputs) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let input_keyset_ids: HashSet<Id> = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            swap_request.inputs.iter().map(|p| p.keyset_id).collect(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let mut keyset_units = Vec::with_capacity(input_keyset_ids.capacity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for id in input_keyset_ids { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let keyset = self 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .localstore 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .get_keyset(&id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .await? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .ok_or(Error::UnknownKeySet)?; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            keyset_units.push(keyset.unit); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let output_keyset_ids: HashSet<Id> = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            swap_request.outputs.iter().map(|p| p.keyset_id).collect(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for id in &output_keyset_ids { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let keyset = self 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .localstore 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .get_keyset(&id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .await? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .ok_or(Error::UnknownKeySet)?; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // Get the active keyset for the unit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let active_keyset_id = self 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .localstore 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .get_active_keyset_id(&keyset.unit) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .await? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .ok_or(Error::InactiveKeyset)?; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // Check output is for current active keyset 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if id.ne(&active_keyset_id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return Err(Error::InactiveKeyset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            keyset_units.push(keyset.unit); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // Check that all input and output proofs are the same unit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let seen_units: HashSet<CurrencyUnit> = HashSet::new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if keyset_units.iter().any(|unit| !seen_units.contains(unit)) && seen_units.len() != 1 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return Err(Error::MultipleUnits); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for proof in swap_request.inputs { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             self.localstore 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .add_spent_proof(secret.clone(), proof) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .add_spent_proof(proof.secret.clone(), proof) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .await 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .unwrap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 |