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>;