From 7080c37532d0578dfbfdde938a7c0a1afd3c1adf Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Tue, 18 Oct 2022 12:37:12 -0600 Subject: [PATCH] Prepare keys only once in decrypt_outputs_with_keys --- src/bundle.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/bundle.rs b/src/bundle.rs index 2e924fa9..239cce7c 100644 --- a/src/bundle.rs +++ b/src/bundle.rs @@ -284,15 +284,18 @@ impl Bundle { &self, keys: &[IncomingViewingKey], ) -> Vec<(usize, IncomingViewingKey, Note, Address, [u8; 512])> { + let prepared_keys: Vec<_> = keys + .iter() + .map(|ivk| (ivk, PreparedIncomingViewingKey::new(ivk))) + .collect(); self.actions .iter() .enumerate() .filter_map(|(idx, action)| { let domain = OrchardDomain::for_action(action); - keys.iter().find_map(move |ivk| { - let prepared_ivk = PreparedIncomingViewingKey::new(ivk); - try_note_decryption(&domain, &prepared_ivk, action) - .map(|(n, a, m)| (idx, ivk.clone(), n, a, m)) + prepared_keys.iter().find_map(|(ivk, prepared_ivk)| { + try_note_decryption(&domain, prepared_ivk, action) + .map(|(n, a, m)| (idx, (*ivk).clone(), n, a, m)) }) }) .collect()