dusk_plonk/proof_system/preprocess.rs
1// This Source Code Form is subject to the terms of the Mozilla Public
2// License, v. 2.0. If a copy of the MPL was not distributed with this
3// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4//
5// Copyright (c) DUSK NETWORK. All rights reserved.
6
7//! Methods to preprocess the constraint system for use in a proof
8
9use crate::fft::Polynomial;
10
11/// Struct that contains all selector and permutation [`Polynomials`]s
12pub(crate) struct Polynomials {
13 // selector polynomials defining arithmetic circuits
14 pub(crate) q_m: Polynomial,
15 pub(crate) q_l: Polynomial,
16 pub(crate) q_r: Polynomial,
17 pub(crate) q_o: Polynomial,
18 pub(crate) q_f: Polynomial, // for 3-input gates
19 pub(crate) q_c: Polynomial,
20
21 // additional selectors for different kinds of circuits added for
22 // efficiency of implementation
23 pub(crate) q_arith: Polynomial, // arithmetic circuits
24 pub(crate) q_range: Polynomial, // range proofs
25 pub(crate) q_logic: Polynomial, // boolean operations
26 pub(crate) q_fixed_group_add: Polynomial, // ecc circuits
27 pub(crate) q_variable_group_add: Polynomial, // ecc circuits
28
29 // copy permutation polynomials
30 pub(crate) s_sigma_1: Polynomial,
31 pub(crate) s_sigma_2: Polynomial,
32 pub(crate) s_sigma_3: Polynomial,
33 pub(crate) s_sigma_4: Polynomial, // for q_F
34}