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