miden_protocol/transaction/outputs/
mod.rs1use core::fmt::Debug;
2
3use crate::Word;
4use crate::account::AccountHeader;
5use crate::block::BlockNumber;
6use crate::utils::serde::{
7 ByteReader,
8 ByteWriter,
9 Deserializable,
10 DeserializationError,
11 Serializable,
12};
13
14mod notes;
15pub use notes::{
16 OutputNote,
17 OutputNoteCollection,
18 OutputNotes,
19 PrivateOutputNote,
20 PublicOutputNote,
21 RawOutputNote,
22 RawOutputNotes,
23};
24
25#[cfg(test)]
26mod tests;
27
28#[derive(Debug, Clone, PartialEq, Eq)]
33pub struct TransactionOutputs {
34 account: AccountHeader,
36 account_patch_commitment: Word,
39 output_notes: RawOutputNotes,
41 expiration_block_num: BlockNumber,
43}
44
45impl TransactionOutputs {
46 pub const OUTPUT_NOTES_COMMITMENT_WORD_IDX: usize = 0;
52
53 pub const ACCOUNT_UPDATE_COMMITMENT_WORD_IDX: usize = 4;
56
57 pub const EXPIRATION_BLOCK_ELEMENT_IDX: usize = 8;
59
60 pub fn new(
65 account: AccountHeader,
66 account_patch_commitment: Word,
67 output_notes: RawOutputNotes,
68 expiration_block_num: BlockNumber,
69 ) -> Self {
70 Self {
71 account,
72 account_patch_commitment,
73 output_notes,
74 expiration_block_num,
75 }
76 }
77
78 pub fn account(&self) -> &AccountHeader {
83 &self.account
84 }
85
86 pub fn account_patch_commitment(&self) -> Word {
88 self.account_patch_commitment
89 }
90
91 pub fn output_notes(&self) -> &RawOutputNotes {
93 &self.output_notes
94 }
95
96 pub fn expiration_block_num(&self) -> BlockNumber {
98 self.expiration_block_num
99 }
100
101 pub fn into_parts(self) -> (AccountHeader, RawOutputNotes) {
106 (self.account, self.output_notes)
107 }
108}
109
110impl Serializable for TransactionOutputs {
111 fn write_into<W: ByteWriter>(&self, target: &mut W) {
112 self.account.write_into(target);
113 self.account_patch_commitment.write_into(target);
114 self.output_notes.write_into(target);
115 self.expiration_block_num.write_into(target);
116 }
117}
118
119impl Deserializable for TransactionOutputs {
120 fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
121 let account = AccountHeader::read_from(source)?;
122 let account_patch_commitment = Word::read_from(source)?;
123 let output_notes = RawOutputNotes::read_from(source)?;
124 let expiration_block_num = BlockNumber::read_from(source)?;
125
126 Ok(Self {
127 account,
128 account_patch_commitment,
129 output_notes,
130 expiration_block_num,
131 })
132 }
133}