miden_lib/transaction/
events.rs1use core::fmt;
2
3use super::{TransactionEventError, TransactionTraceParsingError};
4
5const ACCOUNT_VAULT_BEFORE_ADD_ASSET: u32 = 0x2_0000; const ACCOUNT_VAULT_AFTER_ADD_ASSET: u32 = 0x2_0001; const ACCOUNT_VAULT_BEFORE_REMOVE_ASSET: u32 = 0x2_0002; const ACCOUNT_VAULT_AFTER_REMOVE_ASSET: u32 = 0x2_0003; const ACCOUNT_STORAGE_BEFORE_SET_ITEM: u32 = 0x2_0004; const ACCOUNT_STORAGE_AFTER_SET_ITEM: u32 = 0x2_0005; const ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM: u32 = 0x2_0006; const ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM: u32 = 0x2_0007; const ACCOUNT_BEFORE_INCREMENT_NONCE: u32 = 0x2_0008; const ACCOUNT_AFTER_INCREMENT_NONCE: u32 = 0x2_0009; const ACCOUNT_PUSH_PROCEDURE_INDEX: u32 = 0x2_000a; const NOTE_BEFORE_CREATED: u32 = 0x2_000b; const NOTE_AFTER_CREATED: u32 = 0x2_000c; const NOTE_BEFORE_ADD_ASSET: u32 = 0x2_000d; const NOTE_AFTER_ADD_ASSET: u32 = 0x2_000e; const FALCON_SIG_TO_STACK: u32 = 0x2_000f; #[repr(u32)]
44#[derive(Debug, Clone, Eq, PartialEq)]
45pub enum TransactionEvent {
46 AccountVaultBeforeAddAsset = ACCOUNT_VAULT_BEFORE_ADD_ASSET,
47 AccountVaultAfterAddAsset = ACCOUNT_VAULT_AFTER_ADD_ASSET,
48
49 AccountVaultBeforeRemoveAsset = ACCOUNT_VAULT_BEFORE_REMOVE_ASSET,
50 AccountVaultAfterRemoveAsset = ACCOUNT_VAULT_AFTER_REMOVE_ASSET,
51
52 AccountStorageBeforeSetItem = ACCOUNT_STORAGE_BEFORE_SET_ITEM,
53 AccountStorageAfterSetItem = ACCOUNT_STORAGE_AFTER_SET_ITEM,
54
55 AccountStorageBeforeSetMapItem = ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM,
56 AccountStorageAfterSetMapItem = ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM,
57
58 AccountBeforeIncrementNonce = ACCOUNT_BEFORE_INCREMENT_NONCE,
59 AccountAfterIncrementNonce = ACCOUNT_AFTER_INCREMENT_NONCE,
60
61 AccountPushProcedureIndex = ACCOUNT_PUSH_PROCEDURE_INDEX,
62
63 NoteBeforeCreated = NOTE_BEFORE_CREATED,
64 NoteAfterCreated = NOTE_AFTER_CREATED,
65
66 NoteBeforeAddAsset = NOTE_BEFORE_ADD_ASSET,
67 NoteAfterAddAsset = NOTE_AFTER_ADD_ASSET,
68
69 FalconSigToStack = FALCON_SIG_TO_STACK,
70}
71
72impl TransactionEvent {
73 pub const ID_PREFIX: u32 = 2;
75}
76
77impl fmt::Display for TransactionEvent {
78 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
79 write!(f, "{self:?}")
80 }
81}
82
83impl TryFrom<u32> for TransactionEvent {
84 type Error = TransactionEventError;
85
86 fn try_from(value: u32) -> Result<Self, Self::Error> {
87 if value >> 16 != TransactionEvent::ID_PREFIX {
88 return Err(TransactionEventError::NotTransactionEvent(value));
89 }
90
91 match value {
92 ACCOUNT_VAULT_BEFORE_ADD_ASSET => Ok(TransactionEvent::AccountVaultBeforeAddAsset),
93 ACCOUNT_VAULT_AFTER_ADD_ASSET => Ok(TransactionEvent::AccountVaultAfterAddAsset),
94
95 ACCOUNT_VAULT_BEFORE_REMOVE_ASSET => {
96 Ok(TransactionEvent::AccountVaultBeforeRemoveAsset)
97 },
98 ACCOUNT_VAULT_AFTER_REMOVE_ASSET => Ok(TransactionEvent::AccountVaultAfterRemoveAsset),
99
100 ACCOUNT_STORAGE_BEFORE_SET_ITEM => Ok(TransactionEvent::AccountStorageBeforeSetItem),
101 ACCOUNT_STORAGE_AFTER_SET_ITEM => Ok(TransactionEvent::AccountStorageAfterSetItem),
102
103 ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM => {
104 Ok(TransactionEvent::AccountStorageBeforeSetMapItem)
105 },
106 ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM => {
107 Ok(TransactionEvent::AccountStorageAfterSetMapItem)
108 },
109
110 ACCOUNT_BEFORE_INCREMENT_NONCE => Ok(TransactionEvent::AccountBeforeIncrementNonce),
111 ACCOUNT_AFTER_INCREMENT_NONCE => Ok(TransactionEvent::AccountAfterIncrementNonce),
112
113 ACCOUNT_PUSH_PROCEDURE_INDEX => Ok(TransactionEvent::AccountPushProcedureIndex),
114
115 NOTE_BEFORE_CREATED => Ok(TransactionEvent::NoteBeforeCreated),
116 NOTE_AFTER_CREATED => Ok(TransactionEvent::NoteAfterCreated),
117
118 NOTE_BEFORE_ADD_ASSET => Ok(TransactionEvent::NoteBeforeAddAsset),
119 NOTE_AFTER_ADD_ASSET => Ok(TransactionEvent::NoteAfterAddAsset),
120
121 FALCON_SIG_TO_STACK => Ok(TransactionEvent::FalconSigToStack),
122
123 _ => Err(TransactionEventError::InvalidTransactionEvent(value)),
124 }
125 }
126}
127
128#[repr(u32)]
132#[derive(Debug, Clone, Eq, PartialEq)]
133pub enum TransactionTrace {
134 PrologueStart = 0x2_0000, PrologueEnd = 0x2_0001, NotesProcessingStart = 0x2_0002, NotesProcessingEnd = 0x2_0003, NoteExecutionStart = 0x2_0004, NoteExecutionEnd = 0x2_0005, TxScriptProcessingStart = 0x2_0006, TxScriptProcessingEnd = 0x2_0007, EpilogueStart = 0x2_0008, EpilogueEnd = 0x2_0009, }
145
146impl fmt::Display for TransactionTrace {
147 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
148 write!(f, "{self:?}")
149 }
150}
151
152impl TryFrom<u32> for TransactionTrace {
153 type Error = TransactionTraceParsingError;
154
155 fn try_from(value: u32) -> Result<Self, Self::Error> {
156 if value >> 16 != TransactionEvent::ID_PREFIX {
157 return Err(TransactionTraceParsingError::UnknownTransactionTrace(value));
158 }
159
160 match value {
161 0x2_0000 => Ok(TransactionTrace::PrologueStart),
162 0x2_0001 => Ok(TransactionTrace::PrologueEnd),
163 0x2_0002 => Ok(TransactionTrace::NotesProcessingStart),
164 0x2_0003 => Ok(TransactionTrace::NotesProcessingEnd),
165 0x2_0004 => Ok(TransactionTrace::NoteExecutionStart),
166 0x2_0005 => Ok(TransactionTrace::NoteExecutionEnd),
167 0x2_0006 => Ok(TransactionTrace::TxScriptProcessingStart),
168 0x2_0007 => Ok(TransactionTrace::TxScriptProcessingEnd),
169 0x2_0008 => Ok(TransactionTrace::EpilogueStart),
170 0x2_0009 => Ok(TransactionTrace::EpilogueEnd),
171 _ => Err(TransactionTraceParsingError::UnknownTransactionTrace(value)),
172 }
173 }
174}