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