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 WITNESS RECORD
39// ================================================================================================
40
41#[derive(Clone, Debug)]
42pub struct NullifierWitnessRecord {
43    pub nullifier: Nullifier,
44    pub proof: SmtProof,
45}
46
47impl TryFrom<proto::responses::NullifierWitness> for NullifierWitnessRecord {
48    type Error = ConversionError;
49
50    fn try_from(
51        nullifier_witness_record: proto::responses::NullifierWitness,
52    ) -> Result<Self, Self::Error> {
53        Ok(Self {
54            nullifier: nullifier_witness_record
55                .nullifier
56                .ok_or(proto::responses::NullifierWitness::missing_field(stringify!(nullifier)))?
57                .try_into()?,
58            proof: nullifier_witness_record
59                .opening
60                .ok_or(proto::responses::NullifierWitness::missing_field(stringify!(opening)))?
61                .try_into()?,
62        })
63    }
64}
65
66impl From<NullifierWitnessRecord> for proto::responses::NullifierWitness {
67    fn from(value: NullifierWitnessRecord) -> Self {
68        Self {
69            nullifier: Some(value.nullifier.into()),
70            opening: Some(value.proof.into()),
71        }
72    }
73}