w3f_plonk_common/
transcript.rs

1use ark_ff::PrimeField;
2use ark_poly::GeneralEvaluationDomain;
3use ark_serialize::CanonicalSerialize;
4use ark_std::vec::Vec;
5use rand_core::RngCore;
6use w3f_pcs::pcs::{PcsParams, PCS};
7
8use crate::{ColumnsCommited, ColumnsEvaluated};
9
10pub trait PlonkTranscript<F: PrimeField, CS: PCS<F>>: Clone {
11    fn add_protocol_params(
12        &mut self,
13        domain: &GeneralEvaluationDomain<F>,
14        pcs_raw_vk: &<CS::Params as PcsParams>::RVK,
15    ) {
16        self._add_serializable(b"domain", domain);
17        self._add_serializable(b"pcs_raw_vk", pcs_raw_vk);
18    }
19
20    fn add_precommitted_cols(&mut self, precommitted_cols: &[CS::C; 2]) {
21        self._add_serializable(b"precommitted_cols", precommitted_cols);
22    }
23
24    fn add_instance(&mut self, instance: &impl CanonicalSerialize) {
25        self._add_serializable(b"instance", instance);
26    }
27
28    fn add_committed_cols(&mut self, committed_cols: &impl ColumnsCommited<F, CS::C>) {
29        self._add_serializable(b"committed_cols", committed_cols);
30    }
31
32    fn get_constraints_aggregation_coeffs(&mut self, n: usize) -> Vec<F> {
33        self._128_bit_coeffs(b"constraints_aggregation", n)
34    }
35
36    fn add_quotient_commitment(&mut self, point: &CS::C) {
37        self._add_serializable(b"quotient", point);
38    }
39
40    fn add_kzg_proofs(&mut self, in_zeta: &CS::Proof, in_zeta_omega: &CS::Proof) {
41        self._add_serializable(b"kzg_proof_zeta", in_zeta);
42        self._add_serializable(b"kzg_proof_zeta_omega", in_zeta_omega);
43    }
44
45    fn get_evaluation_point(&mut self) -> F {
46        self._128_bit_point(b"evaluation_point")
47    }
48
49    fn add_evaluations(&mut self, evals: &impl ColumnsEvaluated<F>, r_at_zeta_omega: &F) {
50        self._add_serializable(b"register_evaluations", evals);
51        self._add_serializable(b"shifted_linearization_evaluation", r_at_zeta_omega);
52    }
53
54    fn get_kzg_aggregation_challenges(&mut self, n: usize) -> Vec<F> {
55        self._128_bit_coeffs(b"kzg_aggregation", n)
56    }
57
58    fn _128_bit_point(&mut self, label: &'static [u8]) -> F;
59
60    fn _128_bit_coeffs(&mut self, label: &'static [u8], n: usize) -> Vec<F> {
61        (0..n).map(|_| self._128_bit_point(label)).collect()
62    }
63
64    fn _add_serializable(&mut self, label: &'static [u8], message: &impl CanonicalSerialize);
65
66    fn to_rng(self) -> impl RngCore;
67}