use std::marker::PhantomData; use plonky2::field::extension_field::{Extendable, FieldExtension}; use plonky2::field::packed_field::PackedField; use plonky2::hash::hash_types::RichField; use crate::constraint_consumer::{ConstraintConsumer, RecursiveConstraintConsumer}; use crate::permutation::PermutationPair; use crate::stark::Stark; use crate::vars::{StarkEvaluationTargets, StarkEvaluationVars}; #[derive(Copy, Clone)] pub struct CpuStark { pub f: PhantomData, } impl, const D: usize> Stark for CpuStark { const COLUMNS: usize = 10; const PUBLIC_INPUTS: usize = 0; fn eval_packed_generic( &self, _vars: StarkEvaluationVars, _yield_constr: &mut ConstraintConsumer

, ) where FE: FieldExtension, P: PackedField, { } fn eval_ext_circuit( &self, _builder: &mut plonky2::plonk::circuit_builder::CircuitBuilder, _vars: StarkEvaluationTargets, _yield_constr: &mut RecursiveConstraintConsumer, ) { } fn constraint_degree(&self) -> usize { 3 } fn permutation_pairs(&self) -> Vec { vec![PermutationPair::singletons(8, 9)] } } #[cfg(test)] mod tests { use anyhow::Result; use plonky2::plonk::config::{GenericConfig, PoseidonGoldilocksConfig}; use crate::cpu::cpu_stark::CpuStark; use crate::stark_testing::{test_stark_circuit_constraints, test_stark_low_degree}; #[test] #[should_panic] // TODO: fix this when constraints are no longer all 0. fn test_stark_degree() { const D: usize = 2; type C = PoseidonGoldilocksConfig; type F = >::F; type S = CpuStark; let stark = S { f: Default::default(), }; test_stark_low_degree(stark).unwrap() } #[test] fn test_stark_circuit() -> Result<()> { const D: usize = 2; type C = PoseidonGoldilocksConfig; type F = >::F; type S = CpuStark; let stark = S { f: Default::default(), }; test_stark_circuit_constraints::(stark) } }