use ark_crypto_primitives::sponge::{constraints::AbsorbGadget, Absorb}; use ark_ec::CurveGroup; use ark_ff::PrimeField; use ark_r1cs_std::{fields::fp::FpVar, uint8::UInt8, ToConstraintFieldGadget}; use ark_relations::r1cs::SynthesisError; use super::{CommittedInstance, CommittedInstanceVar}; use crate::transcript::AbsorbNonNative; // Implements the trait for absorbing ProtoGalaxy's CommittedInstance. impl Absorb for CommittedInstance where C::ScalarField: Absorb, { fn to_sponge_bytes(&self, _dest: &mut Vec) { unimplemented!() } fn to_sponge_field_elements(&self, dest: &mut Vec) { self.phi .to_native_sponge_field_elements_as_vec() .to_sponge_field_elements(dest); self.betas.to_sponge_field_elements(dest); self.e.to_sponge_field_elements(dest); self.u.to_sponge_field_elements(dest); self.x.to_sponge_field_elements(dest); } } // Implements the trait for absorbing ProtoGalaxy's CommittedInstanceVar in-circuit. impl AbsorbGadget for CommittedInstanceVar { fn to_sponge_bytes(&self) -> Result>, SynthesisError> { unimplemented!() } fn to_sponge_field_elements(&self) -> Result>, SynthesisError> { Ok([ self.phi.to_constraint_field()?, self.betas.to_sponge_field_elements()?, self.e.to_sponge_field_elements()?, self.u.to_sponge_field_elements()?, self.x.to_sponge_field_elements()?, ] .concat()) } }