sp1_core_executor/
subproof.rs1use std::sync::Arc;
4
5use sp1_hypercube::{
6 MachineVerifierConfigError, MachineVerifyingKey, SP1InnerPcs, SP1PcsProofInner,
7};
8
9use crate::SP1RecursionProof;
10use sp1_primitives::SP1GlobalContext;
11
12pub trait SubproofVerifier: Sync + Send {
19 fn verify_deferred_proof(
21 &self,
22 proof: &SP1RecursionProof<SP1GlobalContext, SP1PcsProofInner>,
23 vk: &MachineVerifyingKey<SP1GlobalContext>,
24 vk_hash: [u64; 4],
25 committed_value_digest: [u64; 4],
26 ) -> Result<(), MachineVerifierConfigError<SP1GlobalContext, SP1InnerPcs>>;
27}
28
29pub struct NoOpSubproofVerifier;
31
32impl SubproofVerifier for NoOpSubproofVerifier {
33 fn verify_deferred_proof(
34 &self,
35 _proof: &SP1RecursionProof<SP1GlobalContext, SP1PcsProofInner>,
36 _vk: &MachineVerifyingKey<SP1GlobalContext>,
37 _vk_hash: [u64; 4],
38 _committed_value_digest: [u64; 4],
39 ) -> Result<(), MachineVerifierConfigError<SP1GlobalContext, SP1InnerPcs>> {
40 Ok(())
41 }
42}
43
44impl<V> SubproofVerifier for &'_ V
47where
48 V: SubproofVerifier + ?Sized,
49{
50 fn verify_deferred_proof(
51 &self,
52 proof: &SP1RecursionProof<SP1GlobalContext, SP1PcsProofInner>,
53 vk: &MachineVerifyingKey<SP1GlobalContext>,
54 vk_hash: [u64; 4],
55 committed_value_digest: [u64; 4],
56 ) -> Result<(), MachineVerifierConfigError<SP1GlobalContext, SP1InnerPcs>> {
57 (*self).verify_deferred_proof(proof, vk, vk_hash, committed_value_digest)
58 }
59}
60
61impl<V> SubproofVerifier for Arc<V>
62where
63 V: SubproofVerifier + ?Sized,
64{
65 fn verify_deferred_proof(
66 &self,
67 proof: &SP1RecursionProof<SP1GlobalContext, SP1PcsProofInner>,
68 vk: &MachineVerifyingKey<SP1GlobalContext>,
69 vk_hash: [u64; 4],
70 committed_value_digest: [u64; 4],
71 ) -> Result<(), MachineVerifierConfigError<SP1GlobalContext, SP1InnerPcs>> {
72 self.as_ref().verify_deferred_proof(proof, vk, vk_hash, committed_value_digest)
73 }
74}
75
76impl<V> SubproofVerifier for Box<V>
77where
78 V: SubproofVerifier + ?Sized,
79{
80 fn verify_deferred_proof(
81 &self,
82 proof: &SP1RecursionProof<SP1GlobalContext, SP1PcsProofInner>,
83 vk: &MachineVerifyingKey<SP1GlobalContext>,
84 vk_hash: [u64; 4],
85 committed_value_digest: [u64; 4],
86 ) -> Result<(), MachineVerifierConfigError<SP1GlobalContext, SP1InnerPcs>> {
87 self.as_ref().verify_deferred_proof(proof, vk, vk_hash, committed_value_digest)
88 }
89}