1#[macro_export]
6macro_rules! circuit_initialization_from_scratch {
7 ($C:ty, $F:ident $(, $other:ident)* $(where $($conds:tt)+ )?) => {
8 impl<L, $F, $( $other,)*> $crate::circuit::CircuitInitialization<L> for $C
9 where
10 L: midnight_proofs::circuit::Layouter<$F>,
11 $F: ff::PrimeField,
12 $C: crate::testing_utils::FromScratch<$F>
13 $(, $($conds)+)?
14 {
15 type Config = <$C as crate::testing_utils::FromScratch<$F>>::Config;
16 type Args = ();
17 type ConfigCols =
18 [midnight_proofs::plonk::Column<midnight_proofs::plonk::Instance>; 2];
19 type CS = midnight_proofs::plonk::ConstraintSystem<$F>;
20 type Error = midnight_proofs::plonk::Error;
21
22 fn new_chip(config: &Self::Config, _: Self::Args) -> Self {
23 <$C as crate::testing_utils::FromScratch<$F>>::new_from_scratch(config)
24 }
25
26 fn configure_circuit(
27 meta: &mut Self::CS,
28 instance_columns: &Self::ConfigCols,
29 ) -> Self::Config {
30 <$C as crate::testing_utils::FromScratch<$F>>::configure_from_scratch(meta, instance_columns)
31 }
32
33 fn load_chip(
34 &self,
35 layouter: &mut L,
36 _config: &Self::Config,
37 ) -> Result<(), Self::Error> {
38 use crate::testing_utils::FromScratch;
39 self.load_from_scratch(layouter)
40 }
41 }
42 };
43}