miden_protocol/transaction/outputs/
mod.rs1use core::fmt::Debug;
2
3use crate::Word;
4use crate::account::AccountHeader;
5use crate::asset::FungibleAsset;
6use crate::block::BlockNumber;
7use crate::utils::serde::{
8 ByteReader,
9 ByteWriter,
10 Deserializable,
11 DeserializationError,
12 Serializable,
13};
14
15mod notes;
16pub use notes::{
17 OutputNote,
18 OutputNoteCollection,
19 OutputNotes,
20 PrivateNoteHeader,
21 PublicOutputNote,
22 RawOutputNote,
23 RawOutputNotes,
24};
25
26#[cfg(test)]
27mod tests;
28
29#[derive(Debug, Clone, PartialEq, Eq)]
34pub struct TransactionOutputs {
35 pub account: AccountHeader,
37 pub account_delta_commitment: Word,
39 pub output_notes: RawOutputNotes,
41 pub fee: FungibleAsset,
43 pub expiration_block_num: BlockNumber,
45}
46
47impl TransactionOutputs {
48 pub const OUTPUT_NOTES_COMMITMENT_WORD_IDX: usize = 0;
54
55 pub const ACCOUNT_UPDATE_COMMITMENT_WORD_IDX: usize = 4;
58
59 pub const NATIVE_ASSET_ID_SUFFIX_ELEMENT_IDX: usize = 8;
62
63 pub const NATIVE_ASSET_ID_PREFIX_ELEMENT_IDX: usize = 9;
66
67 pub const FEE_AMOUNT_ELEMENT_IDX: usize = 10;
69
70 pub const EXPIRATION_BLOCK_ELEMENT_IDX: usize = 11;
72}
73
74impl Serializable for TransactionOutputs {
75 fn write_into<W: ByteWriter>(&self, target: &mut W) {
76 self.account.write_into(target);
77 self.account_delta_commitment.write_into(target);
78 self.output_notes.write_into(target);
79 self.fee.write_into(target);
80 self.expiration_block_num.write_into(target);
81 }
82}
83
84impl Deserializable for TransactionOutputs {
85 fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
86 let account = AccountHeader::read_from(source)?;
87 let account_delta_commitment = Word::read_from(source)?;
88 let output_notes = RawOutputNotes::read_from(source)?;
89 let fee = FungibleAsset::read_from(source)?;
90 let expiration_block_num = BlockNumber::read_from(source)?;
91
92 Ok(Self {
93 account,
94 account_delta_commitment,
95 output_notes,
96 fee,
97 expiration_block_num,
98 })
99 }
100}