From b93c5032630ca847c89d7f61d021fdb91260cc79 Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Sat, 5 Jun 2021 10:15:35 -0600 Subject: [PATCH] Deserialize signatures directly into actions. Co-authored-by: str4d --- zcash_primitives/src/transaction/mod.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 1e6649600..f9ab38296 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -744,25 +744,25 @@ impl Transaction { if actions_without_auth.is_empty() { Ok(None) } else { - let n_actions = actions_without_auth.len(); let flags = orchard_serialization::read_flags(&mut reader)?; let value_balance = Self::read_amount(&mut reader)?; let anchor = orchard_serialization::read_anchor(&mut reader)?; let proof_bytes = Vector::read(&mut reader, |r| r.read_u8())?; - let spend_sigs = Array::read(&mut reader, n_actions, |r| { - orchard_serialization::read_signature::<_, redpallas::SpendAuth>(r) - })?; - let binding_signature = - orchard_serialization::read_signature::<_, redpallas::Binding>(&mut reader)?; - let actions = NonEmpty::from_vec( actions_without_auth .into_iter() - .zip(spend_sigs.into_iter()) - .map(|(act, sig)| act.map(|_| sig)) - .collect(), + .map(|act| { + act.try_map(|_| { + orchard_serialization::read_signature::<_, redpallas::SpendAuth>( + &mut reader, + ) + }) + }) + .collect::, _>>()?, ) .expect("A nonzero number of actions was read from the transaction data."); + let binding_signature = + orchard_serialization::read_signature::<_, redpallas::Binding>(&mut reader)?; let authorization = orchard::bundle::Authorized::from_parts( orchard::Proof::new(proof_bytes),