sp1_core_executor/
subproof.rsuse sp1_stark::{
baby_bear_poseidon2::BabyBearPoseidon2, MachineVerificationError, StarkVerifyingKey,
};
use std::sync::atomic::AtomicBool;
use crate::SP1ReduceProof;
pub trait SubproofVerifier: Sync + Send {
fn verify_deferred_proof(
&self,
proof: &SP1ReduceProof<BabyBearPoseidon2>,
vk: &StarkVerifyingKey<BabyBearPoseidon2>,
vk_hash: [u32; 8],
committed_value_digest: [u32; 8],
) -> Result<(), MachineVerificationError<BabyBearPoseidon2>>;
}
#[derive(Default)]
pub struct DefaultSubproofVerifier {
printed: AtomicBool,
}
impl DefaultSubproofVerifier {
#[must_use]
pub fn new() -> Self {
Self { printed: AtomicBool::new(false) }
}
}
impl SubproofVerifier for DefaultSubproofVerifier {
fn verify_deferred_proof(
&self,
_proof: &SP1ReduceProof<BabyBearPoseidon2>,
_vk: &StarkVerifyingKey<BabyBearPoseidon2>,
_vk_hash: [u32; 8],
_committed_value_digest: [u32; 8],
) -> Result<(), MachineVerificationError<BabyBearPoseidon2>> {
if !self.printed.load(std::sync::atomic::Ordering::SeqCst) {
tracing::info!("Not verifying sub proof during runtime");
self.printed.store(true, std::sync::atomic::Ordering::SeqCst);
}
Ok(())
}
}
pub struct NoOpSubproofVerifier;
impl SubproofVerifier for NoOpSubproofVerifier {
fn verify_deferred_proof(
&self,
_proof: &SP1ReduceProof<BabyBearPoseidon2>,
_vk: &StarkVerifyingKey<BabyBearPoseidon2>,
_vk_hash: [u32; 8],
_committed_value_digest: [u32; 8],
) -> Result<(), MachineVerificationError<BabyBearPoseidon2>> {
Ok(())
}
}