light_sdk/
proof.rs

1// TODO: try removing in separate PR
2pub mod borsh_compat {
3    use crate::{AnchorDeserialize, AnchorSerialize};
4
5    #[derive(Debug, Clone, Copy, PartialEq, Eq, AnchorDeserialize, AnchorSerialize)]
6    pub struct CompressedProof {
7        pub a: [u8; 32],
8        pub b: [u8; 64],
9        pub c: [u8; 32],
10    }
11
12    impl Default for CompressedProof {
13        fn default() -> Self {
14            Self {
15                a: [0; 32],
16                b: [0; 64],
17                c: [0; 32],
18            }
19        }
20    }
21
22    #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, AnchorDeserialize, AnchorSerialize)]
23    /// Borsh-compatible ValidityProof. Use this in your anchor program unless
24    /// you have zero-copy instruction data.
25    pub struct ValidityProof(pub Option<CompressedProof>);
26
27    impl ValidityProof {
28        pub fn new(proof: Option<CompressedProof>) -> Self {
29            Self(proof)
30        }
31    }
32
33    impl From<light_compressed_account::instruction_data::compressed_proof::CompressedProof>
34        for CompressedProof
35    {
36        fn from(
37            proof: light_compressed_account::instruction_data::compressed_proof::CompressedProof,
38        ) -> Self {
39            Self {
40                a: proof.a,
41                b: proof.b,
42                c: proof.c,
43            }
44        }
45    }
46
47    impl From<CompressedProof>
48        for light_compressed_account::instruction_data::compressed_proof::CompressedProof
49    {
50        fn from(proof: CompressedProof) -> Self {
51            Self {
52                a: proof.a,
53                b: proof.b,
54                c: proof.c,
55            }
56        }
57    }
58
59    impl From<light_compressed_account::instruction_data::compressed_proof::ValidityProof>
60        for ValidityProof
61    {
62        fn from(
63            proof: light_compressed_account::instruction_data::compressed_proof::ValidityProof,
64        ) -> Self {
65            Self(proof.0.map(|p| p.into()))
66        }
67    }
68
69    impl From<ValidityProof>
70        for light_compressed_account::instruction_data::compressed_proof::ValidityProof
71    {
72        fn from(proof: ValidityProof) -> Self {
73            Self(proof.0.map(|p| p.into()))
74        }
75    }
76
77    impl From<CompressedProof> for ValidityProof {
78        fn from(proof: CompressedProof) -> Self {
79            Self(Some(proof))
80        }
81    }
82
83    impl From<Option<CompressedProof>> for ValidityProof {
84        fn from(proof: Option<CompressedProof>) -> Self {
85            Self(proof)
86        }
87    }
88}