openvm_verify_stark_host/
error.rs

1use openvm_circuit::system::memory::merkle::public_values::UserPublicValuesProofError;
2use openvm_stark_backend::verifier::VerifierError;
3use openvm_stark_sdk::config::baby_bear_poseidon2::{Digest, EF, F};
4use thiserror::Error;
5
6#[derive(Error, Debug)]
7pub enum VerifyStarkError {
8    #[error("Stark verifier failed with error: {0}")]
9    StarkVerificationFailure(#[from] VerifierError<EF>),
10    #[error("User public value proof verification failed with error: {0}")]
11    UserPvsVerificationFailure(#[from] UserPublicValuesProofError),
12    #[error("Invalid user public values length: expected {expected}, actual {actual}")]
13    UserPvsLengthMismatch { expected: usize, actual: usize },
14    #[error("Invalid app exe commit: expected {expected:?}, actual {actual:?}")]
15    AppExeCommitMismatch { expected: Digest, actual: Digest },
16    #[error("Invalid app cached commit: expected {expected:?}, actual {actual:?}")]
17    AppVkCachedCommitMismatch { expected: Digest, actual: Digest },
18    #[error("Invalid app vk pre-hash: expected {expected:?}, actual {actual:?}")]
19    AppVkPreHashMismatch { expected: Digest, actual: Digest },
20    #[error("Invalid leaf cached commit: expected {expected:?}, actual {actual:?}")]
21    LeafVkCachedCommitMismatch { expected: Digest, actual: Digest },
22    #[error("Invalid leaf vk pre-hash: expected {expected:?}, actual {actual:?}")]
23    LeafVkPreHashMismatch { expected: Digest, actual: Digest },
24    #[error("Invalid internal for leaf cached commit: expected {expected:?}, actual {actual:?}")]
25    InternalForLeafVkCachedCommitMismatch { expected: Digest, actual: Digest },
26    #[error("Invalid internal for leaf vk pre-hash: expected {expected:?}, actual {actual:?}")]
27    InternalForLeafVkPreHashMismatch { expected: Digest, actual: Digest },
28    #[error("Invalid internal recursive cached commit: expected {expected:?}, actual {actual:?}")]
29    InternalRecursiveVkCachedCommitMismatch { expected: Digest, actual: Digest },
30    #[error("Invalid internal recursive vk pre-hash: expected {expected:?}, actual {actual:?}")]
31    InternalRecursiveVkPreHashMismatch { expected: Digest, actual: Digest },
32    #[error("Internal recursive cached commit should be unset, actual {actual:?}")]
33    InternalRecursiveVkCachedCommitSet { actual: Digest },
34    #[error("Internal recursive vk pre-hash should be unset, actual {actual:?}")]
35    InternalRecursiveVkPreHashSet { actual: Digest },
36    #[error("Invalid proof cached commit: expected {expected:?}, actual {actual:?}")]
37    ProofCachedCommitMismatch { expected: Digest, actual: Digest },
38    #[error("Missing constraint-eval trace vdata, expected at AIR idx {air_idx}")]
39    MissingConstraintEvalTraceVdata { air_idx: usize },
40    #[error("Missing constraint-eval cached trace at AIR idx {air_idx} cached idx {cached_idx}")]
41    MissingConstraintEvalCachedTrace { air_idx: usize, cached_idx: usize },
42    #[error("Program execution did not terminate successfully, exit_code: {0}")]
43    ExecutionUnsuccessful(F),
44    #[error("Invalid internal flag {0}, should be 2")]
45    InvalidInternalFlag(F),
46    #[error("Invalid recursion depth {actual}, should be in [1, {max}]")]
47    InvalidRecursionDepth { actual: F, max: u32 },
48    #[error("IO error: {0}")]
49    Io(#[from] std::io::Error),
50    #[error("Other error: {0}")]
51    Other(#[from] eyre::Error),
52    #[error("Deferral Merkle proof length mismatch: expected {expected}, actual {actual}")]
53    DeferralMerkleProofLengthMismatch { expected: usize, actual: usize },
54    #[error("Deferral depth exceeds address space height: depth {depth}, address_height {address_height}")]
55    DeferralDepthTooLarge { depth: usize, address_height: usize },
56    #[error("Deferral Merkle proofs differ inside DEFERRAL_AS at depth {depth}: initial {initial:?}, final {final_:?}")]
57    DeferralMerkleProofSiblingMismatch {
58        depth: usize,
59        initial: Digest,
60        final_: Digest,
61    },
62    #[error("Deferral initial root mismatch: expected {expected:?}, actual {actual:?}")]
63    DeferralInitialRootMismatch { expected: Digest, actual: Digest },
64    #[error("Deferral final root mismatch: expected {expected:?}, actual {actual:?}")]
65    DeferralFinalRootMismatch { expected: Digest, actual: Digest },
66    #[error("Invalid deferral flag {0}, should be 0 or 2")]
67    InvalidDeferralFlag(F),
68    #[error("Deferral hook VK commit mismatch: expected {expected:?}, actual {actual:?}")]
69    DefHookCommitMismatch { expected: Digest, actual: Digest },
70    #[error("Proof has deferrals but baseline has no expected_def_hook_commit")]
71    UnexpectedDeferralDisabled,
72    #[error("Baseline expects deferrals but proof has no deferral Merkle proofs")]
73    MissingDeferralMerkleProofs,
74    #[error("Proof has deferral_flag=0 but def_hook_commit is set, actual {actual:?}")]
75    DefHookCommitSet { actual: Digest },
76    #[error("Proof has deferral_flag=0 but initial_acc_hash is set, actual {actual:?}")]
77    DefInitialAccHashCommitSet { actual: Digest },
78    #[error("Proof has deferral_flag=0 but final_acc_hash is set, actual {actual:?}")]
79    DefFinalAccHashCommitSet { actual: Digest },
80    #[error("Proof has deferral_flag=0 but depth is set, actual {actual:?}")]
81    DefDepthSet { actual: F },
82    #[error("Proof has unsupported deferral node_idx {actual:?}, should be 0")]
83    DefNodeIdxNonZero { actual: F },
84}