miden_node_proto/domain/
nullifier.rs

1use miden_objects::{
2    crypto::{hash::rpo::RpoDigest, merkle::SmtProof},
3    note::Nullifier,
4};
5
6use crate::{
7    errors::{ConversionError, MissingFieldHelper},
8    generated as proto,
9};
10
11// FROM NULLIFIER
12// ================================================================================================
13
14impl From<&Nullifier> for proto::digest::Digest {
15    fn from(value: &Nullifier) -> Self {
16        (*value).inner().into()
17    }
18}
19
20impl From<Nullifier> for proto::digest::Digest {
21    fn from(value: Nullifier) -> Self {
22        value.inner().into()
23    }
24}
25
26// INTO NULLIFIER
27// ================================================================================================
28
29impl TryFrom<proto::digest::Digest> for Nullifier {
30    type Error = ConversionError;
31
32    fn try_from(value: proto::digest::Digest) -> Result<Self, Self::Error> {
33        let digest: RpoDigest = value.try_into()?;
34        Ok(digest.into())
35    }
36}
37
38// NULLIFIER INPUT RECORD
39// ================================================================================================
40
41#[derive(Clone, Debug)]
42pub struct NullifierWitness {
43    pub nullifier: Nullifier,
44    pub proof: SmtProof,
45}
46
47impl TryFrom<proto::responses::NullifierBlockInputRecord> for NullifierWitness {
48    type Error = ConversionError;
49
50    fn try_from(
51        nullifier_input_record: proto::responses::NullifierBlockInputRecord,
52    ) -> Result<Self, Self::Error> {
53        Ok(Self {
54            nullifier: nullifier_input_record
55                .nullifier
56                .ok_or(proto::responses::NullifierBlockInputRecord::missing_field(stringify!(
57                    nullifier
58                )))?
59                .try_into()?,
60            proof: nullifier_input_record
61                .opening
62                .ok_or(proto::responses::NullifierBlockInputRecord::missing_field(stringify!(
63                    opening
64                )))?
65                .try_into()?,
66        })
67    }
68}
69
70impl From<NullifierWitness> for proto::responses::NullifierBlockInputRecord {
71    fn from(value: NullifierWitness) -> Self {
72        Self {
73            nullifier: Some(value.nullifier.into()),
74            opening: Some(value.proof.into()),
75        }
76    }
77}