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