Skip to main content

pessimistic_proof/
error.rs

1use serde::{Deserialize, Serialize};
2use sp1_sdk::SP1VerificationError;
3
4#[derive(Clone, Debug, Serialize, Deserialize, thiserror::Error, PartialEq, Eq)]
5pub enum ProofVerificationError {
6    #[error("Version mismatch: {0}")]
7    VersionMismatch(String),
8
9    #[error("Core machine verification error: {0}")]
10    Core(String),
11
12    #[error("Recursion verification error: {0}")]
13    Recursion(String),
14
15    #[error("Plonk verification error: {0}")]
16    Plonk(String),
17
18    #[error("Groth16 verification error: {0}")]
19    Groth16(String),
20
21    #[error("Invalid public values")]
22    InvalidPublicValues,
23
24    #[error("Other error: {0}")]
25    Other(String),
26}
27
28impl From<SP1VerificationError> for ProofVerificationError {
29    fn from(err: SP1VerificationError) -> Self {
30        match err {
31            SP1VerificationError::VersionMismatch(version) => {
32                ProofVerificationError::VersionMismatch(version)
33            }
34            SP1VerificationError::Core(core) => ProofVerificationError::Core(core.to_string()),
35            SP1VerificationError::Recursion(recursion) => {
36                ProofVerificationError::Recursion(recursion.to_string())
37            }
38            SP1VerificationError::Plonk(error) => ProofVerificationError::Plonk(error.to_string()),
39            SP1VerificationError::Groth16(error) => {
40                ProofVerificationError::Groth16(error.to_string())
41            }
42            SP1VerificationError::InvalidPublicValues => {
43                ProofVerificationError::InvalidPublicValues
44            }
45            SP1VerificationError::Other(error) => ProofVerificationError::Other(error.to_string()),
46        }
47    }
48}