openvm_continuations/circuit/
mod.rs1use std::sync::Arc;
2
3use openvm_circuit::arch::POSEIDON2_WIDTH;
4use openvm_recursion_circuit::prelude::F;
5use openvm_stark_backend::{
6 prover::{AirProvingContext, ProverBackend},
7 AirRef, StarkProtocolConfig,
8};
9
10pub mod deferral;
11pub mod inner;
12pub mod root;
13pub mod subair;
14
15pub struct SubCircuitTraceData<PB: ProverBackend> {
16 pub air_proving_ctxs: Vec<AirProvingContext<PB>>,
17 pub poseidon2_compress_inputs: Vec<[PB::Val; POSEIDON2_WIDTH]>,
18 pub poseidon2_permute_inputs: Vec<[PB::Val; POSEIDON2_WIDTH]>,
19 pub range_check_inputs: Vec<usize>,
20}
21
22pub struct SingleAirTraceData<PB: ProverBackend> {
23 pub air_proving_ctx: AirProvingContext<PB>,
24 pub poseidon2_compress_inputs: Vec<[PB::Val; POSEIDON2_WIDTH]>,
25 pub poseidon2_permute_inputs: Vec<[PB::Val; POSEIDON2_WIDTH]>,
26 pub range_check_inputs: Vec<usize>,
27}
28
29pub trait Circuit<SC: StarkProtocolConfig<F = F>> {
31 fn airs(&self) -> Vec<AirRef<SC>>;
32}
33
34impl<SC: StarkProtocolConfig<F = F>, C: Circuit<SC>> Circuit<SC> for Arc<C> {
35 fn airs(&self) -> Vec<AirRef<SC>> {
36 self.as_ref().airs()
37 }
38}
39
40pub mod utils {
41 use openvm_circuit_primitives::utils::assert_array_eq;
42 use openvm_recursion_circuit::utils::assert_zeros;
43 use openvm_stark_sdk::config::baby_bear_poseidon2::DIGEST_SIZE;
44 use openvm_verify_stark_host::pvs::{VerifierBasePvs, VkCommit};
45 use p3_air::AirBuilder;
46
47 pub fn assert_vk_commit_eq<AB: AirBuilder, I1: Into<AB::Expr>, I2: Into<AB::Expr>>(
48 builder: &mut AB,
49 x: VkCommit<I1>,
50 y: VkCommit<I2>,
51 ) {
52 assert_array_eq(builder, x.cached_commit, y.cached_commit);
53 assert_array_eq(builder, x.vk_pre_hash, y.vk_pre_hash);
54 }
55
56 pub fn assert_vk_commit_unset<AB: AirBuilder, I1: Into<AB::Expr>>(
57 builder: &mut AB,
58 x: VkCommit<I1>,
59 ) {
60 assert_zeros(builder, x.cached_commit);
61 assert_zeros(builder, x.vk_pre_hash);
62 }
63
64 pub fn vk_commit_components<F: Copy>(pvs: &VerifierBasePvs<F>) -> Vec<[F; DIGEST_SIZE]> {
65 vec![
66 pvs.app_vk_commit.cached_commit,
67 pvs.app_vk_commit.vk_pre_hash,
68 pvs.leaf_vk_commit.cached_commit,
69 pvs.leaf_vk_commit.vk_pre_hash,
70 pvs.internal_for_leaf_vk_commit.cached_commit,
71 pvs.internal_for_leaf_vk_commit.vk_pre_hash,
72 ]
73 }
74}