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 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}