miden_client/transaction/
result.rs1use alloc::vec::Vec;
2
3use miden_objects::account::AccountDelta;
4use miden_objects::block::BlockNumber;
5use miden_objects::note::{NoteDetails, NoteTag};
6use miden_objects::transaction::{
7 ExecutedTransaction,
8 InputNote,
9 InputNotes,
10 OutputNotes,
11 TransactionArgs,
12 TransactionId,
13 TransactionInputs,
14};
15use miden_tx::utils::{ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable};
16
17use crate::ClientError;
18
19#[derive(Clone, Debug, PartialEq)]
27pub struct TransactionResult {
28 transaction: ExecutedTransaction,
29 future_notes: Vec<(NoteDetails, NoteTag)>,
30}
31
32impl TransactionResult {
33 pub fn new(
36 transaction: ExecutedTransaction,
37 future_notes: Vec<(NoteDetails, NoteTag)>,
38 ) -> Result<Self, ClientError> {
39 Ok(Self { transaction, future_notes })
40 }
41
42 pub fn id(&self) -> TransactionId {
44 self.transaction.id()
45 }
46
47 pub fn executed_transaction(&self) -> &ExecutedTransaction {
49 &self.transaction
50 }
51
52 pub fn created_notes(&self) -> &OutputNotes {
54 self.transaction.output_notes()
55 }
56
57 pub fn future_notes(&self) -> &[(NoteDetails, NoteTag)] {
60 &self.future_notes
61 }
62
63 pub fn block_num(&self) -> BlockNumber {
65 self.transaction.block_header().block_num()
66 }
67
68 pub fn transaction_arguments(&self) -> &TransactionArgs {
70 self.transaction.tx_args()
71 }
72
73 pub fn tx_inputs(&self) -> &TransactionInputs {
75 self.transaction.tx_inputs()
76 }
77
78 pub fn account_delta(&self) -> &AccountDelta {
80 self.transaction.account_delta()
81 }
82
83 pub fn consumed_notes(&self) -> &InputNotes<InputNote> {
85 self.transaction.tx_inputs().input_notes()
86 }
87}
88
89impl From<&TransactionResult> for TransactionInputs {
90 fn from(value: &TransactionResult) -> Self {
91 value.executed_transaction().tx_inputs().clone()
92 }
93}
94
95impl From<TransactionResult> for TransactionInputs {
96 fn from(value: TransactionResult) -> Self {
97 let (inputs, ..) = value.transaction.into_parts();
98 inputs
99 }
100}
101
102impl From<TransactionResult> for ExecutedTransaction {
103 fn from(tx_result: TransactionResult) -> ExecutedTransaction {
104 tx_result.transaction
105 }
106}
107
108impl Serializable for TransactionResult {
109 fn write_into<W: ByteWriter>(&self, target: &mut W) {
110 self.transaction.write_into(target);
111 self.future_notes.write_into(target);
112 }
113}
114
115impl Deserializable for TransactionResult {
116 fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
117 let transaction = ExecutedTransaction::read_from(source)?;
118 let future_notes = Vec::<(NoteDetails, NoteTag)>::read_from(source)?;
119
120 Ok(Self { transaction, future_notes })
121 }
122}