openvm_verify_stark_host/
error.rs1use 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}