Skip to main content

miden_node_proto/domain/
nullifier.rs

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