From 386c56ceeab78a412f47ec1f8ad3e736dfee3f8f Mon Sep 17 00:00:00 2001 From: Timofey Luin Date: Tue, 27 Feb 2024 14:55:50 +0100 Subject: [PATCH 1/2] aggregate from pk[0] or identity --- lightclient-circuits/src/sync_step_circuit.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lightclient-circuits/src/sync_step_circuit.rs b/lightclient-circuits/src/sync_step_circuit.rs index 0045719..95e52e8 100644 --- a/lightclient-circuits/src/sync_step_circuit.rs +++ b/lightclient-circuits/src/sync_step_circuit.rs @@ -375,20 +375,24 @@ impl StepCircuit { participation_bits.push(participation_bit); } - let rand_point = g1_chip.load_random_point::(ctx); - let mut acc = rand_point.clone(); + let mut acc = { + let x = fp_chip.load_constant(ctx, G1Affine::identity().x); + let y = fp_chip.load_constant(ctx, G1Affine::identity().y); + G1Point::new(x, y) // identity + }; + acc = g1_chip.select(ctx, assigned_affines[0].clone(), acc, participation_bits[0]); for (bit, point) in participation_bits .iter() .copied() .zip(assigned_affines.iter_mut()) + .skip(1) { let sum = g1_chip.add_unequal(ctx, acc.clone(), point.clone(), true); acc = g1_chip.select(ctx, sum, acc, bit); } - let agg_pubkey = g1_chip.sub_unequal(ctx, acc, rand_point, false); let participation_sum = gate.sum(ctx, participation_bits); - (agg_pubkey, participation_sum) + (acc, participation_sum) } } From 2fc84efa93c461aa1d3379af5dd5c638fc17badc Mon Sep 17 00:00:00 2001 From: Timofey Luin Date: Tue, 5 Mar 2024 14:18:40 +0100 Subject: [PATCH 2/2] fix merge --- lightclient-circuits/src/sync_step_circuit.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lightclient-circuits/src/sync_step_circuit.rs b/lightclient-circuits/src/sync_step_circuit.rs index 543a765..175f791 100644 --- a/lightclient-circuits/src/sync_step_circuit.rs +++ b/lightclient-circuits/src/sync_step_circuit.rs @@ -319,7 +319,7 @@ impl StepCircuit { fp_chip: &FpChip<'_, F>, pubkey_affines: &[G1Affine], pariticipation_bits: &[bool], - assigned_pubkeys: &mut Vec>, + assigned_affines: &mut Vec>, y_signs_packed: &mut Vec>, ) -> (G1Point, AssignedValue) { let gate = fp_chip.gate(); @@ -355,7 +355,7 @@ impl StepCircuit { fp_chip.limb_bases[1], ); - assigned_pubkeys.push(assigned_affine); + assigned_affines.push(assigned_affine); participation_bits.push(participation_bit); y_signs.push(y_sign); } @@ -380,6 +380,11 @@ impl StepCircuit { } let participation_sum = gate.sum(ctx, participation_bits); + *y_signs_packed = y_signs + .chunks(F::CAPACITY as usize - 1) + .map(|chunk| gate.bits_to_num(ctx, chunk)) + .collect_vec(); + (acc, participation_sum) } }