miden_protocol/transaction/kernel/
tx_event_id.rs1use core::fmt;
2
3use crate::errors::TransactionEventError;
4use crate::vm::{EventId, EventName};
5
6include!(concat!(env!("OUT_DIR"), "/assets/transaction_events.rs"));
10
11#[repr(u64)]
20#[derive(Debug, Clone, Eq, PartialEq)]
21pub enum TransactionEventId {
22 AccountBeforeForeignLoad = ACCOUNT_BEFORE_FOREIGN_LOAD_ID,
23
24 AccountVaultBeforeAddAsset = ACCOUNT_VAULT_BEFORE_ADD_ASSET_ID,
25 AccountVaultAfterAddAsset = ACCOUNT_VAULT_AFTER_ADD_ASSET_ID,
26
27 AccountVaultBeforeRemoveAsset = ACCOUNT_VAULT_BEFORE_REMOVE_ASSET_ID,
28 AccountVaultAfterRemoveAsset = ACCOUNT_VAULT_AFTER_REMOVE_ASSET_ID,
29
30 AccountVaultBeforeMintAsset = ACCOUNT_VAULT_BEFORE_MINT_ASSET_ID,
31 AccountVaultBeforeBurnAsset = ACCOUNT_VAULT_BEFORE_BURN_ASSET_ID,
32
33 AccountBeforeAssetDeltaComputation = ACCOUNT_BEFORE_ASSET_DELTA_COMPUTATION_ID,
34 AccountOnAssetDeltaComputation = ACCOUNT_ON_ASSET_DELTA_COMPUTATION_ID,
35
36 AccountVaultBeforeGetAsset = ACCOUNT_VAULT_BEFORE_GET_ASSET_ID,
37
38 AccountStorageBeforeSetItem = ACCOUNT_STORAGE_BEFORE_SET_ITEM_ID,
39 AccountStorageAfterSetItem = ACCOUNT_STORAGE_AFTER_SET_ITEM_ID,
40
41 AccountStorageBeforeGetMapItem = ACCOUNT_STORAGE_BEFORE_GET_MAP_ITEM_ID,
42
43 AccountStorageBeforeSetMapItem = ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM_ID,
44 AccountStorageAfterSetMapItem = ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM_ID,
45
46 AccountBeforeIncrementNonce = ACCOUNT_BEFORE_INCREMENT_NONCE_ID,
47 AccountAfterIncrementNonce = ACCOUNT_AFTER_INCREMENT_NONCE_ID,
48
49 AccountPushProcedureIndex = ACCOUNT_PUSH_PROCEDURE_INDEX_ID,
50
51 AccountBeforeCodeUpgrade = ACCOUNT_BEFORE_CODE_UPGRADE_ID,
52
53 NoteBeforeCreated = NOTE_BEFORE_CREATED_ID,
54 NoteAfterCreated = NOTE_AFTER_CREATED_ID,
55
56 NoteBeforeAddAsset = NOTE_BEFORE_ADD_ASSET_ID,
57 NoteAfterAddAsset = NOTE_AFTER_ADD_ASSET_ID,
58
59 NoteBeforeAddAttachment = NOTE_BEFORE_ADD_ATTACHMENT_ID,
60
61 InputNoteIndexLookup = INPUT_NOTE_INDEX_LOOKUP_ID,
62
63 TxBeforeBlockWitnessLoad = TX_BEFORE_BLOCK_WITNESS_LOAD_ID,
64
65 AuthRequest = AUTH_REQUEST_ID,
66
67 PrologueStart = PROLOGUE_START_ID,
68 PrologueEnd = PROLOGUE_END_ID,
69
70 NotesProcessingStart = NOTES_PROCESSING_START_ID,
71 NotesProcessingEnd = NOTES_PROCESSING_END_ID,
72
73 NoteExecutionStart = NOTE_EXECUTION_START_ID,
74 NoteExecutionEnd = NOTE_EXECUTION_END_ID,
75
76 TxScriptProcessingStart = TX_SCRIPT_PROCESSING_START_ID,
77 TxScriptProcessingEnd = TX_SCRIPT_PROCESSING_END_ID,
78
79 EpilogueStart = EPILOGUE_START_ID,
80 EpilogueEnd = EPILOGUE_END_ID,
81
82 EpilogueAuthProcStart = EPILOGUE_AUTH_PROC_START_ID,
83 EpilogueAuthProcEnd = EPILOGUE_AUTH_PROC_END_ID,
84
85 LinkMapSet = LINK_MAP_SET_ID,
86 LinkMapGet = LINK_MAP_GET_ID,
87
88 Unauthorized = AUTH_UNAUTHORIZED_ID,
89}
90
91impl TransactionEventId {
92 pub fn is_privileged(&self) -> bool {
97 let is_unprivileged =
98 matches!(self, Self::AuthRequest | Self::InputNoteIndexLookup | Self::Unauthorized);
99 !is_unprivileged
100 }
101
102 pub fn event_id(&self) -> EventId {
104 EventId::from_u64(self.clone() as u64)
105 }
106
107 pub fn event_name(&self) -> &'static EventName {
109 match self {
110 Self::AccountBeforeForeignLoad => &ACCOUNT_BEFORE_FOREIGN_LOAD_NAME,
111 Self::AccountVaultBeforeAddAsset => &ACCOUNT_VAULT_BEFORE_ADD_ASSET_NAME,
112 Self::AccountVaultAfterAddAsset => &ACCOUNT_VAULT_AFTER_ADD_ASSET_NAME,
113 Self::AccountVaultBeforeRemoveAsset => &ACCOUNT_VAULT_BEFORE_REMOVE_ASSET_NAME,
114 Self::AccountVaultAfterRemoveAsset => &ACCOUNT_VAULT_AFTER_REMOVE_ASSET_NAME,
115 Self::AccountVaultBeforeMintAsset => &ACCOUNT_VAULT_BEFORE_MINT_ASSET_NAME,
116 Self::AccountVaultBeforeBurnAsset => &ACCOUNT_VAULT_BEFORE_BURN_ASSET_NAME,
117 Self::AccountBeforeAssetDeltaComputation => {
118 &ACCOUNT_BEFORE_ASSET_DELTA_COMPUTATION_NAME
119 },
120 Self::AccountOnAssetDeltaComputation => &ACCOUNT_ON_ASSET_DELTA_COMPUTATION_NAME,
121 Self::AccountVaultBeforeGetAsset => &ACCOUNT_VAULT_BEFORE_GET_ASSET_NAME,
122 Self::AccountStorageBeforeSetItem => &ACCOUNT_STORAGE_BEFORE_SET_ITEM_NAME,
123 Self::AccountStorageAfterSetItem => &ACCOUNT_STORAGE_AFTER_SET_ITEM_NAME,
124 Self::AccountStorageBeforeGetMapItem => &ACCOUNT_STORAGE_BEFORE_GET_MAP_ITEM_NAME,
125 Self::AccountStorageBeforeSetMapItem => &ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM_NAME,
126 Self::AccountStorageAfterSetMapItem => &ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM_NAME,
127 Self::AccountBeforeIncrementNonce => &ACCOUNT_BEFORE_INCREMENT_NONCE_NAME,
128 Self::AccountAfterIncrementNonce => &ACCOUNT_AFTER_INCREMENT_NONCE_NAME,
129 Self::AccountPushProcedureIndex => &ACCOUNT_PUSH_PROCEDURE_INDEX_NAME,
130 Self::AccountBeforeCodeUpgrade => &ACCOUNT_BEFORE_CODE_UPGRADE_NAME,
131 Self::NoteBeforeCreated => &NOTE_BEFORE_CREATED_NAME,
132 Self::NoteAfterCreated => &NOTE_AFTER_CREATED_NAME,
133 Self::NoteBeforeAddAsset => &NOTE_BEFORE_ADD_ASSET_NAME,
134 Self::NoteAfterAddAsset => &NOTE_AFTER_ADD_ASSET_NAME,
135 Self::NoteBeforeAddAttachment => &NOTE_BEFORE_ADD_ATTACHMENT_NAME,
136 Self::InputNoteIndexLookup => &INPUT_NOTE_INDEX_LOOKUP_NAME,
137 Self::TxBeforeBlockWitnessLoad => &TX_BEFORE_BLOCK_WITNESS_LOAD_NAME,
138 Self::AuthRequest => &AUTH_REQUEST_NAME,
139 Self::PrologueStart => &PROLOGUE_START_NAME,
140 Self::PrologueEnd => &PROLOGUE_END_NAME,
141 Self::NotesProcessingStart => &NOTES_PROCESSING_START_NAME,
142 Self::NotesProcessingEnd => &NOTES_PROCESSING_END_NAME,
143 Self::NoteExecutionStart => &NOTE_EXECUTION_START_NAME,
144 Self::NoteExecutionEnd => &NOTE_EXECUTION_END_NAME,
145 Self::TxScriptProcessingStart => &TX_SCRIPT_PROCESSING_START_NAME,
146 Self::TxScriptProcessingEnd => &TX_SCRIPT_PROCESSING_END_NAME,
147 Self::EpilogueStart => &EPILOGUE_START_NAME,
148 Self::EpilogueEnd => &EPILOGUE_END_NAME,
149 Self::EpilogueAuthProcStart => &EPILOGUE_AUTH_PROC_START_NAME,
150 Self::EpilogueAuthProcEnd => &EPILOGUE_AUTH_PROC_END_NAME,
151 Self::LinkMapSet => &LINK_MAP_SET_NAME,
152 Self::LinkMapGet => &LINK_MAP_GET_NAME,
153 Self::Unauthorized => &AUTH_UNAUTHORIZED_NAME,
154 }
155 }
156}
157
158impl fmt::Display for TransactionEventId {
159 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
160 write!(f, "{}", self.event_name())
161 }
162}
163
164impl TryFrom<EventId> for TransactionEventId {
165 type Error = TransactionEventError;
166
167 fn try_from(event_id: EventId) -> Result<Self, Self::Error> {
168 let raw = event_id.as_felt().as_canonical_u64();
169
170 match raw {
171 ACCOUNT_BEFORE_FOREIGN_LOAD_ID => Ok(TransactionEventId::AccountBeforeForeignLoad),
172
173 ACCOUNT_VAULT_BEFORE_ADD_ASSET_ID => Ok(TransactionEventId::AccountVaultBeforeAddAsset),
174 ACCOUNT_VAULT_AFTER_ADD_ASSET_ID => Ok(TransactionEventId::AccountVaultAfterAddAsset),
175
176 ACCOUNT_VAULT_BEFORE_REMOVE_ASSET_ID => {
177 Ok(TransactionEventId::AccountVaultBeforeRemoveAsset)
178 },
179 ACCOUNT_VAULT_AFTER_REMOVE_ASSET_ID => {
180 Ok(TransactionEventId::AccountVaultAfterRemoveAsset)
181 },
182
183 ACCOUNT_VAULT_BEFORE_MINT_ASSET_ID => {
184 Ok(TransactionEventId::AccountVaultBeforeMintAsset)
185 },
186 ACCOUNT_VAULT_BEFORE_BURN_ASSET_ID => {
187 Ok(TransactionEventId::AccountVaultBeforeBurnAsset)
188 },
189
190 ACCOUNT_ON_ASSET_DELTA_COMPUTATION_ID => {
191 Ok(TransactionEventId::AccountOnAssetDeltaComputation)
192 },
193 ACCOUNT_BEFORE_ASSET_DELTA_COMPUTATION_ID => {
194 Ok(TransactionEventId::AccountBeforeAssetDeltaComputation)
195 },
196
197 ACCOUNT_VAULT_BEFORE_GET_ASSET_ID => Ok(TransactionEventId::AccountVaultBeforeGetAsset),
198
199 ACCOUNT_STORAGE_BEFORE_SET_ITEM_ID => {
200 Ok(TransactionEventId::AccountStorageBeforeSetItem)
201 },
202 ACCOUNT_STORAGE_AFTER_SET_ITEM_ID => Ok(TransactionEventId::AccountStorageAfterSetItem),
203
204 ACCOUNT_STORAGE_BEFORE_GET_MAP_ITEM_ID => {
205 Ok(TransactionEventId::AccountStorageBeforeGetMapItem)
206 },
207
208 ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM_ID => {
209 Ok(TransactionEventId::AccountStorageBeforeSetMapItem)
210 },
211 ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM_ID => {
212 Ok(TransactionEventId::AccountStorageAfterSetMapItem)
213 },
214
215 ACCOUNT_BEFORE_INCREMENT_NONCE_ID => {
216 Ok(TransactionEventId::AccountBeforeIncrementNonce)
217 },
218 ACCOUNT_AFTER_INCREMENT_NONCE_ID => Ok(TransactionEventId::AccountAfterIncrementNonce),
219
220 ACCOUNT_PUSH_PROCEDURE_INDEX_ID => Ok(TransactionEventId::AccountPushProcedureIndex),
221
222 ACCOUNT_BEFORE_CODE_UPGRADE_ID => Ok(TransactionEventId::AccountBeforeCodeUpgrade),
223
224 NOTE_BEFORE_CREATED_ID => Ok(TransactionEventId::NoteBeforeCreated),
225 NOTE_AFTER_CREATED_ID => Ok(TransactionEventId::NoteAfterCreated),
226
227 NOTE_BEFORE_ADD_ASSET_ID => Ok(TransactionEventId::NoteBeforeAddAsset),
228 NOTE_AFTER_ADD_ASSET_ID => Ok(TransactionEventId::NoteAfterAddAsset),
229
230 NOTE_BEFORE_ADD_ATTACHMENT_ID => Ok(TransactionEventId::NoteBeforeAddAttachment),
231
232 INPUT_NOTE_INDEX_LOOKUP_ID => Ok(TransactionEventId::InputNoteIndexLookup),
233
234 TX_BEFORE_BLOCK_WITNESS_LOAD_ID => Ok(TransactionEventId::TxBeforeBlockWitnessLoad),
235
236 AUTH_REQUEST_ID => Ok(TransactionEventId::AuthRequest),
237
238 PROLOGUE_START_ID => Ok(TransactionEventId::PrologueStart),
239 PROLOGUE_END_ID => Ok(TransactionEventId::PrologueEnd),
240
241 NOTES_PROCESSING_START_ID => Ok(TransactionEventId::NotesProcessingStart),
242 NOTES_PROCESSING_END_ID => Ok(TransactionEventId::NotesProcessingEnd),
243
244 NOTE_EXECUTION_START_ID => Ok(TransactionEventId::NoteExecutionStart),
245 NOTE_EXECUTION_END_ID => Ok(TransactionEventId::NoteExecutionEnd),
246
247 TX_SCRIPT_PROCESSING_START_ID => Ok(TransactionEventId::TxScriptProcessingStart),
248 TX_SCRIPT_PROCESSING_END_ID => Ok(TransactionEventId::TxScriptProcessingEnd),
249
250 EPILOGUE_START_ID => Ok(TransactionEventId::EpilogueStart),
251 EPILOGUE_AUTH_PROC_START_ID => Ok(TransactionEventId::EpilogueAuthProcStart),
252 EPILOGUE_AUTH_PROC_END_ID => Ok(TransactionEventId::EpilogueAuthProcEnd),
253 EPILOGUE_END_ID => Ok(TransactionEventId::EpilogueEnd),
254
255 LINK_MAP_SET_ID => Ok(TransactionEventId::LinkMapSet),
256 LINK_MAP_GET_ID => Ok(TransactionEventId::LinkMapGet),
257
258 AUTH_UNAUTHORIZED_ID => Ok(TransactionEventId::Unauthorized),
259
260 _ => Err(TransactionEventError::InvalidTransactionEvent(event_id)),
261 }
262 }
263}