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 AccountVaultBeforeGetAsset = ACCOUNT_VAULT_BEFORE_GET_ASSET_ID,
31
32 AccountStorageBeforeSetItem = ACCOUNT_STORAGE_BEFORE_SET_ITEM_ID,
33 AccountStorageAfterSetItem = ACCOUNT_STORAGE_AFTER_SET_ITEM_ID,
34
35 AccountStorageBeforeGetMapItem = ACCOUNT_STORAGE_BEFORE_GET_MAP_ITEM_ID,
36
37 AccountStorageBeforeSetMapItem = ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM_ID,
38 AccountStorageAfterSetMapItem = ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM_ID,
39
40 AccountBeforeIncrementNonce = ACCOUNT_BEFORE_INCREMENT_NONCE_ID,
41 AccountAfterIncrementNonce = ACCOUNT_AFTER_INCREMENT_NONCE_ID,
42
43 AccountPushProcedureIndex = ACCOUNT_PUSH_PROCEDURE_INDEX_ID,
44
45 NoteBeforeCreated = NOTE_BEFORE_CREATED_ID,
46 NoteAfterCreated = NOTE_AFTER_CREATED_ID,
47
48 NoteBeforeAddAsset = NOTE_BEFORE_ADD_ASSET_ID,
49 NoteAfterAddAsset = NOTE_AFTER_ADD_ASSET_ID,
50
51 NoteBeforeSetAttachment = NOTE_BEFORE_SET_ATTACHMENT_ID,
52
53 AuthRequest = AUTH_REQUEST_ID,
54
55 PrologueStart = PROLOGUE_START_ID,
56 PrologueEnd = PROLOGUE_END_ID,
57
58 NotesProcessingStart = NOTES_PROCESSING_START_ID,
59 NotesProcessingEnd = NOTES_PROCESSING_END_ID,
60
61 NoteExecutionStart = NOTE_EXECUTION_START_ID,
62 NoteExecutionEnd = NOTE_EXECUTION_END_ID,
63
64 TxScriptProcessingStart = TX_SCRIPT_PROCESSING_START_ID,
65 TxScriptProcessingEnd = TX_SCRIPT_PROCESSING_END_ID,
66
67 EpilogueStart = EPILOGUE_START_ID,
68 EpilogueEnd = EPILOGUE_END_ID,
69
70 EpilogueAuthProcStart = EPILOGUE_AUTH_PROC_START_ID,
71 EpilogueAuthProcEnd = EPILOGUE_AUTH_PROC_END_ID,
72
73 EpilogueAfterTxCyclesObtained = EPILOGUE_AFTER_TX_CYCLES_OBTAINED_ID,
74 EpilogueBeforeTxFeeRemovedFromAccount = EPILOGUE_BEFORE_TX_FEE_REMOVED_FROM_ACCOUNT_ID,
75
76 LinkMapSet = LINK_MAP_SET_ID,
77 LinkMapGet = LINK_MAP_GET_ID,
78
79 Unauthorized = AUTH_UNAUTHORIZED_ID,
80}
81
82impl TransactionEventId {
83 pub fn is_privileged(&self) -> bool {
86 let is_unprivileged = matches!(self, Self::AuthRequest | Self::Unauthorized);
87 !is_unprivileged
88 }
89
90 pub fn event_id(&self) -> EventId {
92 EventId::from_u64(self.clone() as u64)
93 }
94
95 pub fn event_name(&self) -> &'static EventName {
97 match self {
98 Self::AccountBeforeForeignLoad => &ACCOUNT_BEFORE_FOREIGN_LOAD_NAME,
99 Self::AccountVaultBeforeAddAsset => &ACCOUNT_VAULT_BEFORE_ADD_ASSET_NAME,
100 Self::AccountVaultAfterAddAsset => &ACCOUNT_VAULT_AFTER_ADD_ASSET_NAME,
101 Self::AccountVaultBeforeRemoveAsset => &ACCOUNT_VAULT_BEFORE_REMOVE_ASSET_NAME,
102 Self::AccountVaultAfterRemoveAsset => &ACCOUNT_VAULT_AFTER_REMOVE_ASSET_NAME,
103 Self::AccountVaultBeforeGetAsset => &ACCOUNT_VAULT_BEFORE_GET_ASSET_NAME,
104 Self::AccountStorageBeforeSetItem => &ACCOUNT_STORAGE_BEFORE_SET_ITEM_NAME,
105 Self::AccountStorageAfterSetItem => &ACCOUNT_STORAGE_AFTER_SET_ITEM_NAME,
106 Self::AccountStorageBeforeGetMapItem => &ACCOUNT_STORAGE_BEFORE_GET_MAP_ITEM_NAME,
107 Self::AccountStorageBeforeSetMapItem => &ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM_NAME,
108 Self::AccountStorageAfterSetMapItem => &ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM_NAME,
109 Self::AccountBeforeIncrementNonce => &ACCOUNT_BEFORE_INCREMENT_NONCE_NAME,
110 Self::AccountAfterIncrementNonce => &ACCOUNT_AFTER_INCREMENT_NONCE_NAME,
111 Self::AccountPushProcedureIndex => &ACCOUNT_PUSH_PROCEDURE_INDEX_NAME,
112 Self::NoteBeforeCreated => &NOTE_BEFORE_CREATED_NAME,
113 Self::NoteAfterCreated => &NOTE_AFTER_CREATED_NAME,
114 Self::NoteBeforeAddAsset => &NOTE_BEFORE_ADD_ASSET_NAME,
115 Self::NoteAfterAddAsset => &NOTE_AFTER_ADD_ASSET_NAME,
116 Self::NoteBeforeSetAttachment => &NOTE_BEFORE_SET_ATTACHMENT_NAME,
117 Self::AuthRequest => &AUTH_REQUEST_NAME,
118 Self::PrologueStart => &PROLOGUE_START_NAME,
119 Self::PrologueEnd => &PROLOGUE_END_NAME,
120 Self::NotesProcessingStart => &NOTES_PROCESSING_START_NAME,
121 Self::NotesProcessingEnd => &NOTES_PROCESSING_END_NAME,
122 Self::NoteExecutionStart => &NOTE_EXECUTION_START_NAME,
123 Self::NoteExecutionEnd => &NOTE_EXECUTION_END_NAME,
124 Self::TxScriptProcessingStart => &TX_SCRIPT_PROCESSING_START_NAME,
125 Self::TxScriptProcessingEnd => &TX_SCRIPT_PROCESSING_END_NAME,
126 Self::EpilogueStart => &EPILOGUE_START_NAME,
127 Self::EpilogueEnd => &EPILOGUE_END_NAME,
128 Self::EpilogueAuthProcStart => &EPILOGUE_AUTH_PROC_START_NAME,
129 Self::EpilogueAuthProcEnd => &EPILOGUE_AUTH_PROC_END_NAME,
130 Self::EpilogueAfterTxCyclesObtained => &EPILOGUE_AFTER_TX_CYCLES_OBTAINED_NAME,
131 Self::EpilogueBeforeTxFeeRemovedFromAccount => {
132 &EPILOGUE_BEFORE_TX_FEE_REMOVED_FROM_ACCOUNT_NAME
133 },
134 Self::LinkMapSet => &LINK_MAP_SET_NAME,
135 Self::LinkMapGet => &LINK_MAP_GET_NAME,
136 Self::Unauthorized => &AUTH_UNAUTHORIZED_NAME,
137 }
138 }
139}
140
141impl fmt::Display for TransactionEventId {
142 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
143 write!(f, "{}", self.event_name())
144 }
145}
146
147impl TryFrom<EventId> for TransactionEventId {
148 type Error = TransactionEventError;
149
150 fn try_from(event_id: EventId) -> Result<Self, Self::Error> {
151 let raw = event_id.as_felt().as_canonical_u64();
152
153 match raw {
154 ACCOUNT_BEFORE_FOREIGN_LOAD_ID => Ok(TransactionEventId::AccountBeforeForeignLoad),
155
156 ACCOUNT_VAULT_BEFORE_ADD_ASSET_ID => Ok(TransactionEventId::AccountVaultBeforeAddAsset),
157 ACCOUNT_VAULT_AFTER_ADD_ASSET_ID => Ok(TransactionEventId::AccountVaultAfterAddAsset),
158
159 ACCOUNT_VAULT_BEFORE_REMOVE_ASSET_ID => {
160 Ok(TransactionEventId::AccountVaultBeforeRemoveAsset)
161 },
162 ACCOUNT_VAULT_AFTER_REMOVE_ASSET_ID => {
163 Ok(TransactionEventId::AccountVaultAfterRemoveAsset)
164 },
165
166 ACCOUNT_VAULT_BEFORE_GET_ASSET_ID => Ok(TransactionEventId::AccountVaultBeforeGetAsset),
167
168 ACCOUNT_STORAGE_BEFORE_SET_ITEM_ID => {
169 Ok(TransactionEventId::AccountStorageBeforeSetItem)
170 },
171 ACCOUNT_STORAGE_AFTER_SET_ITEM_ID => Ok(TransactionEventId::AccountStorageAfterSetItem),
172
173 ACCOUNT_STORAGE_BEFORE_GET_MAP_ITEM_ID => {
174 Ok(TransactionEventId::AccountStorageBeforeGetMapItem)
175 },
176
177 ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM_ID => {
178 Ok(TransactionEventId::AccountStorageBeforeSetMapItem)
179 },
180 ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM_ID => {
181 Ok(TransactionEventId::AccountStorageAfterSetMapItem)
182 },
183
184 ACCOUNT_BEFORE_INCREMENT_NONCE_ID => {
185 Ok(TransactionEventId::AccountBeforeIncrementNonce)
186 },
187 ACCOUNT_AFTER_INCREMENT_NONCE_ID => Ok(TransactionEventId::AccountAfterIncrementNonce),
188
189 ACCOUNT_PUSH_PROCEDURE_INDEX_ID => Ok(TransactionEventId::AccountPushProcedureIndex),
190
191 NOTE_BEFORE_CREATED_ID => Ok(TransactionEventId::NoteBeforeCreated),
192 NOTE_AFTER_CREATED_ID => Ok(TransactionEventId::NoteAfterCreated),
193
194 NOTE_BEFORE_ADD_ASSET_ID => Ok(TransactionEventId::NoteBeforeAddAsset),
195 NOTE_AFTER_ADD_ASSET_ID => Ok(TransactionEventId::NoteAfterAddAsset),
196
197 NOTE_BEFORE_SET_ATTACHMENT_ID => Ok(TransactionEventId::NoteBeforeSetAttachment),
198
199 AUTH_REQUEST_ID => Ok(TransactionEventId::AuthRequest),
200
201 PROLOGUE_START_ID => Ok(TransactionEventId::PrologueStart),
202 PROLOGUE_END_ID => Ok(TransactionEventId::PrologueEnd),
203
204 NOTES_PROCESSING_START_ID => Ok(TransactionEventId::NotesProcessingStart),
205 NOTES_PROCESSING_END_ID => Ok(TransactionEventId::NotesProcessingEnd),
206
207 NOTE_EXECUTION_START_ID => Ok(TransactionEventId::NoteExecutionStart),
208 NOTE_EXECUTION_END_ID => Ok(TransactionEventId::NoteExecutionEnd),
209
210 TX_SCRIPT_PROCESSING_START_ID => Ok(TransactionEventId::TxScriptProcessingStart),
211 TX_SCRIPT_PROCESSING_END_ID => Ok(TransactionEventId::TxScriptProcessingEnd),
212
213 EPILOGUE_START_ID => Ok(TransactionEventId::EpilogueStart),
214 EPILOGUE_AUTH_PROC_START_ID => Ok(TransactionEventId::EpilogueAuthProcStart),
215 EPILOGUE_AUTH_PROC_END_ID => Ok(TransactionEventId::EpilogueAuthProcEnd),
216 EPILOGUE_AFTER_TX_CYCLES_OBTAINED_ID => {
217 Ok(TransactionEventId::EpilogueAfterTxCyclesObtained)
218 },
219 EPILOGUE_BEFORE_TX_FEE_REMOVED_FROM_ACCOUNT_ID => {
220 Ok(TransactionEventId::EpilogueBeforeTxFeeRemovedFromAccount)
221 },
222 EPILOGUE_END_ID => Ok(TransactionEventId::EpilogueEnd),
223
224 LINK_MAP_SET_ID => Ok(TransactionEventId::LinkMapSet),
225 LINK_MAP_GET_ID => Ok(TransactionEventId::LinkMapGet),
226
227 AUTH_UNAUTHORIZED_ID => Ok(TransactionEventId::Unauthorized),
228
229 _ => Err(TransactionEventError::InvalidTransactionEvent(event_id)),
230 }
231 }
232}