p3_uni_stark/
config.rs
1use core::marker::PhantomData;
2
3use p3_challenger::{CanObserve, CanSample, FieldChallenger};
4use p3_commit::{Pcs, PolynomialSpace};
5use p3_field::{ExtensionField, Field};
6
7pub type PcsError<SC> = <<SC as StarkGenericConfig>::Pcs as Pcs<
8 <SC as StarkGenericConfig>::Challenge,
9 <SC as StarkGenericConfig>::Challenger,
10>>::Error;
11
12pub type Domain<SC> = <<SC as StarkGenericConfig>::Pcs as Pcs<
13 <SC as StarkGenericConfig>::Challenge,
14 <SC as StarkGenericConfig>::Challenger,
15>>::Domain;
16
17pub type Val<SC> = <Domain<SC> as PolynomialSpace>::Val;
18
19pub type PackedVal<SC> = <Val<SC> as Field>::Packing;
20
21pub type PackedChallenge<SC> =
22 <<SC as StarkGenericConfig>::Challenge as ExtensionField<Val<SC>>>::ExtensionPacking;
23
24pub trait StarkGenericConfig {
25 type Pcs: Pcs<Self::Challenge, Self::Challenger>;
27
28 type Challenge: ExtensionField<Val<Self>>;
30
31 type Challenger: FieldChallenger<Val<Self>>
33 + CanObserve<<Self::Pcs as Pcs<Self::Challenge, Self::Challenger>>::Commitment>
34 + CanSample<Self::Challenge>;
35
36 fn pcs(&self) -> &Self::Pcs;
37}
38
39#[derive(Debug)]
40pub struct StarkConfig<Pcs, Challenge, Challenger> {
41 pcs: Pcs,
42 _phantom: PhantomData<(Challenge, Challenger)>,
43}
44
45impl<Pcs, Challenge, Challenger> StarkConfig<Pcs, Challenge, Challenger> {
46 pub const fn new(pcs: Pcs) -> Self {
47 Self {
48 pcs,
49 _phantom: PhantomData,
50 }
51 }
52}
53
54impl<Pcs, Challenge, Challenger> StarkGenericConfig for StarkConfig<Pcs, Challenge, Challenger>
55where
56 Challenge: ExtensionField<<Pcs::Domain as PolynomialSpace>::Val>,
57 Pcs: p3_commit::Pcs<Challenge, Challenger>,
58 Challenger: FieldChallenger<<Pcs::Domain as PolynomialSpace>::Val>
59 + CanObserve<<Pcs as p3_commit::Pcs<Challenge, Challenger>>::Commitment>
60 + CanSample<Challenge>,
61{
62 type Pcs = Pcs;
63 type Challenge = Challenge;
64 type Challenger = Challenger;
65
66 fn pcs(&self) -> &Self::Pcs {
67 &self.pcs
68 }
69}