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 account: AccountHeader,
37 account_delta_commitment: Word,
39 output_notes: RawOutputNotes,
41 fee: FungibleAsset,
43 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 pub fn new(
78 account: AccountHeader,
79 account_delta_commitment: Word,
80 output_notes: RawOutputNotes,
81 fee: FungibleAsset,
82 expiration_block_num: BlockNumber,
83 ) -> Self {
84 Self {
85 account,
86 account_delta_commitment,
87 output_notes,
88 fee,
89 expiration_block_num,
90 }
91 }
92
93 pub fn account(&self) -> &AccountHeader {
98 &self.account
99 }
100
101 pub fn account_delta_commitment(&self) -> Word {
103 self.account_delta_commitment
104 }
105
106 pub fn output_notes(&self) -> &RawOutputNotes {
108 &self.output_notes
109 }
110
111 pub fn fee(&self) -> FungibleAsset {
113 self.fee
114 }
115
116 pub fn expiration_block_num(&self) -> BlockNumber {
118 self.expiration_block_num
119 }
120
121 pub fn into_parts(self) -> (AccountHeader, RawOutputNotes) {
126 (self.account, self.output_notes)
127 }
128}
129
130impl Serializable for TransactionOutputs {
131 fn write_into<W: ByteWriter>(&self, target: &mut W) {
132 self.account.write_into(target);
133 self.account_delta_commitment.write_into(target);
134 self.output_notes.write_into(target);
135 self.fee.write_into(target);
136 self.expiration_block_num.write_into(target);
137 }
138}
139
140impl Deserializable for TransactionOutputs {
141 fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
142 let account = AccountHeader::read_from(source)?;
143 let account_delta_commitment = Word::read_from(source)?;
144 let output_notes = RawOutputNotes::read_from(source)?;
145 let fee = FungibleAsset::read_from(source)?;
146 let expiration_block_num = BlockNumber::read_from(source)?;
147
148 Ok(Self {
149 account,
150 account_delta_commitment,
151 output_notes,
152 fee,
153 expiration_block_num,
154 })
155 }
156}