Skip to content

Commit e658b96

Browse files
committed
Fix VerifierIndexCached for rampup4
Use destructuring to spot changes in `VerifierIndex`
1 parent 9a6bc05 commit e658b96

File tree

1 file changed

+111
-46
lines changed

1 file changed

+111
-46
lines changed

ledger/src/proofs/caching.rs

Lines changed: 111 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,12 @@ struct VerifierIndexCached {
214214
mul_comm: PolyComm<Pallas>,
215215
emul_comm: PolyComm<Pallas>,
216216
endomul_scalar_comm: PolyComm<Pallas>,
217+
range_check0_comm: Option<PolyComm<Pallas>>,
218+
range_check1_comm: Option<PolyComm<Pallas>>,
217219
foreign_field_add_comm: Option<PolyComm<Pallas>>,
220+
foreign_field_mul_comm: Option<PolyComm<Pallas>>,
218221
xor_comm: Option<PolyComm<Pallas>>,
222+
rot_comm: Option<PolyComm<Pallas>>,
219223
shift: [BigInt; PERMUTS], // Fq
220224
zkpm: DensePolynomialCached,
221225
w: BigInt, // Fq
@@ -275,56 +279,117 @@ where
275279

276280
impl From<&VerifierIndex<Pallas>> for VerifierIndexCached {
277281
fn from(v: &VerifierIndex<Pallas>) -> Self {
282+
let VerifierIndex {
283+
domain,
284+
max_poly_size,
285+
srs,
286+
public,
287+
prev_challenges,
288+
sigma_comm,
289+
coefficients_comm,
290+
generic_comm,
291+
psm_comm,
292+
complete_add_comm,
293+
mul_comm,
294+
emul_comm,
295+
endomul_scalar_comm,
296+
range_check0_comm,
297+
range_check1_comm,
298+
foreign_field_add_comm,
299+
foreign_field_mul_comm,
300+
xor_comm,
301+
rot_comm,
302+
shift,
303+
zkpm,
304+
w,
305+
endo,
306+
lookup_index,
307+
linearization,
308+
powers_of_alpha: _, // ignored
309+
} = v;
310+
278311
Self {
279-
domain: (&v.domain).into(),
280-
max_poly_size: v.max_poly_size,
281-
srs: (&**v.srs.get().unwrap()).into(),
282-
public: v.public,
283-
prev_challenges: v.prev_challenges,
284-
sigma_comm: v.sigma_comm.clone(),
285-
coefficients_comm: v.coefficients_comm.clone(),
286-
generic_comm: v.generic_comm.clone(),
287-
psm_comm: v.psm_comm.clone(),
288-
complete_add_comm: v.complete_add_comm.clone(),
289-
mul_comm: v.mul_comm.clone(),
290-
emul_comm: v.emul_comm.clone(),
291-
endomul_scalar_comm: v.endomul_scalar_comm.clone(),
292-
foreign_field_add_comm: v.foreign_field_add_comm.clone(),
293-
xor_comm: v.xor_comm.clone(),
294-
shift: std::array::from_fn(|i| v.shift[i].into()),
295-
zkpm: v.zkpm.get().unwrap().into(),
296-
w: (*v.w.get().unwrap()).into(),
297-
endo: v.endo.into(),
298-
lookup_index: v.lookup_index.clone(),
299-
linearization: conv_linearization(&v.linearization),
312+
domain: domain.into(),
313+
max_poly_size: *max_poly_size,
314+
srs: (&**srs.get().unwrap()).into(),
315+
public: *public,
316+
prev_challenges: *prev_challenges,
317+
sigma_comm: sigma_comm.clone(),
318+
coefficients_comm: coefficients_comm.clone(),
319+
generic_comm: generic_comm.clone(),
320+
psm_comm: psm_comm.clone(),
321+
complete_add_comm: complete_add_comm.clone(),
322+
mul_comm: mul_comm.clone(),
323+
emul_comm: emul_comm.clone(),
324+
endomul_scalar_comm: endomul_scalar_comm.clone(),
325+
range_check0_comm: range_check0_comm.clone(),
326+
range_check1_comm: range_check1_comm.clone(),
327+
foreign_field_add_comm: foreign_field_add_comm.clone(),
328+
foreign_field_mul_comm: foreign_field_mul_comm.clone(),
329+
xor_comm: xor_comm.clone(),
330+
rot_comm: rot_comm.clone(),
331+
shift: std::array::from_fn(|i| shift[i].into()),
332+
zkpm: zkpm.get().unwrap().into(),
333+
w: (*w.get().unwrap()).into(),
334+
endo: endo.into(),
335+
lookup_index: lookup_index.clone(),
336+
linearization: conv_linearization(&linearization),
300337
}
301338
}
302339
}
303340

304341
impl From<&VerifierIndexCached> for VerifierIndex<Pallas> {
305342
fn from(v: &VerifierIndexCached) -> Self {
343+
let VerifierIndexCached {
344+
domain,
345+
max_poly_size,
346+
srs,
347+
public,
348+
prev_challenges,
349+
sigma_comm,
350+
coefficients_comm,
351+
generic_comm,
352+
psm_comm,
353+
complete_add_comm,
354+
mul_comm,
355+
emul_comm,
356+
endomul_scalar_comm,
357+
range_check0_comm,
358+
range_check1_comm,
359+
foreign_field_add_comm,
360+
foreign_field_mul_comm,
361+
xor_comm,
362+
rot_comm,
363+
shift,
364+
zkpm,
365+
w,
366+
endo,
367+
lookup_index,
368+
linearization,
369+
} = v;
370+
306371
Self {
307-
domain: (&v.domain).into(),
308-
max_poly_size: v.max_poly_size,
309-
srs: OnceCell::with_value(Arc::new((&v.srs).into())),
310-
public: v.public,
311-
prev_challenges: v.prev_challenges,
312-
sigma_comm: v.sigma_comm.clone(),
313-
coefficients_comm: v.coefficients_comm.clone(),
314-
generic_comm: v.generic_comm.clone(),
315-
psm_comm: v.psm_comm.clone(),
316-
complete_add_comm: v.complete_add_comm.clone(),
317-
mul_comm: v.mul_comm.clone(),
318-
emul_comm: v.emul_comm.clone(),
319-
endomul_scalar_comm: v.endomul_scalar_comm.clone(),
320-
foreign_field_add_comm: v.foreign_field_add_comm.clone(),
321-
xor_comm: v.xor_comm.clone(),
322-
shift: std::array::from_fn(|i| v.shift[i].to_field()),
323-
zkpm: OnceCell::with_value((&v.zkpm).into()),
324-
w: OnceCell::with_value(v.w.to_field()),
325-
endo: v.endo.to_field(),
326-
lookup_index: v.lookup_index.clone(),
327-
linearization: conv_linearization(&v.linearization),
372+
domain: domain.into(),
373+
max_poly_size: *max_poly_size,
374+
srs: OnceCell::with_value(Arc::new(srs.into())),
375+
public: *public,
376+
prev_challenges: *prev_challenges,
377+
sigma_comm: sigma_comm.clone(),
378+
coefficients_comm: coefficients_comm.clone(),
379+
generic_comm: generic_comm.clone(),
380+
psm_comm: psm_comm.clone(),
381+
complete_add_comm: complete_add_comm.clone(),
382+
mul_comm: mul_comm.clone(),
383+
emul_comm: emul_comm.clone(),
384+
endomul_scalar_comm: endomul_scalar_comm.clone(),
385+
foreign_field_add_comm: foreign_field_add_comm.clone(),
386+
xor_comm: xor_comm.clone(),
387+
shift: std::array::from_fn(|i| shift[i].to_field()),
388+
zkpm: OnceCell::with_value(zkpm.into()),
389+
w: OnceCell::with_value(w.to_field()),
390+
endo: endo.to_field(),
391+
lookup_index: lookup_index.clone(),
392+
linearization: conv_linearization(&linearization),
328393
powers_of_alpha: {
329394
// `Alphas` contains private data, so we can't de/serialize it.
330395
// Initializing an `Alphas` is cheap anyway (for block verification).
@@ -339,10 +404,10 @@ impl From<&VerifierIndexCached> for VerifierIndex<Pallas> {
339404
powers_of_alpha.register(ArgumentType::Permutation, permutation::CONSTRAINTS);
340405
powers_of_alpha
341406
},
342-
range_check0_comm: None,
343-
range_check1_comm: None,
344-
foreign_field_mul_comm: None,
345-
rot_comm: None,
407+
range_check0_comm: range_check0_comm.clone(),
408+
range_check1_comm: range_check1_comm.clone(),
409+
foreign_field_mul_comm: foreign_field_mul_comm.clone(),
410+
rot_comm: rot_comm.clone(),
346411
}
347412
}
348413
}

0 commit comments

Comments
 (0)