miden_node_proto/domain/
nullifier.rs

1use miden_objects::Word;
2use miden_objects::crypto::merkle::SmtProof;
3use miden_objects::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(digest.into())
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::block_producer_store::block_inputs::NullifierWitness>
45    for NullifierWitnessRecord
46{
47    type Error = ConversionError;
48
49    fn try_from(
50        nullifier_witness_record: proto::block_producer_store::block_inputs::NullifierWitness,
51    ) -> Result<Self, Self::Error> {
52        Ok(Self {
53            nullifier: nullifier_witness_record
54                .nullifier
55                .ok_or(proto::block_producer_store::block_inputs::NullifierWitness::missing_field(
56                    stringify!(nullifier),
57                ))?
58                .try_into()?,
59            proof: nullifier_witness_record
60                .opening
61                .ok_or(proto::block_producer_store::block_inputs::NullifierWitness::missing_field(
62                    stringify!(opening),
63                ))?
64                .try_into()?,
65        })
66    }
67}
68
69impl From<NullifierWitnessRecord> for proto::block_producer_store::block_inputs::NullifierWitness {
70    fn from(value: NullifierWitnessRecord) -> Self {
71        Self {
72            nullifier: Some(value.nullifier.into()),
73            opening: Some(value.proof.into()),
74        }
75    }
76}