openvm_circuit_primitives/
chip.rs1use std::any::Any;
2
3use openvm_stark_backend::prover::{AirProvingContext, ProverBackend};
4
5pub trait Chip<R, PB: ProverBackend> {
11 fn generate_proving_ctx(&self, records: R) -> AirProvingContext<PB>;
13
14 fn constant_trace_height(&self) -> Option<usize> {
18 None
19 }
20}
21
22pub trait AnyChip<R, PB: ProverBackend>: Chip<R, PB> {
24 fn as_any(&self) -> &dyn Any;
25}
26
27impl<R, PB: ProverBackend, C: Chip<R, PB> + 'static> AnyChip<R, PB> for C {
28 fn as_any(&self) -> &dyn Any {
29 self
30 }
31}
32
33impl<R, PB: ProverBackend, C: Chip<R, PB> + ?Sized> Chip<R, PB> for std::sync::Arc<C> {
34 fn generate_proving_ctx(&self, records: R) -> AirProvingContext<PB> {
35 (**self).generate_proving_ctx(records)
36 }
37
38 fn constant_trace_height(&self) -> Option<usize> {
39 (**self).constant_trace_height()
40 }
41}