w3f_plonk_common/
transcript.rs1use 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}