Skip to main content

slop_basefold/
config.rs

1use std::marker::PhantomData;
2
3use serde::{Deserialize, Serialize};
4use slop_algebra::extension::BinomialExtensionField;
5use slop_baby_bear::{
6    baby_bear_poseidon2::{BabyBearDegree4Duplex, Perm},
7    BabyBear,
8};
9use slop_bn254::{
10    Bn254Fr, OuterPerm, Poseidon2Bn254GlobalConfig, OUTER_CHALLENGER_RATE,
11    OUTER_CHALLENGER_STATE_WIDTH,
12};
13use slop_challenger::{DuplexChallenger, MultiField32Challenger};
14use slop_koala_bear::{KoalaBear, KoalaBearDegree4Duplex, KoalaPerm};
15use slop_merkle_tree::MerkleTreeTcs;
16
17#[derive(Clone, Serialize, Deserialize)]
18pub struct BasefoldConfigImpl<F, EF, Tcs, Challenger>(PhantomData<(F, EF, Tcs, Challenger)>);
19
20impl<F, EF, Tcs, Challenger> std::fmt::Debug for BasefoldConfigImpl<F, EF, Tcs, Challenger> {
21    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22        write!(f, "BasefoldConfigImpl")
23    }
24}
25
26impl<F, EF, Tcs, Challenger> Default for BasefoldConfigImpl<F, EF, Tcs, Challenger> {
27    fn default() -> Self {
28        Self(PhantomData)
29    }
30}
31
32pub type Poseidon2BabyBear16BasefoldConfig = BasefoldConfigImpl<
33    BabyBear,
34    BinomialExtensionField<BabyBear, 4>,
35    MerkleTreeTcs<BabyBearDegree4Duplex>,
36    DuplexChallenger<BabyBear, Perm, 16, 8>,
37>;
38
39pub type Poseidon2KoalaBear16BasefoldConfig = BasefoldConfigImpl<
40    KoalaBear,
41    BinomialExtensionField<KoalaBear, 4>,
42    MerkleTreeTcs<KoalaBearDegree4Duplex>,
43    DuplexChallenger<KoalaBear, KoalaPerm, 16, 8>,
44>;
45
46pub type Poseidon2Bn254FrBasefoldConfig<F, EF> = BasefoldConfigImpl<
47    F,
48    BinomialExtensionField<F, 4>,
49    MerkleTreeTcs<Poseidon2Bn254GlobalConfig<F, EF>>,
50    MultiField32Challenger<
51        F,
52        Bn254Fr,
53        OuterPerm,
54        OUTER_CHALLENGER_STATE_WIDTH,
55        OUTER_CHALLENGER_RATE,
56    >,
57>;