miden_protocol/transaction/kernel/
tx_event_id.rs1use core::fmt;
2
3use crate::errors::TransactionEventError;
4use crate::vm::EventId;
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,
23
24 AccountVaultBeforeAddAsset = ACCOUNT_VAULT_BEFORE_ADD_ASSET,
25 AccountVaultAfterAddAsset = ACCOUNT_VAULT_AFTER_ADD_ASSET,
26
27 AccountVaultBeforeRemoveAsset = ACCOUNT_VAULT_BEFORE_REMOVE_ASSET,
28 AccountVaultAfterRemoveAsset = ACCOUNT_VAULT_AFTER_REMOVE_ASSET,
29
30 AccountVaultBeforeGetAsset = ACCOUNT_VAULT_BEFORE_GET_ASSET,
31
32 AccountStorageBeforeSetItem = ACCOUNT_STORAGE_BEFORE_SET_ITEM,
33 AccountStorageAfterSetItem = ACCOUNT_STORAGE_AFTER_SET_ITEM,
34
35 AccountStorageBeforeGetMapItem = ACCOUNT_STORAGE_BEFORE_GET_MAP_ITEM,
36
37 AccountStorageBeforeSetMapItem = ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM,
38 AccountStorageAfterSetMapItem = ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM,
39
40 AccountBeforeIncrementNonce = ACCOUNT_BEFORE_INCREMENT_NONCE,
41 AccountAfterIncrementNonce = ACCOUNT_AFTER_INCREMENT_NONCE,
42
43 AccountPushProcedureIndex = ACCOUNT_PUSH_PROCEDURE_INDEX,
44
45 NoteBeforeCreated = NOTE_BEFORE_CREATED,
46 NoteAfterCreated = NOTE_AFTER_CREATED,
47
48 NoteBeforeAddAsset = NOTE_BEFORE_ADD_ASSET,
49 NoteAfterAddAsset = NOTE_AFTER_ADD_ASSET,
50
51 NoteBeforeSetAttachment = NOTE_BEFORE_SET_ATTACHMENT,
52
53 AuthRequest = AUTH_REQUEST,
54
55 PrologueStart = PROLOGUE_START,
56 PrologueEnd = PROLOGUE_END,
57
58 NotesProcessingStart = NOTES_PROCESSING_START,
59 NotesProcessingEnd = NOTES_PROCESSING_END,
60
61 NoteExecutionStart = NOTE_EXECUTION_START,
62 NoteExecutionEnd = NOTE_EXECUTION_END,
63
64 TxScriptProcessingStart = TX_SCRIPT_PROCESSING_START,
65 TxScriptProcessingEnd = TX_SCRIPT_PROCESSING_END,
66
67 EpilogueStart = EPILOGUE_START,
68 EpilogueEnd = EPILOGUE_END,
69
70 EpilogueAuthProcStart = EPILOGUE_AUTH_PROC_START,
71 EpilogueAuthProcEnd = EPILOGUE_AUTH_PROC_END,
72
73 EpilogueAfterTxCyclesObtained = EPILOGUE_AFTER_TX_CYCLES_OBTAINED,
74 EpilogueBeforeTxFeeRemovedFromAccount = EPILOGUE_BEFORE_TX_FEE_REMOVED_FROM_ACCOUNT,
75
76 LinkMapSet = LINK_MAP_SET,
77 LinkMapGet = LINK_MAP_GET,
78
79 Unauthorized = AUTH_UNAUTHORIZED,
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
96impl fmt::Display for TransactionEventId {
97 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
98 write!(f, "{self:?}")
99 }
100}
101
102impl TryFrom<EventId> for TransactionEventId {
103 type Error = TransactionEventError;
104
105 fn try_from(event_id: EventId) -> Result<Self, Self::Error> {
106 let raw = event_id.as_felt().as_canonical_u64();
107
108 let name = EVENT_NAME_LUT.get(&raw).copied();
109
110 match raw {
111 ACCOUNT_BEFORE_FOREIGN_LOAD => Ok(TransactionEventId::AccountBeforeForeignLoad),
112
113 ACCOUNT_VAULT_BEFORE_ADD_ASSET => Ok(TransactionEventId::AccountVaultBeforeAddAsset),
114 ACCOUNT_VAULT_AFTER_ADD_ASSET => Ok(TransactionEventId::AccountVaultAfterAddAsset),
115
116 ACCOUNT_VAULT_BEFORE_REMOVE_ASSET => {
117 Ok(TransactionEventId::AccountVaultBeforeRemoveAsset)
118 },
119 ACCOUNT_VAULT_AFTER_REMOVE_ASSET => {
120 Ok(TransactionEventId::AccountVaultAfterRemoveAsset)
121 },
122
123 ACCOUNT_VAULT_BEFORE_GET_ASSET => Ok(TransactionEventId::AccountVaultBeforeGetAsset),
124
125 ACCOUNT_STORAGE_BEFORE_SET_ITEM => Ok(TransactionEventId::AccountStorageBeforeSetItem),
126 ACCOUNT_STORAGE_AFTER_SET_ITEM => Ok(TransactionEventId::AccountStorageAfterSetItem),
127
128 ACCOUNT_STORAGE_BEFORE_GET_MAP_ITEM => {
129 Ok(TransactionEventId::AccountStorageBeforeGetMapItem)
130 },
131
132 ACCOUNT_STORAGE_BEFORE_SET_MAP_ITEM => {
133 Ok(TransactionEventId::AccountStorageBeforeSetMapItem)
134 },
135 ACCOUNT_STORAGE_AFTER_SET_MAP_ITEM => {
136 Ok(TransactionEventId::AccountStorageAfterSetMapItem)
137 },
138
139 ACCOUNT_BEFORE_INCREMENT_NONCE => Ok(TransactionEventId::AccountBeforeIncrementNonce),
140 ACCOUNT_AFTER_INCREMENT_NONCE => Ok(TransactionEventId::AccountAfterIncrementNonce),
141
142 ACCOUNT_PUSH_PROCEDURE_INDEX => Ok(TransactionEventId::AccountPushProcedureIndex),
143
144 NOTE_BEFORE_CREATED => Ok(TransactionEventId::NoteBeforeCreated),
145 NOTE_AFTER_CREATED => Ok(TransactionEventId::NoteAfterCreated),
146
147 NOTE_BEFORE_ADD_ASSET => Ok(TransactionEventId::NoteBeforeAddAsset),
148 NOTE_AFTER_ADD_ASSET => Ok(TransactionEventId::NoteAfterAddAsset),
149
150 NOTE_BEFORE_SET_ATTACHMENT => Ok(TransactionEventId::NoteBeforeSetAttachment),
151
152 AUTH_REQUEST => Ok(TransactionEventId::AuthRequest),
153
154 PROLOGUE_START => Ok(TransactionEventId::PrologueStart),
155 PROLOGUE_END => Ok(TransactionEventId::PrologueEnd),
156
157 NOTES_PROCESSING_START => Ok(TransactionEventId::NotesProcessingStart),
158 NOTES_PROCESSING_END => Ok(TransactionEventId::NotesProcessingEnd),
159
160 NOTE_EXECUTION_START => Ok(TransactionEventId::NoteExecutionStart),
161 NOTE_EXECUTION_END => Ok(TransactionEventId::NoteExecutionEnd),
162
163 TX_SCRIPT_PROCESSING_START => Ok(TransactionEventId::TxScriptProcessingStart),
164 TX_SCRIPT_PROCESSING_END => Ok(TransactionEventId::TxScriptProcessingEnd),
165
166 EPILOGUE_START => Ok(TransactionEventId::EpilogueStart),
167 EPILOGUE_AUTH_PROC_START => Ok(TransactionEventId::EpilogueAuthProcStart),
168 EPILOGUE_AUTH_PROC_END => Ok(TransactionEventId::EpilogueAuthProcEnd),
169 EPILOGUE_AFTER_TX_CYCLES_OBTAINED => {
170 Ok(TransactionEventId::EpilogueAfterTxCyclesObtained)
171 },
172 EPILOGUE_BEFORE_TX_FEE_REMOVED_FROM_ACCOUNT => {
173 Ok(TransactionEventId::EpilogueBeforeTxFeeRemovedFromAccount)
174 },
175 EPILOGUE_END => Ok(TransactionEventId::EpilogueEnd),
176
177 LINK_MAP_SET => Ok(TransactionEventId::LinkMapSet),
178 LINK_MAP_GET => Ok(TransactionEventId::LinkMapGet),
179
180 AUTH_UNAUTHORIZED => Ok(TransactionEventId::Unauthorized),
181
182 _ => Err(TransactionEventError::InvalidTransactionEvent(event_id, name)),
183 }
184 }
185}