miden_lib/transaction/
events.rs1use core::fmt;
2
3use super::TransactionEventError;
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 AUTH_REQUEST: u32 = 0x2_000f; const PROLOGUE_START: u32 = 0x2_0010; const PROLOGUE_END: u32 = 0x2_0011; const NOTES_PROCESSING_START: u32 = 0x2_0012; const NOTES_PROCESSING_END: u32 = 0x2_0013; const NOTE_EXECUTION_START: u32 = 0x2_0014; const NOTE_EXECUTION_END: u32 = 0x2_0015; const TX_SCRIPT_PROCESSING_START: u32 = 0x2_0016; const TX_SCRIPT_PROCESSING_END: u32 = 0x2_0017; const EPILOGUE_START: u32 = 0x2_0018; const EPILOGUE_TX_CYCLES_OBTAINED: u32 = 0x2_0019; const EPILOGUE_TX_FEE_COMPUTED: u32 = 0x2_001a; const EPILOGUE_END: u32 = 0x2_001b; const LINK_MAP_SET_EVENT: u32 = 0x2_001c; const LINK_MAP_GET_EVENT: u32 = 0x2_001d; const UNAUTHORIZED_EVENT: u32 = 0x2_001e; #[repr(u32)]
66#[derive(Debug, Clone, Eq, PartialEq)]
67pub enum TransactionEvent {
68 AccountVaultBeforeAddAsset = ACCOUNT_VAULT_BEFORE_ADD_ASSET,
69 AccountVaultAfterAddAsset = ACCOUNT_VAULT_AFTER_ADD_ASSET,
70
71 AccountVaultBeforeRemoveAsset = ACCOUNT_VAULT_BEFORE_REMOVE_ASSET,
72 AccountVaultAfterRemoveAsset = ACCOUNT_VAULT_AFTER_REMOVE_ASSET,
73
74 AccountStorageBeforeSetItem = ACCOUNT_STORAGE_BEFORE_SET_ITEM,
75 AccountStorageAfterSetItem = ACCOUNT_STORAGE_AFTER_SET_ITEM,
76
77 AccountStorageBeforeSetMapItem = ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM,
78 AccountStorageAfterSetMapItem = ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM,
79
80 AccountBeforeIncrementNonce = ACCOUNT_BEFORE_INCREMENT_NONCE,
81 AccountAfterIncrementNonce = ACCOUNT_AFTER_INCREMENT_NONCE,
82
83 AccountPushProcedureIndex = ACCOUNT_PUSH_PROCEDURE_INDEX,
84
85 NoteBeforeCreated = NOTE_BEFORE_CREATED,
86 NoteAfterCreated = NOTE_AFTER_CREATED,
87
88 NoteBeforeAddAsset = NOTE_BEFORE_ADD_ASSET,
89 NoteAfterAddAsset = NOTE_AFTER_ADD_ASSET,
90
91 AuthRequest = AUTH_REQUEST,
92
93 PrologueStart = PROLOGUE_START,
94 PrologueEnd = PROLOGUE_END,
95
96 NotesProcessingStart = NOTES_PROCESSING_START,
97 NotesProcessingEnd = NOTES_PROCESSING_END,
98
99 NoteExecutionStart = NOTE_EXECUTION_START,
100 NoteExecutionEnd = NOTE_EXECUTION_END,
101
102 TxScriptProcessingStart = TX_SCRIPT_PROCESSING_START,
103 TxScriptProcessingEnd = TX_SCRIPT_PROCESSING_END,
104
105 EpilogueStart = EPILOGUE_START,
106 EpilogueTxCyclesObtained = EPILOGUE_TX_CYCLES_OBTAINED,
107 EpilogueTxFeeComputed = EPILOGUE_TX_FEE_COMPUTED,
108 EpilogueEnd = EPILOGUE_END,
109
110 LinkMapSetEvent = LINK_MAP_SET_EVENT,
111 LinkMapGetEvent = LINK_MAP_GET_EVENT,
112
113 Unauthorized = UNAUTHORIZED_EVENT,
114}
115
116impl TransactionEvent {
117 pub const ID_PREFIX: u32 = 2;
119
120 pub fn is_privileged(&self) -> bool {
123 let is_unprivileged = matches!(self, Self::AuthRequest | Self::Unauthorized);
124 !is_unprivileged
125 }
126}
127
128impl fmt::Display for TransactionEvent {
129 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
130 write!(f, "{self:?}")
131 }
132}
133
134impl TryFrom<u32> for TransactionEvent {
135 type Error = TransactionEventError;
136
137 fn try_from(value: u32) -> Result<Self, Self::Error> {
138 if value >> 16 != TransactionEvent::ID_PREFIX {
139 return Err(TransactionEventError::NotTransactionEvent(value));
140 }
141
142 match value {
143 ACCOUNT_VAULT_BEFORE_ADD_ASSET => Ok(TransactionEvent::AccountVaultBeforeAddAsset),
144 ACCOUNT_VAULT_AFTER_ADD_ASSET => Ok(TransactionEvent::AccountVaultAfterAddAsset),
145
146 ACCOUNT_VAULT_BEFORE_REMOVE_ASSET => {
147 Ok(TransactionEvent::AccountVaultBeforeRemoveAsset)
148 },
149 ACCOUNT_VAULT_AFTER_REMOVE_ASSET => Ok(TransactionEvent::AccountVaultAfterRemoveAsset),
150
151 ACCOUNT_STORAGE_BEFORE_SET_ITEM => Ok(TransactionEvent::AccountStorageBeforeSetItem),
152 ACCOUNT_STORAGE_AFTER_SET_ITEM => Ok(TransactionEvent::AccountStorageAfterSetItem),
153
154 ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM => {
155 Ok(TransactionEvent::AccountStorageBeforeSetMapItem)
156 },
157 ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM => {
158 Ok(TransactionEvent::AccountStorageAfterSetMapItem)
159 },
160
161 ACCOUNT_BEFORE_INCREMENT_NONCE => Ok(TransactionEvent::AccountBeforeIncrementNonce),
162 ACCOUNT_AFTER_INCREMENT_NONCE => Ok(TransactionEvent::AccountAfterIncrementNonce),
163
164 ACCOUNT_PUSH_PROCEDURE_INDEX => Ok(TransactionEvent::AccountPushProcedureIndex),
165
166 NOTE_BEFORE_CREATED => Ok(TransactionEvent::NoteBeforeCreated),
167 NOTE_AFTER_CREATED => Ok(TransactionEvent::NoteAfterCreated),
168
169 NOTE_BEFORE_ADD_ASSET => Ok(TransactionEvent::NoteBeforeAddAsset),
170 NOTE_AFTER_ADD_ASSET => Ok(TransactionEvent::NoteAfterAddAsset),
171
172 AUTH_REQUEST => Ok(TransactionEvent::AuthRequest),
173
174 PROLOGUE_START => Ok(TransactionEvent::PrologueStart),
175 PROLOGUE_END => Ok(TransactionEvent::PrologueEnd),
176
177 NOTES_PROCESSING_START => Ok(TransactionEvent::NotesProcessingStart),
178 NOTES_PROCESSING_END => Ok(TransactionEvent::NotesProcessingEnd),
179
180 NOTE_EXECUTION_START => Ok(TransactionEvent::NoteExecutionStart),
181 NOTE_EXECUTION_END => Ok(TransactionEvent::NoteExecutionEnd),
182
183 TX_SCRIPT_PROCESSING_START => Ok(TransactionEvent::TxScriptProcessingStart),
184 TX_SCRIPT_PROCESSING_END => Ok(TransactionEvent::TxScriptProcessingEnd),
185
186 EPILOGUE_START => Ok(TransactionEvent::EpilogueStart),
187 EPILOGUE_TX_CYCLES_OBTAINED => Ok(TransactionEvent::EpilogueTxCyclesObtained),
188 EPILOGUE_TX_FEE_COMPUTED => Ok(TransactionEvent::EpilogueTxFeeComputed),
189 EPILOGUE_END => Ok(TransactionEvent::EpilogueEnd),
190
191 LINK_MAP_SET_EVENT => Ok(TransactionEvent::LinkMapSetEvent),
192 LINK_MAP_GET_EVENT => Ok(TransactionEvent::LinkMapGetEvent),
193
194 UNAUTHORIZED_EVENT => Ok(TransactionEvent::Unauthorized),
195
196 _ => Err(TransactionEventError::InvalidTransactionEvent(value)),
197 }
198 }
199}