From 2251a824045366f148cd0c8214a41e77ef30d7b0 Mon Sep 17 00:00:00 2001 From: Yeastplume Date: Thu, 23 Aug 2018 18:53:42 +0100 Subject: [PATCH] batch verify proofs during validation (#1412) * batch verify proofs during validation * don't attempt to batch verify proofs with empty vec --- core/src/core/transaction.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/src/core/transaction.rs b/core/src/core/transaction.rs index 954e3667b..32b9ff194 100644 --- a/core/src/core/transaction.rs +++ b/core/src/core/transaction.rs @@ -457,9 +457,18 @@ impl TransactionBody { /// Verify all the output rangeproofs. /// Note: this is expensive. fn verify_rangeproofs(&self) -> Result<(), Error> { - for x in &self.outputs { - x.verify_proof()?; + let mut commits: Vec = vec![]; + let mut proofs: Vec = vec![]; + if self.outputs.len() == 0 { + return Ok(()); } + // unfortunately these have to be aligned in memory for the underlying + // libsecp call + for x in &self.outputs { + commits.push(x.commit.clone()); + proofs.push(x.proof.clone()); + } + Output::batch_verify_proofs(&commits, &proofs)?; Ok(()) }