miden_node_proto/domain/
transaction.rs1use miden_protocol::Word;
2use miden_protocol::note::Nullifier;
3use miden_protocol::transaction::{InputNoteCommitment, TransactionId};
4
5use crate::decode::{ConversionResultExt, GrpcDecodeExt};
6use crate::errors::ConversionError;
7use crate::{decode, generated as proto};
8
9impl From<&TransactionId> for proto::primitives::Digest {
13 fn from(value: &TransactionId) -> Self {
14 value.as_word().into()
15 }
16}
17
18impl From<TransactionId> for proto::primitives::Digest {
19 fn from(value: TransactionId) -> Self {
20 value.as_word().into()
21 }
22}
23
24impl From<&TransactionId> for proto::transaction::TransactionId {
25 fn from(value: &TransactionId) -> Self {
26 proto::transaction::TransactionId { id: Some(value.into()) }
27 }
28}
29
30impl From<TransactionId> for proto::transaction::TransactionId {
31 fn from(value: TransactionId) -> Self {
32 (&value).into()
33 }
34}
35
36impl TryFrom<proto::primitives::Digest> for TransactionId {
40 type Error = ConversionError;
41
42 fn try_from(value: proto::primitives::Digest) -> Result<Self, Self::Error> {
43 let digest: Word = value.try_into()?;
44 Ok(TransactionId::from_raw(digest))
45 }
46}
47
48impl TryFrom<proto::transaction::TransactionId> for TransactionId {
49 type Error = ConversionError;
50
51 fn try_from(value: proto::transaction::TransactionId) -> Result<Self, Self::Error> {
52 let decoder = value.decoder();
53 decode!(decoder, value.id)
54 }
55}
56
57impl From<InputNoteCommitment> for proto::transaction::InputNoteCommitment {
61 fn from(value: InputNoteCommitment) -> Self {
62 Self {
63 nullifier: Some(value.nullifier().into()),
64 header: value.header().cloned().map(Into::into),
65 }
66 }
67}
68
69impl TryFrom<proto::transaction::InputNoteCommitment> for InputNoteCommitment {
70 type Error = ConversionError;
71
72 fn try_from(value: proto::transaction::InputNoteCommitment) -> Result<Self, Self::Error> {
73 let decoder = value.decoder();
74 let nullifier: Nullifier = decode!(decoder, value.nullifier)?;
75
76 let header: Option<miden_protocol::note::NoteHeader> =
77 value.header.map(TryInto::try_into).transpose().context("header")?;
78
79 Ok(InputNoteCommitment::from_parts_unchecked(nullifier, header))
80 }
81}