From b7406918b2223974832f03d00fe7a37d03fe8c99 Mon Sep 17 00:00:00 2001 From: timofey Date: Mon, 11 Dec 2023 18:57:27 +0100 Subject: [PATCH] Fix committee update circuit & CI (#45) --- .../src/committee_update_circuit.rs | 24 +++++++++++++------ lightclient-circuits/src/poseidon.rs | 1 + 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lightclient-circuits/src/committee_update_circuit.rs b/lightclient-circuits/src/committee_update_circuit.rs index f57147ed..b6b6e082 100644 --- a/lightclient-circuits/src/committee_update_circuit.rs +++ b/lightclient-circuits/src/committee_update_circuit.rs @@ -113,7 +113,9 @@ impl CommitteeUpdateCircuit { compressed_encodings .into_iter() - .map(|assigned_bytes| { + .map(|mut assigned_bytes| { + // following logic is for little endian decoding but input bytes are in BE, therefore we reverse them. + assigned_bytes.reverse(); // assertion check for assigned_uncompressed vector to be equal to S::PubKeyCurve::BYTES_COMPRESSED from specification assert_eq!(assigned_bytes.len(), 48); // masked byte from compressed representation @@ -163,13 +165,19 @@ impl CommitteeUpdateCircuit { where [(); S::SYNC_COMMITTEE_SIZE]:, { - let pubkeys_x = args.pubkeys_compressed.iter().cloned().map(|mut bytes| { - bytes[0] &= 0b00011111; - bls12_381::Fq::from_bytes_be(&bytes.try_into().unwrap()).unwrap() - }); + let pubkeys_x = args + .pubkeys_compressed + .iter() + .cloned() + .map(|mut bytes| { + bytes[0] &= 0b00011111; + bls12_381::Fq::from_bytes_be(&bytes.try_into().unwrap()) + .expect("bad bls12_381::Fq encoding") + }) + .collect_vec(); let poseidon_commitment = - fq_array_poseidon_native::(pubkeys_x, limb_bits).unwrap(); + fq_array_poseidon_native::(pubkeys_x.into_iter(), limb_bits).unwrap(); let mut pk_vector: Vector, { S::SYNC_COMMITTEE_SIZE }> = args .pubkeys_compressed @@ -314,8 +322,10 @@ mod tests { ) .unwrap(); + let instance = CommitteeUpdateCircuit::::instance(&witness, LIMB_BITS); + let timer = start_timer!(|| "committee_update mock prover"); - let prover = MockProver::::run(K, &circuit, circuit.instances()).unwrap(); + let prover = MockProver::::run(K, &circuit, instance).unwrap(); prover.assert_satisfied_par(); end_timer!(timer); } diff --git a/lightclient-circuits/src/poseidon.rs b/lightclient-circuits/src/poseidon.rs index 3bd37087..bb6337d9 100644 --- a/lightclient-circuits/src/poseidon.rs +++ b/lightclient-circuits/src/poseidon.rs @@ -55,6 +55,7 @@ pub fn fq_array_poseidon_native( .collect_vec() }) .collect_vec(); + let mut poseidon = PoseidonNative::::new(R_F, R_P); let mut current_poseidon_hash = None;