openvm_continuations/circuit/deferral/inner/
mod.rs

1use std::sync::Arc;
2
3use itertools::Itertools;
4use openvm_recursion_circuit::{prelude::F, system::AggregationSubCircuit};
5use openvm_stark_backend::{AirRef, StarkProtocolConfig};
6
7use crate::circuit::Circuit;
8
9pub mod bus;
10pub mod def_pvs;
11pub mod input;
12pub mod verifier;
13
14mod trace;
15pub use trace::*;
16
17#[derive(derive_new::new, Clone)]
18pub struct DeferralInnerCircuit<S: AggregationSubCircuit> {
19    pub verifier_circuit: Arc<S>,
20}
21
22impl<SC: StarkProtocolConfig<F = F>, S: AggregationSubCircuit> Circuit<SC>
23    for DeferralInnerCircuit<S>
24{
25    fn airs(&self) -> Vec<AirRef<SC>> {
26        let bus_inventory = self.verifier_circuit.bus_inventory();
27        let next_bus_idx = self.verifier_circuit.next_bus_idx();
28        let input_or_merkle_commit_bus = bus::InputOrMerkleCommitBus::new(next_bus_idx);
29        let def_pvs_consistency_bus = bus::DefPvsConsistencyBus::new(next_bus_idx + 1);
30
31        let verifier_pvs_air = verifier::DeferralVerifierPvsAir {
32            public_values_bus: bus_inventory.public_values_bus,
33            cached_commit_bus: bus_inventory.cached_commit_bus,
34            pre_hash_bus: bus_inventory.pre_hash_bus,
35            range_bus: bus_inventory.range_checker_bus,
36            def_pvs_consistency_bus,
37        };
38
39        let def_pvs_air = def_pvs::DeferralAggPvsAir::new(
40            bus_inventory.public_values_bus,
41            bus_inventory.poseidon2_compress_bus,
42            bus_inventory.range_checker_bus,
43            input_or_merkle_commit_bus,
44            def_pvs_consistency_bus,
45        );
46
47        let input_commit_air = input::InputCommitAir {
48            public_values_bus: bus_inventory.public_values_bus,
49            poseidon2_bus: bus_inventory.poseidon2_permute_bus,
50            cached_commit_bus: bus_inventory.cached_commit_bus,
51            input_or_merkle_commit_bus,
52        };
53
54        [Arc::new(verifier_pvs_air) as AirRef<SC>]
55            .into_iter()
56            .chain([Arc::new(def_pvs_air) as AirRef<SC>])
57            .chain([Arc::new(input_commit_air) as AirRef<SC>])
58            .chain(self.verifier_circuit.airs())
59            .collect_vec()
60    }
61}