Skip to content

Commit 6883c28

Browse files
committed
remove unnecessary vec allocations
1 parent 6bf1084 commit 6883c28

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

src/range_proof/mod.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,12 @@ impl RangeProof {
164164
V: AsRef<[RistrettoPoint]>
165165
{
166166
let mut nm: usize = 0;
167-
let mut dyn_bases_count:usize = 0;
168167
let batch = proofs.into_iter().map(|(p, vcs, n)| {
169168
let m = vcs.as_ref().len();
170169
let v = p.borrow().prepare_verification(n, vcs, &mut transcript.clone(), rng);
171-
dyn_bases_count += m /*V*/ + 4 /*A,S,T1,T2*/ + 2*p.borrow().ipp_proof.L_vec.len() /*{L,R}*/;
172170
nm = nm.max(n*m);
173171
v
174-
}).collect::<Vec<_>>(); // we need to collect here so that nm and dyn_bases_count are computed.
172+
}).collect::<Vec<_>>();
175173

176174
if gens.G.len() < nm {
177175
return Err(
@@ -184,12 +182,16 @@ impl RangeProof {
184182
let mut g_scalars: Vec<Scalar> = iter::repeat(Scalar::zero()).take(nm).collect();
185183
let mut h_scalars: Vec<Scalar> = iter::repeat(Scalar::zero()).take(nm).collect();
186184

187-
let mut dynamic_base_scalars: Vec<Scalar> = Vec::with_capacity(dyn_bases_count);
188-
let mut dynamic_bases: Vec<RistrettoPoint> = Vec::with_capacity(dyn_bases_count);
185+
let dynamic_base_scalars = batch.iter().flat_map(|v| {
186+
v.dynamic_base_scalars.iter()
187+
});
188+
let dynamic_bases = batch.iter().flat_map(|v| {
189+
v.dynamic_bases.iter()
190+
});
189191

190192
// All statements are added up. Each scalar in each statement
191193
// already has a challenge pre-multiplied in `prepare_verification`.
192-
for verification in batch {
194+
for verification in &batch {
193195

194196
pedersen_base_scalars.0 += verification.pedersen_base_scalars.0;
195197
pedersen_base_scalars.1 += verification.pedersen_base_scalars.1;
@@ -201,22 +203,19 @@ impl RangeProof {
201203
for (i, s) in verification.h_scalars.iter().enumerate() {
202204
h_scalars[i] += s;
203205
}
204-
205-
dynamic_base_scalars.extend(verification.dynamic_base_scalars);
206-
dynamic_bases.extend(verification.dynamic_bases);
207206
}
208207

209208
let mega_check = ristretto::vartime::multiscalar_mul(
210209
iter::once(&pedersen_base_scalars.0)
211210
.chain(iter::once(&pedersen_base_scalars.1))
212211
.chain(g_scalars.iter())
213212
.chain(h_scalars.iter())
214-
.chain(dynamic_base_scalars.iter()),
213+
.chain(dynamic_base_scalars),
215214
iter::once(&gens.pedersen_generators.B)
216215
.chain(iter::once(&gens.pedersen_generators.B_blinding))
217216
.chain(gens.G.iter().take(nm))
218217
.chain(gens.H.iter().take(nm))
219-
.chain(dynamic_bases.iter()),
218+
.chain(dynamic_bases),
220219
);
221220

222221
if mega_check.is_identity() {

0 commit comments

Comments
 (0)