zebra_chain/primitives/
proofs.rs

1//! ZK proofs used in Zcash.
2
3use std::fmt::Debug;
4
5use serde::{de::DeserializeOwned, Serialize};
6
7use crate::serialization::{ZcashDeserialize, ZcashSerialize};
8
9mod bctv14;
10mod groth16;
11mod halo2;
12
13pub use self::bctv14::Bctv14Proof;
14pub use self::groth16::Groth16Proof;
15pub use self::halo2::Halo2Proof;
16
17/// A marker trait used to abstract over BCTV14 or Groth16 proofs in JoinSplits.
18pub trait ZkSnarkProof:
19    Clone
20    + Debug
21    + PartialEq
22    + Eq
23    + Serialize
24    + DeserializeOwned
25    + ZcashSerialize
26    + ZcashDeserialize
27    + private::Sealed
28{
29}
30
31impl ZkSnarkProof for Bctv14Proof {}
32impl ZkSnarkProof for Groth16Proof {}
33
34mod private {
35    use super::*;
36
37    pub trait Sealed {}
38    impl Sealed for Bctv14Proof {}
39    impl Sealed for Groth16Proof {}
40}