openvm_continuations/verifier/root/
vars.rs

1use openvm_native_compiler::prelude::*;
2use openvm_native_recursion::{hints::Hintable, vars::StarkProofVariable};
3use openvm_stark_sdk::openvm_stark_backend::{config::Val, proof::Proof};
4
5use crate::{verifier::root::types::RootVmVerifierInput, C, SC};
6
7#[derive(DslVariable, Clone)]
8pub struct RootVmVerifierInputVariable<C: Config> {
9    /// The proofs of leaf verifier or internal verifier in the execution order.
10    pub proofs: Array<C, StarkProofVariable<C>>,
11    /// Public values to expose
12    pub public_values: Array<C, Felt<C::F>>,
13}
14
15impl Hintable<C> for RootVmVerifierInput<SC> {
16    type HintVariable = RootVmVerifierInputVariable<C>;
17
18    fn read(builder: &mut Builder<C>) -> Self::HintVariable {
19        let proofs = Vec::<Proof<SC>>::read(builder);
20        let public_values = Vec::<Val<SC>>::read(builder);
21        Self::HintVariable {
22            proofs,
23            public_values,
24        }
25    }
26
27    fn write(&self) -> Vec<Vec<<C as Config>::N>> {
28        let mut stream = self.proofs.write();
29        stream.extend(self.public_values.write());
30        stream
31    }
32}