miden_protocol/note/
note_details_commitment.rs1use alloc::string::String;
2
3use miden_crypto_derive::WordWrapper;
4
5use super::{Felt, Hasher, Word};
6use crate::note::{NoteAssets, NoteRecipient};
7use crate::utils::serde::{
8 ByteReader,
9 ByteWriter,
10 Deserializable,
11 DeserializationError,
12 Serializable,
13};
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, WordWrapper)]
26pub struct NoteDetailsCommitment(Word);
27
28impl NoteDetailsCommitment {
29 pub fn new(recipient: &NoteRecipient, assets: &NoteAssets) -> Self {
31 Self::from_raw_commitments(recipient.digest(), assets.commitment())
32 }
33
34 pub fn from_raw_commitments(recipient: Word, asset_commitment: Word) -> Self {
37 Self(Hasher::merge(&[recipient, asset_commitment]))
38 }
39}
40
41impl Serializable for NoteDetailsCommitment {
45 fn write_into<W: ByteWriter>(&self, target: &mut W) {
46 target.write_bytes(&self.0.to_bytes());
47 }
48
49 fn get_size_hint(&self) -> usize {
50 Word::SERIALIZED_SIZE
51 }
52}
53
54impl Deserializable for NoteDetailsCommitment {
55 fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
56 let commitment = Word::read_from(source)?;
57 Ok(Self(commitment))
58 }
59}