miden_node_proto/domain/
nullifier.rs1use 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
11impl 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
26impl 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#[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}