leo_ast/functions/
core_function.rs

1// Copyright (C) 2019-2025 Provable Inc.
2// This file is part of the Leo library.
3
4// The Leo library is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8
9// The Leo library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License
15// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
16
17use leo_span::{Symbol, sym};
18
19/// A core instruction that maps directly to an AVM bytecode instruction.
20#[derive(Clone, Debug, PartialEq, Eq)]
21pub enum CoreFunction {
22    BHP256CommitToAddress,
23    BHP256CommitToField,
24    BHP256CommitToGroup,
25    BHP256HashToAddress,
26    BHP256HashToField,
27    BHP256HashToGroup,
28    BHP256HashToI8,
29    BHP256HashToI16,
30    BHP256HashToI32,
31    BHP256HashToI64,
32    BHP256HashToI128,
33    BHP256HashToU8,
34    BHP256HashToU16,
35    BHP256HashToU32,
36    BHP256HashToU64,
37    BHP256HashToU128,
38    BHP256HashToScalar,
39
40    BHP512CommitToAddress,
41    BHP512CommitToField,
42    BHP512CommitToGroup,
43    BHP512HashToAddress,
44    BHP512HashToField,
45    BHP512HashToGroup,
46    BHP512HashToI8,
47    BHP512HashToI16,
48    BHP512HashToI32,
49    BHP512HashToI64,
50    BHP512HashToI128,
51    BHP512HashToU8,
52    BHP512HashToU16,
53    BHP512HashToU32,
54    BHP512HashToU64,
55    BHP512HashToU128,
56    BHP512HashToScalar,
57
58    BHP768CommitToAddress,
59    BHP768CommitToField,
60    BHP768CommitToGroup,
61    BHP768HashToAddress,
62    BHP768HashToField,
63    BHP768HashToGroup,
64    BHP768HashToI8,
65    BHP768HashToI16,
66    BHP768HashToI32,
67    BHP768HashToI64,
68    BHP768HashToI128,
69    BHP768HashToU8,
70    BHP768HashToU16,
71    BHP768HashToU32,
72    BHP768HashToU64,
73    BHP768HashToU128,
74    BHP768HashToScalar,
75
76    BHP1024CommitToAddress,
77    BHP1024CommitToField,
78    BHP1024CommitToGroup,
79    BHP1024HashToAddress,
80    BHP1024HashToField,
81    BHP1024HashToGroup,
82    BHP1024HashToI8,
83    BHP1024HashToI16,
84    BHP1024HashToI32,
85    BHP1024HashToI64,
86    BHP1024HashToI128,
87    BHP1024HashToU8,
88    BHP1024HashToU16,
89    BHP1024HashToU32,
90    BHP1024HashToU64,
91    BHP1024HashToU128,
92    BHP1024HashToScalar,
93
94    ChaChaRandAddress,
95    ChaChaRandBool,
96    ChaChaRandField,
97    ChaChaRandGroup,
98    ChaChaRandI8,
99    ChaChaRandI16,
100    ChaChaRandI32,
101    ChaChaRandI64,
102    ChaChaRandI128,
103    ChaChaRandU8,
104    ChaChaRandU16,
105    ChaChaRandU32,
106    ChaChaRandU64,
107    ChaChaRandU128,
108    ChaChaRandScalar,
109
110    Keccak256HashToAddress,
111    Keccak256HashToField,
112    Keccak256HashToGroup,
113    Keccak256HashToI8,
114    Keccak256HashToI16,
115    Keccak256HashToI32,
116    Keccak256HashToI64,
117    Keccak256HashToI128,
118    Keccak256HashToU8,
119    Keccak256HashToU16,
120    Keccak256HashToU32,
121    Keccak256HashToU64,
122    Keccak256HashToU128,
123    Keccak256HashToScalar,
124
125    Keccak384HashToAddress,
126    Keccak384HashToField,
127    Keccak384HashToGroup,
128    Keccak384HashToI8,
129    Keccak384HashToI16,
130    Keccak384HashToI32,
131    Keccak384HashToI64,
132    Keccak384HashToI128,
133    Keccak384HashToU8,
134    Keccak384HashToU16,
135    Keccak384HashToU32,
136    Keccak384HashToU64,
137    Keccak384HashToU128,
138    Keccak384HashToScalar,
139
140    Keccak512HashToAddress,
141    Keccak512HashToField,
142    Keccak512HashToGroup,
143    Keccak512HashToI8,
144    Keccak512HashToI16,
145    Keccak512HashToI32,
146    Keccak512HashToI64,
147    Keccak512HashToI128,
148    Keccak512HashToU8,
149    Keccak512HashToU16,
150    Keccak512HashToU32,
151    Keccak512HashToU64,
152    Keccak512HashToU128,
153    Keccak512HashToScalar,
154
155    Pedersen64CommitToAddress,
156    Pedersen64CommitToField,
157    Pedersen64CommitToGroup,
158    Pedersen64HashToAddress,
159    Pedersen64HashToField,
160    Pedersen64HashToGroup,
161    Pedersen64HashToI8,
162    Pedersen64HashToI16,
163    Pedersen64HashToI32,
164    Pedersen64HashToI64,
165    Pedersen64HashToI128,
166    Pedersen64HashToU8,
167    Pedersen64HashToU16,
168    Pedersen64HashToU32,
169    Pedersen64HashToU64,
170    Pedersen64HashToU128,
171    Pedersen64HashToScalar,
172
173    Pedersen128CommitToAddress,
174    Pedersen128CommitToField,
175    Pedersen128CommitToGroup,
176    Pedersen128HashToAddress,
177    Pedersen128HashToField,
178    Pedersen128HashToGroup,
179    Pedersen128HashToI8,
180    Pedersen128HashToI16,
181    Pedersen128HashToI32,
182    Pedersen128HashToI64,
183    Pedersen128HashToI128,
184    Pedersen128HashToU8,
185    Pedersen128HashToU16,
186    Pedersen128HashToU32,
187    Pedersen128HashToU64,
188    Pedersen128HashToU128,
189    Pedersen128HashToScalar,
190
191    Poseidon2HashToAddress,
192    Poseidon2HashToField,
193    Poseidon2HashToGroup,
194    Poseidon2HashToI8,
195    Poseidon2HashToI16,
196    Poseidon2HashToI32,
197    Poseidon2HashToI64,
198    Poseidon2HashToI128,
199    Poseidon2HashToU8,
200    Poseidon2HashToU16,
201    Poseidon2HashToU32,
202    Poseidon2HashToU64,
203    Poseidon2HashToU128,
204    Poseidon2HashToScalar,
205
206    Poseidon4HashToAddress,
207    Poseidon4HashToField,
208    Poseidon4HashToGroup,
209    Poseidon4HashToI8,
210    Poseidon4HashToI16,
211    Poseidon4HashToI32,
212    Poseidon4HashToI64,
213    Poseidon4HashToI128,
214    Poseidon4HashToU8,
215    Poseidon4HashToU16,
216    Poseidon4HashToU32,
217    Poseidon4HashToU64,
218    Poseidon4HashToU128,
219    Poseidon4HashToScalar,
220
221    Poseidon8HashToAddress,
222    Poseidon8HashToField,
223    Poseidon8HashToGroup,
224    Poseidon8HashToI8,
225    Poseidon8HashToI16,
226    Poseidon8HashToI32,
227    Poseidon8HashToI64,
228    Poseidon8HashToI128,
229    Poseidon8HashToU8,
230    Poseidon8HashToU16,
231    Poseidon8HashToU32,
232    Poseidon8HashToU64,
233    Poseidon8HashToU128,
234    Poseidon8HashToScalar,
235
236    SHA3_256HashToAddress,
237    SHA3_256HashToField,
238    SHA3_256HashToGroup,
239    SHA3_256HashToI8,
240    SHA3_256HashToI16,
241    SHA3_256HashToI32,
242    SHA3_256HashToI64,
243    SHA3_256HashToI128,
244    SHA3_256HashToU8,
245    SHA3_256HashToU16,
246    SHA3_256HashToU32,
247    SHA3_256HashToU64,
248    SHA3_256HashToU128,
249    SHA3_256HashToScalar,
250
251    SHA3_384HashToAddress,
252    SHA3_384HashToField,
253    SHA3_384HashToGroup,
254    SHA3_384HashToI8,
255    SHA3_384HashToI16,
256    SHA3_384HashToI32,
257    SHA3_384HashToI64,
258    SHA3_384HashToI128,
259    SHA3_384HashToU8,
260    SHA3_384HashToU16,
261    SHA3_384HashToU32,
262    SHA3_384HashToU64,
263    SHA3_384HashToU128,
264    SHA3_384HashToScalar,
265
266    SHA3_512HashToAddress,
267    SHA3_512HashToField,
268    SHA3_512HashToGroup,
269    SHA3_512HashToI8,
270    SHA3_512HashToI16,
271    SHA3_512HashToI32,
272    SHA3_512HashToI64,
273    SHA3_512HashToI128,
274    SHA3_512HashToU8,
275    SHA3_512HashToU16,
276    SHA3_512HashToU32,
277    SHA3_512HashToU64,
278    SHA3_512HashToU128,
279    SHA3_512HashToScalar,
280
281    MappingGet,
282    MappingGetOrUse,
283    MappingSet,
284    MappingRemove,
285    MappingContains,
286
287    OptionalUnwrap,
288    OptionalUnwrapOr,
289
290    GroupToXCoordinate,
291    GroupToYCoordinate,
292
293    SignatureVerify,
294    FutureAwait,
295
296    ProgramChecksum,
297    ProgramEdition,
298    ProgramOwner,
299
300    CheatCodePrintMapping,
301    CheatCodeSetBlockHeight,
302}
303
304impl CoreFunction {
305    /// Returns a `CoreFunction` from the given module and method symbols.
306    pub fn from_symbols(module: Symbol, function: Symbol) -> Option<Self> {
307        Some(match (module, function) {
308            (sym::BHP256, sym::commit_to_address) => Self::BHP256CommitToAddress,
309            (sym::BHP256, sym::commit_to_field) => Self::BHP256CommitToField,
310            (sym::BHP256, sym::commit_to_group) => Self::BHP256CommitToGroup,
311
312            (sym::BHP256, sym::hash_to_address) => Self::BHP256HashToAddress,
313            (sym::BHP256, sym::hash_to_field) => Self::BHP256HashToField,
314            (sym::BHP256, sym::hash_to_group) => Self::BHP256HashToGroup,
315            (sym::BHP256, sym::hash_to_i8) => Self::BHP256HashToI8,
316            (sym::BHP256, sym::hash_to_i16) => Self::BHP256HashToI16,
317            (sym::BHP256, sym::hash_to_i32) => Self::BHP256HashToI32,
318            (sym::BHP256, sym::hash_to_i64) => Self::BHP256HashToI64,
319            (sym::BHP256, sym::hash_to_i128) => Self::BHP256HashToI128,
320            (sym::BHP256, sym::hash_to_u8) => Self::BHP256HashToU8,
321            (sym::BHP256, sym::hash_to_u16) => Self::BHP256HashToU16,
322            (sym::BHP256, sym::hash_to_u32) => Self::BHP256HashToU32,
323            (sym::BHP256, sym::hash_to_u64) => Self::BHP256HashToU64,
324            (sym::BHP256, sym::hash_to_u128) => Self::BHP256HashToU128,
325            (sym::BHP256, sym::hash_to_scalar) => Self::BHP256HashToScalar,
326
327            (sym::BHP512, sym::commit_to_address) => Self::BHP512CommitToAddress,
328            (sym::BHP512, sym::commit_to_field) => Self::BHP512CommitToField,
329            (sym::BHP512, sym::commit_to_group) => Self::BHP512CommitToGroup,
330            (sym::BHP512, sym::hash_to_address) => Self::BHP512HashToAddress,
331            (sym::BHP512, sym::hash_to_field) => Self::BHP512HashToField,
332            (sym::BHP512, sym::hash_to_group) => Self::BHP512HashToGroup,
333            (sym::BHP512, sym::hash_to_i8) => Self::BHP512HashToI8,
334            (sym::BHP512, sym::hash_to_i16) => Self::BHP512HashToI16,
335            (sym::BHP512, sym::hash_to_i32) => Self::BHP512HashToI32,
336            (sym::BHP512, sym::hash_to_i64) => Self::BHP512HashToI64,
337            (sym::BHP512, sym::hash_to_i128) => Self::BHP512HashToI128,
338            (sym::BHP512, sym::hash_to_u8) => Self::BHP512HashToU8,
339            (sym::BHP512, sym::hash_to_u16) => Self::BHP512HashToU16,
340            (sym::BHP512, sym::hash_to_u32) => Self::BHP512HashToU32,
341            (sym::BHP512, sym::hash_to_u64) => Self::BHP512HashToU64,
342            (sym::BHP512, sym::hash_to_u128) => Self::BHP512HashToU128,
343            (sym::BHP512, sym::hash_to_scalar) => Self::BHP512HashToScalar,
344
345            (sym::BHP768, sym::commit_to_address) => Self::BHP768CommitToAddress,
346            (sym::BHP768, sym::commit_to_field) => Self::BHP768CommitToField,
347            (sym::BHP768, sym::commit_to_group) => Self::BHP768CommitToGroup,
348            (sym::BHP768, sym::hash_to_address) => Self::BHP768HashToAddress,
349            (sym::BHP768, sym::hash_to_field) => Self::BHP768HashToField,
350            (sym::BHP768, sym::hash_to_group) => Self::BHP768HashToGroup,
351            (sym::BHP768, sym::hash_to_i8) => Self::BHP768HashToI8,
352            (sym::BHP768, sym::hash_to_i16) => Self::BHP768HashToI16,
353            (sym::BHP768, sym::hash_to_i32) => Self::BHP768HashToI32,
354            (sym::BHP768, sym::hash_to_i64) => Self::BHP768HashToI64,
355            (sym::BHP768, sym::hash_to_i128) => Self::BHP768HashToI128,
356            (sym::BHP768, sym::hash_to_u8) => Self::BHP768HashToU8,
357            (sym::BHP768, sym::hash_to_u16) => Self::BHP768HashToU16,
358            (sym::BHP768, sym::hash_to_u32) => Self::BHP768HashToU32,
359            (sym::BHP768, sym::hash_to_u64) => Self::BHP768HashToU64,
360            (sym::BHP768, sym::hash_to_u128) => Self::BHP768HashToU128,
361            (sym::BHP768, sym::hash_to_scalar) => Self::BHP768HashToScalar,
362
363            (sym::BHP1024, sym::commit_to_address) => Self::BHP1024CommitToAddress,
364            (sym::BHP1024, sym::commit_to_field) => Self::BHP1024CommitToField,
365            (sym::BHP1024, sym::commit_to_group) => Self::BHP1024CommitToGroup,
366            (sym::BHP1024, sym::hash_to_address) => Self::BHP1024HashToAddress,
367            (sym::BHP1024, sym::hash_to_field) => Self::BHP1024HashToField,
368            (sym::BHP1024, sym::hash_to_group) => Self::BHP1024HashToGroup,
369            (sym::BHP1024, sym::hash_to_i8) => Self::BHP1024HashToI8,
370            (sym::BHP1024, sym::hash_to_i16) => Self::BHP1024HashToI16,
371            (sym::BHP1024, sym::hash_to_i32) => Self::BHP1024HashToI32,
372            (sym::BHP1024, sym::hash_to_i64) => Self::BHP1024HashToI64,
373            (sym::BHP1024, sym::hash_to_i128) => Self::BHP1024HashToI128,
374            (sym::BHP1024, sym::hash_to_u8) => Self::BHP1024HashToU8,
375            (sym::BHP1024, sym::hash_to_u16) => Self::BHP1024HashToU16,
376            (sym::BHP1024, sym::hash_to_u32) => Self::BHP1024HashToU32,
377            (sym::BHP1024, sym::hash_to_u64) => Self::BHP1024HashToU64,
378            (sym::BHP1024, sym::hash_to_u128) => Self::BHP1024HashToU128,
379            (sym::BHP1024, sym::hash_to_scalar) => Self::BHP1024HashToScalar,
380
381            (sym::ChaCha, sym::rand_address) => Self::ChaChaRandAddress,
382            (sym::ChaCha, sym::rand_bool) => Self::ChaChaRandBool,
383            (sym::ChaCha, sym::rand_field) => Self::ChaChaRandField,
384            (sym::ChaCha, sym::rand_group) => Self::ChaChaRandGroup,
385            (sym::ChaCha, sym::rand_i8) => Self::ChaChaRandI8,
386            (sym::ChaCha, sym::rand_i16) => Self::ChaChaRandI16,
387            (sym::ChaCha, sym::rand_i32) => Self::ChaChaRandI32,
388            (sym::ChaCha, sym::rand_i64) => Self::ChaChaRandI64,
389            (sym::ChaCha, sym::rand_i128) => Self::ChaChaRandI128,
390            (sym::ChaCha, sym::rand_scalar) => Self::ChaChaRandScalar,
391            (sym::ChaCha, sym::rand_u8) => Self::ChaChaRandU8,
392            (sym::ChaCha, sym::rand_u16) => Self::ChaChaRandU16,
393            (sym::ChaCha, sym::rand_u32) => Self::ChaChaRandU32,
394            (sym::ChaCha, sym::rand_u64) => Self::ChaChaRandU64,
395            (sym::ChaCha, sym::rand_u128) => Self::ChaChaRandU128,
396
397            (sym::Keccak256, sym::hash_to_address) => Self::Keccak256HashToAddress,
398            (sym::Keccak256, sym::hash_to_field) => Self::Keccak256HashToField,
399            (sym::Keccak256, sym::hash_to_group) => Self::Keccak256HashToGroup,
400            (sym::Keccak256, sym::hash_to_i8) => Self::Keccak256HashToI8,
401            (sym::Keccak256, sym::hash_to_i16) => Self::Keccak256HashToI16,
402            (sym::Keccak256, sym::hash_to_i32) => Self::Keccak256HashToI32,
403            (sym::Keccak256, sym::hash_to_i64) => Self::Keccak256HashToI64,
404            (sym::Keccak256, sym::hash_to_i128) => Self::Keccak256HashToI128,
405            (sym::Keccak256, sym::hash_to_u8) => Self::Keccak256HashToU8,
406            (sym::Keccak256, sym::hash_to_u16) => Self::Keccak256HashToU16,
407            (sym::Keccak256, sym::hash_to_u32) => Self::Keccak256HashToU32,
408            (sym::Keccak256, sym::hash_to_u64) => Self::Keccak256HashToU64,
409            (sym::Keccak256, sym::hash_to_u128) => Self::Keccak256HashToU128,
410            (sym::Keccak256, sym::hash_to_scalar) => Self::Keccak256HashToScalar,
411
412            (sym::Keccak384, sym::hash_to_address) => Self::Keccak384HashToAddress,
413            (sym::Keccak384, sym::hash_to_field) => Self::Keccak384HashToField,
414            (sym::Keccak384, sym::hash_to_group) => Self::Keccak384HashToGroup,
415            (sym::Keccak384, sym::hash_to_i8) => Self::Keccak384HashToI8,
416            (sym::Keccak384, sym::hash_to_i16) => Self::Keccak384HashToI16,
417            (sym::Keccak384, sym::hash_to_i32) => Self::Keccak384HashToI32,
418            (sym::Keccak384, sym::hash_to_i64) => Self::Keccak384HashToI64,
419            (sym::Keccak384, sym::hash_to_i128) => Self::Keccak384HashToI128,
420            (sym::Keccak384, sym::hash_to_u8) => Self::Keccak384HashToU8,
421            (sym::Keccak384, sym::hash_to_u16) => Self::Keccak384HashToU16,
422            (sym::Keccak384, sym::hash_to_u32) => Self::Keccak384HashToU32,
423            (sym::Keccak384, sym::hash_to_u64) => Self::Keccak384HashToU64,
424            (sym::Keccak384, sym::hash_to_u128) => Self::Keccak384HashToU128,
425            (sym::Keccak384, sym::hash_to_scalar) => Self::Keccak384HashToScalar,
426
427            (sym::Keccak512, sym::hash_to_address) => Self::Keccak512HashToAddress,
428            (sym::Keccak512, sym::hash_to_field) => Self::Keccak512HashToField,
429            (sym::Keccak512, sym::hash_to_group) => Self::Keccak512HashToGroup,
430            (sym::Keccak512, sym::hash_to_i8) => Self::Keccak512HashToI8,
431            (sym::Keccak512, sym::hash_to_i16) => Self::Keccak512HashToI16,
432            (sym::Keccak512, sym::hash_to_i32) => Self::Keccak512HashToI32,
433            (sym::Keccak512, sym::hash_to_i64) => Self::Keccak512HashToI64,
434            (sym::Keccak512, sym::hash_to_i128) => Self::Keccak512HashToI128,
435            (sym::Keccak512, sym::hash_to_u8) => Self::Keccak512HashToU8,
436            (sym::Keccak512, sym::hash_to_u16) => Self::Keccak512HashToU16,
437            (sym::Keccak512, sym::hash_to_u32) => Self::Keccak512HashToU32,
438            (sym::Keccak512, sym::hash_to_u64) => Self::Keccak512HashToU64,
439            (sym::Keccak512, sym::hash_to_u128) => Self::Keccak512HashToU128,
440            (sym::Keccak512, sym::hash_to_scalar) => Self::Keccak512HashToScalar,
441
442            (sym::Pedersen64, sym::commit_to_address) => Self::Pedersen64CommitToAddress,
443            (sym::Pedersen64, sym::commit_to_field) => Self::Pedersen64CommitToField,
444            (sym::Pedersen64, sym::commit_to_group) => Self::Pedersen64CommitToGroup,
445            (sym::Pedersen64, sym::hash_to_address) => Self::Pedersen64HashToAddress,
446            (sym::Pedersen64, sym::hash_to_field) => Self::Pedersen64HashToField,
447            (sym::Pedersen64, sym::hash_to_group) => Self::Pedersen64HashToGroup,
448            (sym::Pedersen64, sym::hash_to_i8) => Self::Pedersen64HashToI8,
449            (sym::Pedersen64, sym::hash_to_i16) => Self::Pedersen64HashToI16,
450            (sym::Pedersen64, sym::hash_to_i32) => Self::Pedersen64HashToI32,
451            (sym::Pedersen64, sym::hash_to_i64) => Self::Pedersen64HashToI64,
452            (sym::Pedersen64, sym::hash_to_i128) => Self::Pedersen64HashToI128,
453            (sym::Pedersen64, sym::hash_to_u8) => Self::Pedersen64HashToU8,
454            (sym::Pedersen64, sym::hash_to_u16) => Self::Pedersen64HashToU16,
455            (sym::Pedersen64, sym::hash_to_u32) => Self::Pedersen64HashToU32,
456            (sym::Pedersen64, sym::hash_to_u64) => Self::Pedersen64HashToU64,
457            (sym::Pedersen64, sym::hash_to_u128) => Self::Pedersen64HashToU128,
458            (sym::Pedersen64, sym::hash_to_scalar) => Self::Pedersen64HashToScalar,
459
460            (sym::Pedersen128, sym::commit_to_address) => Self::Pedersen128CommitToAddress,
461            (sym::Pedersen128, sym::commit_to_field) => Self::Pedersen128CommitToField,
462            (sym::Pedersen128, sym::commit_to_group) => Self::Pedersen128CommitToGroup,
463            (sym::Pedersen128, sym::hash_to_address) => Self::Pedersen128HashToAddress,
464            (sym::Pedersen128, sym::hash_to_field) => Self::Pedersen128HashToField,
465            (sym::Pedersen128, sym::hash_to_group) => Self::Pedersen128HashToGroup,
466            (sym::Pedersen128, sym::hash_to_i8) => Self::Pedersen128HashToI8,
467            (sym::Pedersen128, sym::hash_to_i16) => Self::Pedersen128HashToI16,
468            (sym::Pedersen128, sym::hash_to_i32) => Self::Pedersen128HashToI32,
469            (sym::Pedersen128, sym::hash_to_i64) => Self::Pedersen128HashToI64,
470            (sym::Pedersen128, sym::hash_to_i128) => Self::Pedersen128HashToI128,
471            (sym::Pedersen128, sym::hash_to_u8) => Self::Pedersen128HashToU8,
472            (sym::Pedersen128, sym::hash_to_u16) => Self::Pedersen128HashToU16,
473            (sym::Pedersen128, sym::hash_to_u32) => Self::Pedersen128HashToU32,
474            (sym::Pedersen128, sym::hash_to_u64) => Self::Pedersen128HashToU64,
475            (sym::Pedersen128, sym::hash_to_u128) => Self::Pedersen128HashToU128,
476            (sym::Pedersen128, sym::hash_to_scalar) => Self::Pedersen128HashToScalar,
477
478            (sym::Poseidon2, sym::hash_to_address) => Self::Poseidon2HashToAddress,
479            (sym::Poseidon2, sym::hash_to_field) => Self::Poseidon2HashToField,
480            (sym::Poseidon2, sym::hash_to_group) => Self::Poseidon2HashToGroup,
481            (sym::Poseidon2, sym::hash_to_i8) => Self::Poseidon2HashToI8,
482            (sym::Poseidon2, sym::hash_to_i16) => Self::Poseidon2HashToI16,
483            (sym::Poseidon2, sym::hash_to_i32) => Self::Poseidon2HashToI32,
484            (sym::Poseidon2, sym::hash_to_i64) => Self::Poseidon2HashToI64,
485            (sym::Poseidon2, sym::hash_to_i128) => Self::Poseidon2HashToI128,
486            (sym::Poseidon2, sym::hash_to_u8) => Self::Poseidon2HashToU8,
487            (sym::Poseidon2, sym::hash_to_u16) => Self::Poseidon2HashToU16,
488            (sym::Poseidon2, sym::hash_to_u32) => Self::Poseidon2HashToU32,
489            (sym::Poseidon2, sym::hash_to_u64) => Self::Poseidon2HashToU64,
490            (sym::Poseidon2, sym::hash_to_u128) => Self::Poseidon2HashToU128,
491            (sym::Poseidon2, sym::hash_to_scalar) => Self::Poseidon2HashToScalar,
492
493            (sym::Poseidon4, sym::hash_to_address) => Self::Poseidon4HashToAddress,
494            (sym::Poseidon4, sym::hash_to_field) => Self::Poseidon4HashToField,
495            (sym::Poseidon4, sym::hash_to_group) => Self::Poseidon4HashToGroup,
496            (sym::Poseidon4, sym::hash_to_i8) => Self::Poseidon4HashToI8,
497            (sym::Poseidon4, sym::hash_to_i16) => Self::Poseidon4HashToI16,
498            (sym::Poseidon4, sym::hash_to_i32) => Self::Poseidon4HashToI32,
499            (sym::Poseidon4, sym::hash_to_i64) => Self::Poseidon4HashToI64,
500            (sym::Poseidon4, sym::hash_to_i128) => Self::Poseidon4HashToI128,
501            (sym::Poseidon4, sym::hash_to_u8) => Self::Poseidon4HashToU8,
502            (sym::Poseidon4, sym::hash_to_u16) => Self::Poseidon4HashToU16,
503            (sym::Poseidon4, sym::hash_to_u32) => Self::Poseidon4HashToU32,
504            (sym::Poseidon4, sym::hash_to_u64) => Self::Poseidon4HashToU64,
505            (sym::Poseidon4, sym::hash_to_u128) => Self::Poseidon4HashToU128,
506            (sym::Poseidon4, sym::hash_to_scalar) => Self::Poseidon4HashToScalar,
507
508            (sym::Poseidon8, sym::hash_to_address) => Self::Poseidon8HashToAddress,
509            (sym::Poseidon8, sym::hash_to_field) => Self::Poseidon8HashToField,
510            (sym::Poseidon8, sym::hash_to_group) => Self::Poseidon8HashToGroup,
511            (sym::Poseidon8, sym::hash_to_i8) => Self::Poseidon8HashToI8,
512            (sym::Poseidon8, sym::hash_to_i16) => Self::Poseidon8HashToI16,
513            (sym::Poseidon8, sym::hash_to_i32) => Self::Poseidon8HashToI32,
514            (sym::Poseidon8, sym::hash_to_i64) => Self::Poseidon8HashToI64,
515            (sym::Poseidon8, sym::hash_to_i128) => Self::Poseidon8HashToI128,
516            (sym::Poseidon8, sym::hash_to_u8) => Self::Poseidon8HashToU8,
517            (sym::Poseidon8, sym::hash_to_u16) => Self::Poseidon8HashToU16,
518            (sym::Poseidon8, sym::hash_to_u32) => Self::Poseidon8HashToU32,
519            (sym::Poseidon8, sym::hash_to_u64) => Self::Poseidon8HashToU64,
520            (sym::Poseidon8, sym::hash_to_u128) => Self::Poseidon8HashToU128,
521            (sym::Poseidon8, sym::hash_to_scalar) => Self::Poseidon8HashToScalar,
522
523            (sym::SHA3_256, sym::hash_to_address) => Self::SHA3_256HashToAddress,
524            (sym::SHA3_256, sym::hash_to_field) => Self::SHA3_256HashToField,
525            (sym::SHA3_256, sym::hash_to_group) => Self::SHA3_256HashToGroup,
526            (sym::SHA3_256, sym::hash_to_i8) => Self::SHA3_256HashToI8,
527            (sym::SHA3_256, sym::hash_to_i16) => Self::SHA3_256HashToI16,
528            (sym::SHA3_256, sym::hash_to_i32) => Self::SHA3_256HashToI32,
529            (sym::SHA3_256, sym::hash_to_i64) => Self::SHA3_256HashToI64,
530            (sym::SHA3_256, sym::hash_to_i128) => Self::SHA3_256HashToI128,
531            (sym::SHA3_256, sym::hash_to_u8) => Self::SHA3_256HashToU8,
532            (sym::SHA3_256, sym::hash_to_u16) => Self::SHA3_256HashToU16,
533            (sym::SHA3_256, sym::hash_to_u32) => Self::SHA3_256HashToU32,
534            (sym::SHA3_256, sym::hash_to_u64) => Self::SHA3_256HashToU64,
535            (sym::SHA3_256, sym::hash_to_u128) => Self::SHA3_256HashToU128,
536            (sym::SHA3_256, sym::hash_to_scalar) => Self::SHA3_256HashToScalar,
537
538            (sym::SHA3_384, sym::hash_to_address) => Self::SHA3_384HashToAddress,
539            (sym::SHA3_384, sym::hash_to_field) => Self::SHA3_384HashToField,
540            (sym::SHA3_384, sym::hash_to_group) => Self::SHA3_384HashToGroup,
541            (sym::SHA3_384, sym::hash_to_i8) => Self::SHA3_384HashToI8,
542            (sym::SHA3_384, sym::hash_to_i16) => Self::SHA3_384HashToI16,
543            (sym::SHA3_384, sym::hash_to_i32) => Self::SHA3_384HashToI32,
544            (sym::SHA3_384, sym::hash_to_i64) => Self::SHA3_384HashToI64,
545            (sym::SHA3_384, sym::hash_to_i128) => Self::SHA3_384HashToI128,
546            (sym::SHA3_384, sym::hash_to_u8) => Self::SHA3_384HashToU8,
547            (sym::SHA3_384, sym::hash_to_u16) => Self::SHA3_384HashToU16,
548            (sym::SHA3_384, sym::hash_to_u32) => Self::SHA3_384HashToU32,
549            (sym::SHA3_384, sym::hash_to_u64) => Self::SHA3_384HashToU64,
550            (sym::SHA3_384, sym::hash_to_u128) => Self::SHA3_384HashToU128,
551            (sym::SHA3_384, sym::hash_to_scalar) => Self::SHA3_384HashToScalar,
552
553            (sym::SHA3_512, sym::hash_to_address) => Self::SHA3_512HashToAddress,
554            (sym::SHA3_512, sym::hash_to_field) => Self::SHA3_512HashToField,
555            (sym::SHA3_512, sym::hash_to_group) => Self::SHA3_512HashToGroup,
556            (sym::SHA3_512, sym::hash_to_i8) => Self::SHA3_512HashToI8,
557            (sym::SHA3_512, sym::hash_to_i16) => Self::SHA3_512HashToI16,
558            (sym::SHA3_512, sym::hash_to_i32) => Self::SHA3_512HashToI32,
559            (sym::SHA3_512, sym::hash_to_i64) => Self::SHA3_512HashToI64,
560            (sym::SHA3_512, sym::hash_to_i128) => Self::SHA3_512HashToI128,
561            (sym::SHA3_512, sym::hash_to_u8) => Self::SHA3_512HashToU8,
562            (sym::SHA3_512, sym::hash_to_u16) => Self::SHA3_512HashToU16,
563            (sym::SHA3_512, sym::hash_to_u32) => Self::SHA3_512HashToU32,
564            (sym::SHA3_512, sym::hash_to_u64) => Self::SHA3_512HashToU64,
565            (sym::SHA3_512, sym::hash_to_u128) => Self::SHA3_512HashToU128,
566            (sym::SHA3_512, sym::hash_to_scalar) => Self::SHA3_512HashToScalar,
567
568            (sym::Mapping, sym::get) => Self::MappingGet,
569            (sym::Mapping, sym::get_or_use) => Self::MappingGetOrUse,
570            (sym::Mapping, sym::set) => Self::MappingSet,
571            (sym::Mapping, sym::remove) => Self::MappingRemove,
572            (sym::Mapping, sym::contains) => Self::MappingContains,
573
574            (sym::Optional, sym::unwrap) => Self::OptionalUnwrap,
575            (sym::Optional, sym::unwrap_or) => Self::OptionalUnwrapOr,
576
577            (sym::group, sym::to_x_coordinate) => Self::GroupToXCoordinate,
578            (sym::group, sym::to_y_coordinate) => Self::GroupToYCoordinate,
579
580            (sym::ProgramCore, sym::checksum) => Self::ProgramChecksum,
581            (sym::ProgramCore, sym::edition) => Self::ProgramEdition,
582            (sym::ProgramCore, sym::program_owner) => Self::ProgramOwner,
583
584            (sym::signature, sym::verify) => Self::SignatureVerify,
585            (sym::Future, sym::Await) => Self::FutureAwait,
586
587            (sym::CheatCode, sym::print_mapping) => Self::CheatCodePrintMapping,
588            (sym::CheatCode, sym::set_block_height) => Self::CheatCodeSetBlockHeight,
589            _ => return None,
590        })
591    }
592
593    /// Returns the number of arguments required by the instruction.
594    pub fn num_args(&self) -> usize {
595        match self {
596            Self::BHP256CommitToAddress => 2,
597            Self::BHP256CommitToField => 2,
598            Self::BHP256CommitToGroup => 2,
599
600            Self::BHP256HashToAddress => 1,
601            Self::BHP256HashToField => 1,
602            Self::BHP256HashToGroup => 1,
603            Self::BHP256HashToI8 => 1,
604            Self::BHP256HashToI16 => 1,
605            Self::BHP256HashToI32 => 1,
606            Self::BHP256HashToI64 => 1,
607            Self::BHP256HashToI128 => 1,
608            Self::BHP256HashToU8 => 1,
609            Self::BHP256HashToU16 => 1,
610            Self::BHP256HashToU32 => 1,
611            Self::BHP256HashToU64 => 1,
612            Self::BHP256HashToU128 => 1,
613            Self::BHP256HashToScalar => 1,
614
615            Self::BHP512CommitToAddress => 2,
616            Self::BHP512CommitToField => 2,
617            Self::BHP512CommitToGroup => 2,
618            Self::BHP512HashToAddress => 1,
619            Self::BHP512HashToField => 1,
620            Self::BHP512HashToGroup => 1,
621            Self::BHP512HashToI8 => 1,
622            Self::BHP512HashToI16 => 1,
623            Self::BHP512HashToI32 => 1,
624            Self::BHP512HashToI64 => 1,
625            Self::BHP512HashToI128 => 1,
626            Self::BHP512HashToU8 => 1,
627            Self::BHP512HashToU16 => 1,
628            Self::BHP512HashToU32 => 1,
629            Self::BHP512HashToU64 => 1,
630            Self::BHP512HashToU128 => 1,
631            Self::BHP512HashToScalar => 1,
632
633            Self::BHP768CommitToAddress => 2,
634            Self::BHP768CommitToField => 2,
635            Self::BHP768CommitToGroup => 2,
636            Self::BHP768HashToAddress => 1,
637            Self::BHP768HashToField => 1,
638            Self::BHP768HashToGroup => 1,
639            Self::BHP768HashToI8 => 1,
640            Self::BHP768HashToI16 => 1,
641            Self::BHP768HashToI32 => 1,
642            Self::BHP768HashToI64 => 1,
643            Self::BHP768HashToI128 => 1,
644            Self::BHP768HashToU8 => 1,
645            Self::BHP768HashToU16 => 1,
646            Self::BHP768HashToU32 => 1,
647            Self::BHP768HashToU64 => 1,
648            Self::BHP768HashToU128 => 1,
649            Self::BHP768HashToScalar => 1,
650
651            Self::BHP1024CommitToAddress => 2,
652            Self::BHP1024CommitToField => 2,
653            Self::BHP1024CommitToGroup => 2,
654            Self::BHP1024HashToAddress => 1,
655            Self::BHP1024HashToField => 1,
656            Self::BHP1024HashToGroup => 1,
657            Self::BHP1024HashToI8 => 1,
658            Self::BHP1024HashToI16 => 1,
659            Self::BHP1024HashToI32 => 1,
660            Self::BHP1024HashToI64 => 1,
661            Self::BHP1024HashToI128 => 1,
662            Self::BHP1024HashToU8 => 1,
663            Self::BHP1024HashToU16 => 1,
664            Self::BHP1024HashToU32 => 1,
665            Self::BHP1024HashToU64 => 1,
666            Self::BHP1024HashToU128 => 1,
667            Self::BHP1024HashToScalar => 1,
668
669            Self::ChaChaRandAddress => 0,
670            Self::ChaChaRandBool => 0,
671            Self::ChaChaRandField => 0,
672            Self::ChaChaRandGroup => 0,
673            Self::ChaChaRandI8 => 0,
674            Self::ChaChaRandI16 => 0,
675            Self::ChaChaRandI32 => 0,
676            Self::ChaChaRandI64 => 0,
677            Self::ChaChaRandI128 => 0,
678            Self::ChaChaRandU8 => 0,
679            Self::ChaChaRandU16 => 0,
680            Self::ChaChaRandU32 => 0,
681            Self::ChaChaRandU64 => 0,
682            Self::ChaChaRandU128 => 0,
683            Self::ChaChaRandScalar => 0,
684
685            Self::Keccak256HashToAddress => 1,
686            Self::Keccak256HashToField => 1,
687            Self::Keccak256HashToGroup => 1,
688            Self::Keccak256HashToI8 => 1,
689            Self::Keccak256HashToI16 => 1,
690            Self::Keccak256HashToI32 => 1,
691            Self::Keccak256HashToI64 => 1,
692            Self::Keccak256HashToI128 => 1,
693            Self::Keccak256HashToU8 => 1,
694            Self::Keccak256HashToU16 => 1,
695            Self::Keccak256HashToU32 => 1,
696            Self::Keccak256HashToU64 => 1,
697            Self::Keccak256HashToU128 => 1,
698            Self::Keccak256HashToScalar => 1,
699
700            Self::Keccak384HashToAddress => 1,
701            Self::Keccak384HashToField => 1,
702            Self::Keccak384HashToGroup => 1,
703            Self::Keccak384HashToI8 => 1,
704            Self::Keccak384HashToI16 => 1,
705            Self::Keccak384HashToI32 => 1,
706            Self::Keccak384HashToI64 => 1,
707            Self::Keccak384HashToI128 => 1,
708            Self::Keccak384HashToU8 => 1,
709            Self::Keccak384HashToU16 => 1,
710            Self::Keccak384HashToU32 => 1,
711            Self::Keccak384HashToU64 => 1,
712            Self::Keccak384HashToU128 => 1,
713            Self::Keccak384HashToScalar => 1,
714
715            Self::Keccak512HashToAddress => 1,
716            Self::Keccak512HashToField => 1,
717            Self::Keccak512HashToGroup => 1,
718            Self::Keccak512HashToI8 => 1,
719            Self::Keccak512HashToI16 => 1,
720            Self::Keccak512HashToI32 => 1,
721            Self::Keccak512HashToI64 => 1,
722            Self::Keccak512HashToI128 => 1,
723            Self::Keccak512HashToU8 => 1,
724            Self::Keccak512HashToU16 => 1,
725            Self::Keccak512HashToU32 => 1,
726            Self::Keccak512HashToU64 => 1,
727            Self::Keccak512HashToU128 => 1,
728            Self::Keccak512HashToScalar => 1,
729
730            Self::Pedersen64CommitToAddress => 2,
731            Self::Pedersen64CommitToField => 2,
732            Self::Pedersen64CommitToGroup => 2,
733            Self::Pedersen64HashToAddress => 1,
734            Self::Pedersen64HashToField => 1,
735            Self::Pedersen64HashToGroup => 1,
736            Self::Pedersen64HashToI8 => 1,
737            Self::Pedersen64HashToI16 => 1,
738            Self::Pedersen64HashToI32 => 1,
739            Self::Pedersen64HashToI64 => 1,
740            Self::Pedersen64HashToI128 => 1,
741            Self::Pedersen64HashToU8 => 1,
742            Self::Pedersen64HashToU16 => 1,
743            Self::Pedersen64HashToU32 => 1,
744            Self::Pedersen64HashToU64 => 1,
745            Self::Pedersen64HashToU128 => 1,
746            Self::Pedersen64HashToScalar => 1,
747
748            Self::Pedersen128CommitToAddress => 2,
749            Self::Pedersen128CommitToField => 2,
750            Self::Pedersen128CommitToGroup => 2,
751            Self::Pedersen128HashToAddress => 1,
752            Self::Pedersen128HashToField => 1,
753            Self::Pedersen128HashToGroup => 1,
754            Self::Pedersen128HashToI8 => 1,
755            Self::Pedersen128HashToI16 => 1,
756            Self::Pedersen128HashToI32 => 1,
757            Self::Pedersen128HashToI64 => 1,
758            Self::Pedersen128HashToI128 => 1,
759            Self::Pedersen128HashToU8 => 1,
760            Self::Pedersen128HashToU16 => 1,
761            Self::Pedersen128HashToU32 => 1,
762            Self::Pedersen128HashToU64 => 1,
763            Self::Pedersen128HashToU128 => 1,
764            Self::Pedersen128HashToScalar => 1,
765
766            Self::Poseidon2HashToAddress => 1,
767            Self::Poseidon2HashToField => 1,
768            Self::Poseidon2HashToGroup => 1,
769            Self::Poseidon2HashToI8 => 1,
770            Self::Poseidon2HashToI16 => 1,
771            Self::Poseidon2HashToI32 => 1,
772            Self::Poseidon2HashToI64 => 1,
773            Self::Poseidon2HashToI128 => 1,
774            Self::Poseidon2HashToU8 => 1,
775            Self::Poseidon2HashToU16 => 1,
776            Self::Poseidon2HashToU32 => 1,
777            Self::Poseidon2HashToU64 => 1,
778            Self::Poseidon2HashToU128 => 1,
779            Self::Poseidon2HashToScalar => 1,
780
781            Self::Poseidon4HashToAddress => 1,
782            Self::Poseidon4HashToField => 1,
783            Self::Poseidon4HashToGroup => 1,
784            Self::Poseidon4HashToI8 => 1,
785            Self::Poseidon4HashToI16 => 1,
786            Self::Poseidon4HashToI32 => 1,
787            Self::Poseidon4HashToI64 => 1,
788            Self::Poseidon4HashToI128 => 1,
789            Self::Poseidon4HashToU8 => 1,
790            Self::Poseidon4HashToU16 => 1,
791            Self::Poseidon4HashToU32 => 1,
792            Self::Poseidon4HashToU64 => 1,
793            Self::Poseidon4HashToU128 => 1,
794            Self::Poseidon4HashToScalar => 1,
795
796            Self::Poseidon8HashToAddress => 1,
797            Self::Poseidon8HashToField => 1,
798            Self::Poseidon8HashToGroup => 1,
799            Self::Poseidon8HashToI8 => 1,
800            Self::Poseidon8HashToI16 => 1,
801            Self::Poseidon8HashToI32 => 1,
802            Self::Poseidon8HashToI64 => 1,
803            Self::Poseidon8HashToI128 => 1,
804            Self::Poseidon8HashToU8 => 1,
805            Self::Poseidon8HashToU16 => 1,
806            Self::Poseidon8HashToU32 => 1,
807            Self::Poseidon8HashToU64 => 1,
808            Self::Poseidon8HashToU128 => 1,
809            Self::Poseidon8HashToScalar => 1,
810
811            Self::SHA3_256HashToAddress => 1,
812            Self::SHA3_256HashToField => 1,
813            Self::SHA3_256HashToGroup => 1,
814            Self::SHA3_256HashToI8 => 1,
815            Self::SHA3_256HashToI16 => 1,
816            Self::SHA3_256HashToI32 => 1,
817            Self::SHA3_256HashToI64 => 1,
818            Self::SHA3_256HashToI128 => 1,
819            Self::SHA3_256HashToU8 => 1,
820            Self::SHA3_256HashToU16 => 1,
821            Self::SHA3_256HashToU32 => 1,
822            Self::SHA3_256HashToU64 => 1,
823            Self::SHA3_256HashToU128 => 1,
824            Self::SHA3_256HashToScalar => 1,
825
826            Self::SHA3_384HashToAddress => 1,
827            Self::SHA3_384HashToField => 1,
828            Self::SHA3_384HashToGroup => 1,
829            Self::SHA3_384HashToI8 => 1,
830            Self::SHA3_384HashToI16 => 1,
831            Self::SHA3_384HashToI32 => 1,
832            Self::SHA3_384HashToI64 => 1,
833            Self::SHA3_384HashToI128 => 1,
834            Self::SHA3_384HashToU8 => 1,
835            Self::SHA3_384HashToU16 => 1,
836            Self::SHA3_384HashToU32 => 1,
837            Self::SHA3_384HashToU64 => 1,
838            Self::SHA3_384HashToU128 => 1,
839            Self::SHA3_384HashToScalar => 1,
840
841            Self::SHA3_512HashToAddress => 1,
842            Self::SHA3_512HashToField => 1,
843            Self::SHA3_512HashToGroup => 1,
844            Self::SHA3_512HashToI8 => 1,
845            Self::SHA3_512HashToI16 => 1,
846            Self::SHA3_512HashToI32 => 1,
847            Self::SHA3_512HashToI64 => 1,
848            Self::SHA3_512HashToI128 => 1,
849            Self::SHA3_512HashToU8 => 1,
850            Self::SHA3_512HashToU16 => 1,
851            Self::SHA3_512HashToU32 => 1,
852            Self::SHA3_512HashToU64 => 1,
853            Self::SHA3_512HashToU128 => 1,
854            Self::SHA3_512HashToScalar => 1,
855
856            Self::MappingGet => 2,
857            Self::MappingGetOrUse => 3,
858            Self::MappingSet => 3,
859            Self::MappingRemove => 2,
860            Self::MappingContains => 2,
861
862            Self::OptionalUnwrap => 1,
863            Self::OptionalUnwrapOr => 2,
864
865            Self::GroupToXCoordinate => 1,
866            Self::GroupToYCoordinate => 1,
867
868            Self::SignatureVerify => 3,
869            Self::FutureAwait => 1,
870
871            Self::ProgramChecksum => 1,
872            Self::ProgramEdition => 1,
873            Self::ProgramOwner => 1,
874            Self::CheatCodePrintMapping => 1,
875            Self::CheatCodeSetBlockHeight => 1,
876        }
877    }
878
879    /// Returns whether or not this function is finalize command.
880    pub fn is_finalize_command(&self) -> bool {
881        match self {
882            CoreFunction::FutureAwait
883            | CoreFunction::ChaChaRandAddress
884            | CoreFunction::ChaChaRandBool
885            | CoreFunction::ChaChaRandField
886            | CoreFunction::ChaChaRandGroup
887            | CoreFunction::ChaChaRandI8
888            | CoreFunction::ChaChaRandI16
889            | CoreFunction::ChaChaRandI32
890            | CoreFunction::ChaChaRandI64
891            | CoreFunction::ChaChaRandI128
892            | CoreFunction::ChaChaRandU8
893            | CoreFunction::ChaChaRandU16
894            | CoreFunction::ChaChaRandU32
895            | CoreFunction::ChaChaRandU64
896            | CoreFunction::ChaChaRandU128
897            | CoreFunction::MappingGet
898            | CoreFunction::MappingGetOrUse
899            | CoreFunction::ChaChaRandScalar
900            | CoreFunction::MappingSet
901            | CoreFunction::MappingRemove
902            | CoreFunction::MappingContains
903            | CoreFunction::ProgramChecksum
904            | CoreFunction::ProgramEdition
905            | CoreFunction::ProgramOwner => true,
906            CoreFunction::OptionalUnwrap
907            | CoreFunction::OptionalUnwrapOr
908            | CoreFunction::BHP256CommitToAddress
909            | CoreFunction::BHP256CommitToField
910            | CoreFunction::BHP256CommitToGroup
911            | CoreFunction::BHP256HashToAddress
912            | CoreFunction::BHP256HashToField
913            | CoreFunction::BHP256HashToGroup
914            | CoreFunction::BHP256HashToI8
915            | CoreFunction::BHP256HashToI16
916            | CoreFunction::BHP256HashToI32
917            | CoreFunction::BHP256HashToI64
918            | CoreFunction::BHP256HashToI128
919            | CoreFunction::BHP256HashToU8
920            | CoreFunction::BHP256HashToU16
921            | CoreFunction::BHP256HashToU32
922            | CoreFunction::BHP256HashToU64
923            | CoreFunction::BHP256HashToU128
924            | CoreFunction::BHP256HashToScalar
925            | CoreFunction::BHP512CommitToAddress
926            | CoreFunction::BHP512CommitToField
927            | CoreFunction::BHP512CommitToGroup
928            | CoreFunction::BHP512HashToAddress
929            | CoreFunction::BHP512HashToField
930            | CoreFunction::BHP512HashToGroup
931            | CoreFunction::BHP512HashToI8
932            | CoreFunction::BHP512HashToI16
933            | CoreFunction::BHP512HashToI32
934            | CoreFunction::BHP512HashToI64
935            | CoreFunction::BHP512HashToI128
936            | CoreFunction::BHP512HashToU8
937            | CoreFunction::BHP512HashToU16
938            | CoreFunction::BHP512HashToU32
939            | CoreFunction::BHP512HashToU64
940            | CoreFunction::BHP512HashToU128
941            | CoreFunction::BHP512HashToScalar
942            | CoreFunction::BHP768CommitToAddress
943            | CoreFunction::BHP768CommitToField
944            | CoreFunction::BHP768CommitToGroup
945            | CoreFunction::BHP768HashToAddress
946            | CoreFunction::BHP768HashToField
947            | CoreFunction::BHP768HashToGroup
948            | CoreFunction::BHP768HashToI8
949            | CoreFunction::BHP768HashToI16
950            | CoreFunction::BHP768HashToI32
951            | CoreFunction::BHP768HashToI64
952            | CoreFunction::BHP768HashToI128
953            | CoreFunction::BHP768HashToU8
954            | CoreFunction::BHP768HashToU16
955            | CoreFunction::BHP768HashToU32
956            | CoreFunction::BHP768HashToU64
957            | CoreFunction::BHP768HashToU128
958            | CoreFunction::BHP768HashToScalar
959            | CoreFunction::BHP1024CommitToAddress
960            | CoreFunction::BHP1024CommitToField
961            | CoreFunction::BHP1024CommitToGroup
962            | CoreFunction::BHP1024HashToAddress
963            | CoreFunction::BHP1024HashToField
964            | CoreFunction::BHP1024HashToGroup
965            | CoreFunction::BHP1024HashToI8
966            | CoreFunction::BHP1024HashToI16
967            | CoreFunction::BHP1024HashToI32
968            | CoreFunction::BHP1024HashToI64
969            | CoreFunction::BHP1024HashToI128
970            | CoreFunction::BHP1024HashToU8
971            | CoreFunction::BHP1024HashToU16
972            | CoreFunction::BHP1024HashToU32
973            | CoreFunction::BHP1024HashToU64
974            | CoreFunction::BHP1024HashToU128
975            | CoreFunction::BHP1024HashToScalar
976            | CoreFunction::Keccak256HashToAddress
977            | CoreFunction::Keccak256HashToField
978            | CoreFunction::Keccak256HashToGroup
979            | CoreFunction::Keccak256HashToI8
980            | CoreFunction::Keccak256HashToI16
981            | CoreFunction::Keccak256HashToI32
982            | CoreFunction::Keccak256HashToI64
983            | CoreFunction::Keccak256HashToI128
984            | CoreFunction::Keccak256HashToU8
985            | CoreFunction::Keccak256HashToU16
986            | CoreFunction::Keccak256HashToU32
987            | CoreFunction::Keccak256HashToU64
988            | CoreFunction::Keccak256HashToU128
989            | CoreFunction::Keccak256HashToScalar
990            | CoreFunction::Keccak384HashToAddress
991            | CoreFunction::Keccak384HashToField
992            | CoreFunction::Keccak384HashToGroup
993            | CoreFunction::Keccak384HashToI8
994            | CoreFunction::Keccak384HashToI16
995            | CoreFunction::Keccak384HashToI32
996            | CoreFunction::Keccak384HashToI64
997            | CoreFunction::Keccak384HashToI128
998            | CoreFunction::Keccak384HashToU8
999            | CoreFunction::Keccak384HashToU16
1000            | CoreFunction::Keccak384HashToU32
1001            | CoreFunction::Keccak384HashToU64
1002            | CoreFunction::Keccak384HashToU128
1003            | CoreFunction::Keccak384HashToScalar
1004            | CoreFunction::Keccak512HashToAddress
1005            | CoreFunction::Keccak512HashToField
1006            | CoreFunction::Keccak512HashToGroup
1007            | CoreFunction::Keccak512HashToI8
1008            | CoreFunction::Keccak512HashToI16
1009            | CoreFunction::Keccak512HashToI32
1010            | CoreFunction::Keccak512HashToI64
1011            | CoreFunction::Keccak512HashToI128
1012            | CoreFunction::Keccak512HashToU8
1013            | CoreFunction::Keccak512HashToU16
1014            | CoreFunction::Keccak512HashToU32
1015            | CoreFunction::Keccak512HashToU64
1016            | CoreFunction::Keccak512HashToU128
1017            | CoreFunction::Keccak512HashToScalar
1018            | CoreFunction::Pedersen64CommitToAddress
1019            | CoreFunction::Pedersen64CommitToField
1020            | CoreFunction::Pedersen64CommitToGroup
1021            | CoreFunction::Pedersen64HashToAddress
1022            | CoreFunction::Pedersen64HashToField
1023            | CoreFunction::Pedersen64HashToGroup
1024            | CoreFunction::Pedersen64HashToI8
1025            | CoreFunction::Pedersen64HashToI16
1026            | CoreFunction::Pedersen64HashToI32
1027            | CoreFunction::Pedersen64HashToI64
1028            | CoreFunction::Pedersen64HashToI128
1029            | CoreFunction::Pedersen64HashToU8
1030            | CoreFunction::Pedersen64HashToU16
1031            | CoreFunction::Pedersen64HashToU32
1032            | CoreFunction::Pedersen64HashToU64
1033            | CoreFunction::Pedersen64HashToU128
1034            | CoreFunction::Pedersen64HashToScalar
1035            | CoreFunction::Pedersen128CommitToAddress
1036            | CoreFunction::Pedersen128CommitToField
1037            | CoreFunction::Pedersen128CommitToGroup
1038            | CoreFunction::Pedersen128HashToAddress
1039            | CoreFunction::Pedersen128HashToField
1040            | CoreFunction::Pedersen128HashToGroup
1041            | CoreFunction::Pedersen128HashToI8
1042            | CoreFunction::Pedersen128HashToI16
1043            | CoreFunction::Pedersen128HashToI32
1044            | CoreFunction::Pedersen128HashToI64
1045            | CoreFunction::Pedersen128HashToI128
1046            | CoreFunction::Pedersen128HashToU8
1047            | CoreFunction::Pedersen128HashToU16
1048            | CoreFunction::Pedersen128HashToU32
1049            | CoreFunction::Pedersen128HashToU64
1050            | CoreFunction::Pedersen128HashToU128
1051            | CoreFunction::Pedersen128HashToScalar
1052            | CoreFunction::Poseidon2HashToAddress
1053            | CoreFunction::Poseidon2HashToField
1054            | CoreFunction::Poseidon2HashToGroup
1055            | CoreFunction::Poseidon2HashToI8
1056            | CoreFunction::Poseidon2HashToI16
1057            | CoreFunction::Poseidon2HashToI32
1058            | CoreFunction::Poseidon2HashToI64
1059            | CoreFunction::Poseidon2HashToI128
1060            | CoreFunction::Poseidon2HashToU8
1061            | CoreFunction::Poseidon2HashToU16
1062            | CoreFunction::Poseidon2HashToU32
1063            | CoreFunction::Poseidon2HashToU64
1064            | CoreFunction::Poseidon2HashToU128
1065            | CoreFunction::Poseidon2HashToScalar
1066            | CoreFunction::Poseidon4HashToAddress
1067            | CoreFunction::Poseidon4HashToField
1068            | CoreFunction::Poseidon4HashToGroup
1069            | CoreFunction::Poseidon4HashToI8
1070            | CoreFunction::Poseidon4HashToI16
1071            | CoreFunction::Poseidon4HashToI32
1072            | CoreFunction::Poseidon4HashToI64
1073            | CoreFunction::Poseidon4HashToI128
1074            | CoreFunction::Poseidon4HashToU8
1075            | CoreFunction::Poseidon4HashToU16
1076            | CoreFunction::Poseidon4HashToU32
1077            | CoreFunction::Poseidon4HashToU64
1078            | CoreFunction::Poseidon4HashToU128
1079            | CoreFunction::Poseidon4HashToScalar
1080            | CoreFunction::Poseidon8HashToAddress
1081            | CoreFunction::Poseidon8HashToField
1082            | CoreFunction::Poseidon8HashToGroup
1083            | CoreFunction::Poseidon8HashToI8
1084            | CoreFunction::Poseidon8HashToI16
1085            | CoreFunction::Poseidon8HashToI32
1086            | CoreFunction::Poseidon8HashToI64
1087            | CoreFunction::Poseidon8HashToI128
1088            | CoreFunction::Poseidon8HashToU8
1089            | CoreFunction::Poseidon8HashToU16
1090            | CoreFunction::Poseidon8HashToU32
1091            | CoreFunction::Poseidon8HashToU64
1092            | CoreFunction::Poseidon8HashToU128
1093            | CoreFunction::Poseidon8HashToScalar
1094            | CoreFunction::SHA3_256HashToAddress
1095            | CoreFunction::SHA3_256HashToField
1096            | CoreFunction::SHA3_256HashToGroup
1097            | CoreFunction::SHA3_256HashToI8
1098            | CoreFunction::SHA3_256HashToI16
1099            | CoreFunction::SHA3_256HashToI32
1100            | CoreFunction::SHA3_256HashToI64
1101            | CoreFunction::SHA3_256HashToI128
1102            | CoreFunction::SHA3_256HashToU8
1103            | CoreFunction::SHA3_256HashToU16
1104            | CoreFunction::SHA3_256HashToU32
1105            | CoreFunction::SHA3_256HashToU64
1106            | CoreFunction::SHA3_256HashToU128
1107            | CoreFunction::SHA3_256HashToScalar
1108            | CoreFunction::SHA3_384HashToAddress
1109            | CoreFunction::SHA3_384HashToField
1110            | CoreFunction::SHA3_384HashToGroup
1111            | CoreFunction::SHA3_384HashToI8
1112            | CoreFunction::SHA3_384HashToI16
1113            | CoreFunction::SHA3_384HashToI32
1114            | CoreFunction::SHA3_384HashToI64
1115            | CoreFunction::SHA3_384HashToI128
1116            | CoreFunction::SHA3_384HashToU8
1117            | CoreFunction::SHA3_384HashToU16
1118            | CoreFunction::SHA3_384HashToU32
1119            | CoreFunction::SHA3_384HashToU64
1120            | CoreFunction::SHA3_384HashToU128
1121            | CoreFunction::SHA3_384HashToScalar
1122            | CoreFunction::SHA3_512HashToAddress
1123            | CoreFunction::SHA3_512HashToField
1124            | CoreFunction::SHA3_512HashToGroup
1125            | CoreFunction::SHA3_512HashToI8
1126            | CoreFunction::SHA3_512HashToI16
1127            | CoreFunction::SHA3_512HashToI32
1128            | CoreFunction::SHA3_512HashToI64
1129            | CoreFunction::SHA3_512HashToI128
1130            | CoreFunction::SHA3_512HashToU8
1131            | CoreFunction::SHA3_512HashToU16
1132            | CoreFunction::SHA3_512HashToU32
1133            | CoreFunction::SHA3_512HashToU64
1134            | CoreFunction::SHA3_512HashToU128
1135            | CoreFunction::SHA3_512HashToScalar
1136            | CoreFunction::GroupToXCoordinate
1137            | CoreFunction::GroupToYCoordinate
1138            | CoreFunction::SignatureVerify
1139            | CoreFunction::CheatCodePrintMapping
1140            | CoreFunction::CheatCodeSetBlockHeight => false,
1141        }
1142    }
1143}