plonky2/evm/src/vanishing_poly.rs

71 lines
2.3 KiB
Rust
Raw Normal View History

use plonky2::field::extension::{Extendable, FieldExtension};
use plonky2::field::packed::PackedField;
2022-05-04 20:57:07 +02:00
use plonky2::hash::hash_types::RichField;
use plonky2::plonk::circuit_builder::CircuitBuilder;
use crate::config::StarkConfig;
use crate::constraint_consumer::{ConstraintConsumer, RecursiveConstraintConsumer};
2022-05-24 16:24:52 +02:00
use crate::cross_table_lookup::{
eval_cross_table_lookup_checks, eval_cross_table_lookup_checks_circuit, CtlCheckVars,
CtlCheckVarsTarget,
};
2022-05-04 20:57:07 +02:00
use crate::permutation::{
2022-05-18 09:22:58 +02:00
eval_permutation_checks, eval_permutation_checks_circuit, PermutationCheckDataTarget,
2022-05-04 20:57:07 +02:00
PermutationCheckVars,
};
use crate::stark::Stark;
use crate::vars::{StarkEvaluationTargets, StarkEvaluationVars};
pub(crate) fn eval_vanishing_poly<F, FE, P, S, const D: usize, const D2: usize>(
2022-05-04 20:57:07 +02:00
stark: &S,
config: &StarkConfig,
2022-08-25 12:24:22 -07:00
vars: StarkEvaluationVars<FE, P, { S::COLUMNS }>,
2022-05-13 11:20:29 +02:00
permutation_vars: Option<PermutationCheckVars<F, FE, P, D2>>,
2022-05-16 20:45:30 +02:00
ctl_vars: &[CtlCheckVars<F, FE, P, D2>],
2022-05-04 20:57:07 +02:00
consumer: &mut ConstraintConsumer<P>,
) where
F: RichField + Extendable<D>,
FE: FieldExtension<D2, BaseField = F>,
P: PackedField<Scalar = FE>,
S: Stark<F, D>,
{
stark.eval_packed_generic(vars, consumer);
2022-05-13 11:20:29 +02:00
if let Some(permutation_vars) = permutation_vars {
eval_permutation_checks::<F, FE, P, S, D, D2>(
2022-05-04 20:57:07 +02:00
stark,
config,
vars,
2022-05-13 11:20:29 +02:00
permutation_vars,
2022-05-04 20:57:07 +02:00
consumer,
);
}
eval_cross_table_lookup_checks::<F, FE, P, S, D, D2>(vars, ctl_vars, consumer);
2022-05-04 20:57:07 +02:00
}
pub(crate) fn eval_vanishing_poly_circuit<F, S, const D: usize>(
2022-05-04 20:57:07 +02:00
builder: &mut CircuitBuilder<F, D>,
stark: &S,
config: &StarkConfig,
2022-08-25 12:24:22 -07:00
vars: StarkEvaluationTargets<D, { S::COLUMNS }>,
2022-05-04 20:57:07 +02:00
permutation_data: Option<PermutationCheckDataTarget<D>>,
2022-06-14 00:53:31 +02:00
ctl_vars: &[CtlCheckVarsTarget<F, D>],
2022-05-04 20:57:07 +02:00
consumer: &mut RecursiveConstraintConsumer<F, D>,
) where
F: RichField + Extendable<D>,
S: Stark<F, D>,
[(); S::COLUMNS]:,
{
2022-05-18 09:22:58 +02:00
stark.eval_ext_circuit(builder, vars, consumer);
2022-05-04 20:57:07 +02:00
if let Some(permutation_data) = permutation_data {
2022-05-18 09:22:58 +02:00
eval_permutation_checks_circuit::<F, S, D>(
2022-05-04 20:57:07 +02:00
builder,
stark,
config,
vars,
permutation_data,
consumer,
);
}
2022-05-24 16:24:52 +02:00
eval_cross_table_lookup_checks_circuit::<S, F, D>(builder, vars, ctl_vars, consumer);
2022-05-04 20:57:07 +02:00
}