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    GroupToXCoordinate,
288    GroupToYCoordinate,
289
290    SignatureVerify,
291    FutureAwait,
292
293    CheatCodePrintMapping,
294    CheatCodeSetBlockHeight,
295}
296
297impl CoreFunction {
298    /// Returns a `CoreFunction` from the given module and method symbols.
299    pub fn from_symbols(module: Symbol, function: Symbol) -> Option<Self> {
300        Some(match (module, function) {
301            (sym::BHP256, sym::commit_to_address) => Self::BHP256CommitToAddress,
302            (sym::BHP256, sym::commit_to_field) => Self::BHP256CommitToField,
303            (sym::BHP256, sym::commit_to_group) => Self::BHP256CommitToGroup,
304
305            (sym::BHP256, sym::hash_to_address) => Self::BHP256HashToAddress,
306            (sym::BHP256, sym::hash_to_field) => Self::BHP256HashToField,
307            (sym::BHP256, sym::hash_to_group) => Self::BHP256HashToGroup,
308            (sym::BHP256, sym::hash_to_i8) => Self::BHP256HashToI8,
309            (sym::BHP256, sym::hash_to_i16) => Self::BHP256HashToI16,
310            (sym::BHP256, sym::hash_to_i32) => Self::BHP256HashToI32,
311            (sym::BHP256, sym::hash_to_i64) => Self::BHP256HashToI64,
312            (sym::BHP256, sym::hash_to_i128) => Self::BHP256HashToI128,
313            (sym::BHP256, sym::hash_to_u8) => Self::BHP256HashToU8,
314            (sym::BHP256, sym::hash_to_u16) => Self::BHP256HashToU16,
315            (sym::BHP256, sym::hash_to_u32) => Self::BHP256HashToU32,
316            (sym::BHP256, sym::hash_to_u64) => Self::BHP256HashToU64,
317            (sym::BHP256, sym::hash_to_u128) => Self::BHP256HashToU128,
318            (sym::BHP256, sym::hash_to_scalar) => Self::BHP256HashToScalar,
319
320            (sym::BHP512, sym::commit_to_address) => Self::BHP512CommitToAddress,
321            (sym::BHP512, sym::commit_to_field) => Self::BHP512CommitToField,
322            (sym::BHP512, sym::commit_to_group) => Self::BHP512CommitToGroup,
323            (sym::BHP512, sym::hash_to_address) => Self::BHP512HashToAddress,
324            (sym::BHP512, sym::hash_to_field) => Self::BHP512HashToField,
325            (sym::BHP512, sym::hash_to_group) => Self::BHP512HashToGroup,
326            (sym::BHP512, sym::hash_to_i8) => Self::BHP512HashToI8,
327            (sym::BHP512, sym::hash_to_i16) => Self::BHP512HashToI16,
328            (sym::BHP512, sym::hash_to_i32) => Self::BHP512HashToI32,
329            (sym::BHP512, sym::hash_to_i64) => Self::BHP512HashToI64,
330            (sym::BHP512, sym::hash_to_i128) => Self::BHP512HashToI128,
331            (sym::BHP512, sym::hash_to_u8) => Self::BHP512HashToU8,
332            (sym::BHP512, sym::hash_to_u16) => Self::BHP512HashToU16,
333            (sym::BHP512, sym::hash_to_u32) => Self::BHP512HashToU32,
334            (sym::BHP512, sym::hash_to_u64) => Self::BHP512HashToU64,
335            (sym::BHP512, sym::hash_to_u128) => Self::BHP512HashToU128,
336            (sym::BHP512, sym::hash_to_scalar) => Self::BHP512HashToScalar,
337
338            (sym::BHP768, sym::commit_to_address) => Self::BHP768CommitToAddress,
339            (sym::BHP768, sym::commit_to_field) => Self::BHP768CommitToField,
340            (sym::BHP768, sym::commit_to_group) => Self::BHP768CommitToGroup,
341            (sym::BHP768, sym::hash_to_address) => Self::BHP768HashToAddress,
342            (sym::BHP768, sym::hash_to_field) => Self::BHP768HashToField,
343            (sym::BHP768, sym::hash_to_group) => Self::BHP768HashToGroup,
344            (sym::BHP768, sym::hash_to_i8) => Self::BHP768HashToI8,
345            (sym::BHP768, sym::hash_to_i16) => Self::BHP768HashToI16,
346            (sym::BHP768, sym::hash_to_i32) => Self::BHP768HashToI32,
347            (sym::BHP768, sym::hash_to_i64) => Self::BHP768HashToI64,
348            (sym::BHP768, sym::hash_to_i128) => Self::BHP768HashToI128,
349            (sym::BHP768, sym::hash_to_u8) => Self::BHP768HashToU8,
350            (sym::BHP768, sym::hash_to_u16) => Self::BHP768HashToU16,
351            (sym::BHP768, sym::hash_to_u32) => Self::BHP768HashToU32,
352            (sym::BHP768, sym::hash_to_u64) => Self::BHP768HashToU64,
353            (sym::BHP768, sym::hash_to_u128) => Self::BHP768HashToU128,
354            (sym::BHP768, sym::hash_to_scalar) => Self::BHP768HashToScalar,
355
356            (sym::BHP1024, sym::commit_to_address) => Self::BHP1024CommitToAddress,
357            (sym::BHP1024, sym::commit_to_field) => Self::BHP1024CommitToField,
358            (sym::BHP1024, sym::commit_to_group) => Self::BHP1024CommitToGroup,
359            (sym::BHP1024, sym::hash_to_address) => Self::BHP1024HashToAddress,
360            (sym::BHP1024, sym::hash_to_field) => Self::BHP1024HashToField,
361            (sym::BHP1024, sym::hash_to_group) => Self::BHP1024HashToGroup,
362            (sym::BHP1024, sym::hash_to_i8) => Self::BHP1024HashToI8,
363            (sym::BHP1024, sym::hash_to_i16) => Self::BHP1024HashToI16,
364            (sym::BHP1024, sym::hash_to_i32) => Self::BHP1024HashToI32,
365            (sym::BHP1024, sym::hash_to_i64) => Self::BHP1024HashToI64,
366            (sym::BHP1024, sym::hash_to_i128) => Self::BHP1024HashToI128,
367            (sym::BHP1024, sym::hash_to_u8) => Self::BHP1024HashToU8,
368            (sym::BHP1024, sym::hash_to_u16) => Self::BHP1024HashToU16,
369            (sym::BHP1024, sym::hash_to_u32) => Self::BHP1024HashToU32,
370            (sym::BHP1024, sym::hash_to_u64) => Self::BHP1024HashToU64,
371            (sym::BHP1024, sym::hash_to_u128) => Self::BHP1024HashToU128,
372            (sym::BHP1024, sym::hash_to_scalar) => Self::BHP1024HashToScalar,
373
374            (sym::ChaCha, sym::rand_address) => Self::ChaChaRandAddress,
375            (sym::ChaCha, sym::rand_bool) => Self::ChaChaRandBool,
376            (sym::ChaCha, sym::rand_field) => Self::ChaChaRandField,
377            (sym::ChaCha, sym::rand_group) => Self::ChaChaRandGroup,
378            (sym::ChaCha, sym::rand_i8) => Self::ChaChaRandI8,
379            (sym::ChaCha, sym::rand_i16) => Self::ChaChaRandI16,
380            (sym::ChaCha, sym::rand_i32) => Self::ChaChaRandI32,
381            (sym::ChaCha, sym::rand_i64) => Self::ChaChaRandI64,
382            (sym::ChaCha, sym::rand_i128) => Self::ChaChaRandI128,
383            (sym::ChaCha, sym::rand_scalar) => Self::ChaChaRandScalar,
384            (sym::ChaCha, sym::rand_u8) => Self::ChaChaRandU8,
385            (sym::ChaCha, sym::rand_u16) => Self::ChaChaRandU16,
386            (sym::ChaCha, sym::rand_u32) => Self::ChaChaRandU32,
387            (sym::ChaCha, sym::rand_u64) => Self::ChaChaRandU64,
388            (sym::ChaCha, sym::rand_u128) => Self::ChaChaRandU128,
389
390            (sym::Keccak256, sym::hash_to_address) => Self::Keccak256HashToAddress,
391            (sym::Keccak256, sym::hash_to_field) => Self::Keccak256HashToField,
392            (sym::Keccak256, sym::hash_to_group) => Self::Keccak256HashToGroup,
393            (sym::Keccak256, sym::hash_to_i8) => Self::Keccak256HashToI8,
394            (sym::Keccak256, sym::hash_to_i16) => Self::Keccak256HashToI16,
395            (sym::Keccak256, sym::hash_to_i32) => Self::Keccak256HashToI32,
396            (sym::Keccak256, sym::hash_to_i64) => Self::Keccak256HashToI64,
397            (sym::Keccak256, sym::hash_to_i128) => Self::Keccak256HashToI128,
398            (sym::Keccak256, sym::hash_to_u8) => Self::Keccak256HashToU8,
399            (sym::Keccak256, sym::hash_to_u16) => Self::Keccak256HashToU16,
400            (sym::Keccak256, sym::hash_to_u32) => Self::Keccak256HashToU32,
401            (sym::Keccak256, sym::hash_to_u64) => Self::Keccak256HashToU64,
402            (sym::Keccak256, sym::hash_to_u128) => Self::Keccak256HashToU128,
403            (sym::Keccak256, sym::hash_to_scalar) => Self::Keccak256HashToScalar,
404
405            (sym::Keccak384, sym::hash_to_address) => Self::Keccak384HashToAddress,
406            (sym::Keccak384, sym::hash_to_field) => Self::Keccak384HashToField,
407            (sym::Keccak384, sym::hash_to_group) => Self::Keccak384HashToGroup,
408            (sym::Keccak384, sym::hash_to_i8) => Self::Keccak384HashToI8,
409            (sym::Keccak384, sym::hash_to_i16) => Self::Keccak384HashToI16,
410            (sym::Keccak384, sym::hash_to_i32) => Self::Keccak384HashToI32,
411            (sym::Keccak384, sym::hash_to_i64) => Self::Keccak384HashToI64,
412            (sym::Keccak384, sym::hash_to_i128) => Self::Keccak384HashToI128,
413            (sym::Keccak384, sym::hash_to_u8) => Self::Keccak384HashToU8,
414            (sym::Keccak384, sym::hash_to_u16) => Self::Keccak384HashToU16,
415            (sym::Keccak384, sym::hash_to_u32) => Self::Keccak384HashToU32,
416            (sym::Keccak384, sym::hash_to_u64) => Self::Keccak384HashToU64,
417            (sym::Keccak384, sym::hash_to_u128) => Self::Keccak384HashToU128,
418            (sym::Keccak384, sym::hash_to_scalar) => Self::Keccak384HashToScalar,
419
420            (sym::Keccak512, sym::hash_to_address) => Self::Keccak512HashToAddress,
421            (sym::Keccak512, sym::hash_to_field) => Self::Keccak512HashToField,
422            (sym::Keccak512, sym::hash_to_group) => Self::Keccak512HashToGroup,
423            (sym::Keccak512, sym::hash_to_i8) => Self::Keccak512HashToI8,
424            (sym::Keccak512, sym::hash_to_i16) => Self::Keccak512HashToI16,
425            (sym::Keccak512, sym::hash_to_i32) => Self::Keccak512HashToI32,
426            (sym::Keccak512, sym::hash_to_i64) => Self::Keccak512HashToI64,
427            (sym::Keccak512, sym::hash_to_i128) => Self::Keccak512HashToI128,
428            (sym::Keccak512, sym::hash_to_u8) => Self::Keccak512HashToU8,
429            (sym::Keccak512, sym::hash_to_u16) => Self::Keccak512HashToU16,
430            (sym::Keccak512, sym::hash_to_u32) => Self::Keccak512HashToU32,
431            (sym::Keccak512, sym::hash_to_u64) => Self::Keccak512HashToU64,
432            (sym::Keccak512, sym::hash_to_u128) => Self::Keccak512HashToU128,
433            (sym::Keccak512, sym::hash_to_scalar) => Self::Keccak512HashToScalar,
434
435            (sym::Pedersen64, sym::commit_to_address) => Self::Pedersen64CommitToAddress,
436            (sym::Pedersen64, sym::commit_to_field) => Self::Pedersen64CommitToField,
437            (sym::Pedersen64, sym::commit_to_group) => Self::Pedersen64CommitToGroup,
438            (sym::Pedersen64, sym::hash_to_address) => Self::Pedersen64HashToAddress,
439            (sym::Pedersen64, sym::hash_to_field) => Self::Pedersen64HashToField,
440            (sym::Pedersen64, sym::hash_to_group) => Self::Pedersen64HashToGroup,
441            (sym::Pedersen64, sym::hash_to_i8) => Self::Pedersen64HashToI8,
442            (sym::Pedersen64, sym::hash_to_i16) => Self::Pedersen64HashToI16,
443            (sym::Pedersen64, sym::hash_to_i32) => Self::Pedersen64HashToI32,
444            (sym::Pedersen64, sym::hash_to_i64) => Self::Pedersen64HashToI64,
445            (sym::Pedersen64, sym::hash_to_i128) => Self::Pedersen64HashToI128,
446            (sym::Pedersen64, sym::hash_to_u8) => Self::Pedersen64HashToU8,
447            (sym::Pedersen64, sym::hash_to_u16) => Self::Pedersen64HashToU16,
448            (sym::Pedersen64, sym::hash_to_u32) => Self::Pedersen64HashToU32,
449            (sym::Pedersen64, sym::hash_to_u64) => Self::Pedersen64HashToU64,
450            (sym::Pedersen64, sym::hash_to_u128) => Self::Pedersen64HashToU128,
451            (sym::Pedersen64, sym::hash_to_scalar) => Self::Pedersen64HashToScalar,
452
453            (sym::Pedersen128, sym::commit_to_address) => Self::Pedersen128CommitToAddress,
454            (sym::Pedersen128, sym::commit_to_field) => Self::Pedersen128CommitToField,
455            (sym::Pedersen128, sym::commit_to_group) => Self::Pedersen128CommitToGroup,
456            (sym::Pedersen128, sym::hash_to_address) => Self::Pedersen128HashToAddress,
457            (sym::Pedersen128, sym::hash_to_field) => Self::Pedersen128HashToField,
458            (sym::Pedersen128, sym::hash_to_group) => Self::Pedersen128HashToGroup,
459            (sym::Pedersen128, sym::hash_to_i8) => Self::Pedersen128HashToI8,
460            (sym::Pedersen128, sym::hash_to_i16) => Self::Pedersen128HashToI16,
461            (sym::Pedersen128, sym::hash_to_i32) => Self::Pedersen128HashToI32,
462            (sym::Pedersen128, sym::hash_to_i64) => Self::Pedersen128HashToI64,
463            (sym::Pedersen128, sym::hash_to_i128) => Self::Pedersen128HashToI128,
464            (sym::Pedersen128, sym::hash_to_u8) => Self::Pedersen128HashToU8,
465            (sym::Pedersen128, sym::hash_to_u16) => Self::Pedersen128HashToU16,
466            (sym::Pedersen128, sym::hash_to_u32) => Self::Pedersen128HashToU32,
467            (sym::Pedersen128, sym::hash_to_u64) => Self::Pedersen128HashToU64,
468            (sym::Pedersen128, sym::hash_to_u128) => Self::Pedersen128HashToU128,
469            (sym::Pedersen128, sym::hash_to_scalar) => Self::Pedersen128HashToScalar,
470
471            (sym::Poseidon2, sym::hash_to_address) => Self::Poseidon2HashToAddress,
472            (sym::Poseidon2, sym::hash_to_field) => Self::Poseidon2HashToField,
473            (sym::Poseidon2, sym::hash_to_group) => Self::Poseidon2HashToGroup,
474            (sym::Poseidon2, sym::hash_to_i8) => Self::Poseidon2HashToI8,
475            (sym::Poseidon2, sym::hash_to_i16) => Self::Poseidon2HashToI16,
476            (sym::Poseidon2, sym::hash_to_i32) => Self::Poseidon2HashToI32,
477            (sym::Poseidon2, sym::hash_to_i64) => Self::Poseidon2HashToI64,
478            (sym::Poseidon2, sym::hash_to_i128) => Self::Poseidon2HashToI128,
479            (sym::Poseidon2, sym::hash_to_u8) => Self::Poseidon2HashToU8,
480            (sym::Poseidon2, sym::hash_to_u16) => Self::Poseidon2HashToU16,
481            (sym::Poseidon2, sym::hash_to_u32) => Self::Poseidon2HashToU32,
482            (sym::Poseidon2, sym::hash_to_u64) => Self::Poseidon2HashToU64,
483            (sym::Poseidon2, sym::hash_to_u128) => Self::Poseidon2HashToU128,
484            (sym::Poseidon2, sym::hash_to_scalar) => Self::Poseidon2HashToScalar,
485
486            (sym::Poseidon4, sym::hash_to_address) => Self::Poseidon4HashToAddress,
487            (sym::Poseidon4, sym::hash_to_field) => Self::Poseidon4HashToField,
488            (sym::Poseidon4, sym::hash_to_group) => Self::Poseidon4HashToGroup,
489            (sym::Poseidon4, sym::hash_to_i8) => Self::Poseidon4HashToI8,
490            (sym::Poseidon4, sym::hash_to_i16) => Self::Poseidon4HashToI16,
491            (sym::Poseidon4, sym::hash_to_i32) => Self::Poseidon4HashToI32,
492            (sym::Poseidon4, sym::hash_to_i64) => Self::Poseidon4HashToI64,
493            (sym::Poseidon4, sym::hash_to_i128) => Self::Poseidon4HashToI128,
494            (sym::Poseidon4, sym::hash_to_u8) => Self::Poseidon4HashToU8,
495            (sym::Poseidon4, sym::hash_to_u16) => Self::Poseidon4HashToU16,
496            (sym::Poseidon4, sym::hash_to_u32) => Self::Poseidon4HashToU32,
497            (sym::Poseidon4, sym::hash_to_u64) => Self::Poseidon4HashToU64,
498            (sym::Poseidon4, sym::hash_to_u128) => Self::Poseidon4HashToU128,
499            (sym::Poseidon4, sym::hash_to_scalar) => Self::Poseidon4HashToScalar,
500
501            (sym::Poseidon8, sym::hash_to_address) => Self::Poseidon8HashToAddress,
502            (sym::Poseidon8, sym::hash_to_field) => Self::Poseidon8HashToField,
503            (sym::Poseidon8, sym::hash_to_group) => Self::Poseidon8HashToGroup,
504            (sym::Poseidon8, sym::hash_to_i8) => Self::Poseidon8HashToI8,
505            (sym::Poseidon8, sym::hash_to_i16) => Self::Poseidon8HashToI16,
506            (sym::Poseidon8, sym::hash_to_i32) => Self::Poseidon8HashToI32,
507            (sym::Poseidon8, sym::hash_to_i64) => Self::Poseidon8HashToI64,
508            (sym::Poseidon8, sym::hash_to_i128) => Self::Poseidon8HashToI128,
509            (sym::Poseidon8, sym::hash_to_u8) => Self::Poseidon8HashToU8,
510            (sym::Poseidon8, sym::hash_to_u16) => Self::Poseidon8HashToU16,
511            (sym::Poseidon8, sym::hash_to_u32) => Self::Poseidon8HashToU32,
512            (sym::Poseidon8, sym::hash_to_u64) => Self::Poseidon8HashToU64,
513            (sym::Poseidon8, sym::hash_to_u128) => Self::Poseidon8HashToU128,
514            (sym::Poseidon8, sym::hash_to_scalar) => Self::Poseidon8HashToScalar,
515
516            (sym::SHA3_256, sym::hash_to_address) => Self::SHA3_256HashToAddress,
517            (sym::SHA3_256, sym::hash_to_field) => Self::SHA3_256HashToField,
518            (sym::SHA3_256, sym::hash_to_group) => Self::SHA3_256HashToGroup,
519            (sym::SHA3_256, sym::hash_to_i8) => Self::SHA3_256HashToI8,
520            (sym::SHA3_256, sym::hash_to_i16) => Self::SHA3_256HashToI16,
521            (sym::SHA3_256, sym::hash_to_i32) => Self::SHA3_256HashToI32,
522            (sym::SHA3_256, sym::hash_to_i64) => Self::SHA3_256HashToI64,
523            (sym::SHA3_256, sym::hash_to_i128) => Self::SHA3_256HashToI128,
524            (sym::SHA3_256, sym::hash_to_u8) => Self::SHA3_256HashToU8,
525            (sym::SHA3_256, sym::hash_to_u16) => Self::SHA3_256HashToU16,
526            (sym::SHA3_256, sym::hash_to_u32) => Self::SHA3_256HashToU32,
527            (sym::SHA3_256, sym::hash_to_u64) => Self::SHA3_256HashToU64,
528            (sym::SHA3_256, sym::hash_to_u128) => Self::SHA3_256HashToU128,
529            (sym::SHA3_256, sym::hash_to_scalar) => Self::SHA3_256HashToScalar,
530
531            (sym::SHA3_384, sym::hash_to_address) => Self::SHA3_384HashToAddress,
532            (sym::SHA3_384, sym::hash_to_field) => Self::SHA3_384HashToField,
533            (sym::SHA3_384, sym::hash_to_group) => Self::SHA3_384HashToGroup,
534            (sym::SHA3_384, sym::hash_to_i8) => Self::SHA3_384HashToI8,
535            (sym::SHA3_384, sym::hash_to_i16) => Self::SHA3_384HashToI16,
536            (sym::SHA3_384, sym::hash_to_i32) => Self::SHA3_384HashToI32,
537            (sym::SHA3_384, sym::hash_to_i64) => Self::SHA3_384HashToI64,
538            (sym::SHA3_384, sym::hash_to_i128) => Self::SHA3_384HashToI128,
539            (sym::SHA3_384, sym::hash_to_u8) => Self::SHA3_384HashToU8,
540            (sym::SHA3_384, sym::hash_to_u16) => Self::SHA3_384HashToU16,
541            (sym::SHA3_384, sym::hash_to_u32) => Self::SHA3_384HashToU32,
542            (sym::SHA3_384, sym::hash_to_u64) => Self::SHA3_384HashToU64,
543            (sym::SHA3_384, sym::hash_to_u128) => Self::SHA3_384HashToU128,
544            (sym::SHA3_384, sym::hash_to_scalar) => Self::SHA3_384HashToScalar,
545
546            (sym::SHA3_512, sym::hash_to_address) => Self::SHA3_512HashToAddress,
547            (sym::SHA3_512, sym::hash_to_field) => Self::SHA3_512HashToField,
548            (sym::SHA3_512, sym::hash_to_group) => Self::SHA3_512HashToGroup,
549            (sym::SHA3_512, sym::hash_to_i8) => Self::SHA3_512HashToI8,
550            (sym::SHA3_512, sym::hash_to_i16) => Self::SHA3_512HashToI16,
551            (sym::SHA3_512, sym::hash_to_i32) => Self::SHA3_512HashToI32,
552            (sym::SHA3_512, sym::hash_to_i64) => Self::SHA3_512HashToI64,
553            (sym::SHA3_512, sym::hash_to_i128) => Self::SHA3_512HashToI128,
554            (sym::SHA3_512, sym::hash_to_u8) => Self::SHA3_512HashToU8,
555            (sym::SHA3_512, sym::hash_to_u16) => Self::SHA3_512HashToU16,
556            (sym::SHA3_512, sym::hash_to_u32) => Self::SHA3_512HashToU32,
557            (sym::SHA3_512, sym::hash_to_u64) => Self::SHA3_512HashToU64,
558            (sym::SHA3_512, sym::hash_to_u128) => Self::SHA3_512HashToU128,
559            (sym::SHA3_512, sym::hash_to_scalar) => Self::SHA3_512HashToScalar,
560
561            (sym::Mapping, sym::get) => Self::MappingGet,
562            (sym::Mapping, sym::get_or_use) => Self::MappingGetOrUse,
563            (sym::Mapping, sym::set) => Self::MappingSet,
564            (sym::Mapping, sym::remove) => Self::MappingRemove,
565            (sym::Mapping, sym::contains) => Self::MappingContains,
566
567            (sym::group, sym::to_x_coordinate) => Self::GroupToXCoordinate,
568            (sym::group, sym::to_y_coordinate) => Self::GroupToYCoordinate,
569
570            (sym::signature, sym::verify) => Self::SignatureVerify,
571            (sym::Future, sym::Await) => Self::FutureAwait,
572
573            (sym::CheatCode, sym::print_mapping) => Self::CheatCodePrintMapping,
574            (sym::CheatCode, sym::set_block_height) => Self::CheatCodeSetBlockHeight,
575            _ => return None,
576        })
577    }
578
579    /// Returns the number of arguments required by the instruction.
580    pub fn num_args(&self) -> usize {
581        match self {
582            Self::BHP256CommitToAddress => 2,
583            Self::BHP256CommitToField => 2,
584            Self::BHP256CommitToGroup => 2,
585
586            Self::BHP256HashToAddress => 1,
587            Self::BHP256HashToField => 1,
588            Self::BHP256HashToGroup => 1,
589            Self::BHP256HashToI8 => 1,
590            Self::BHP256HashToI16 => 1,
591            Self::BHP256HashToI32 => 1,
592            Self::BHP256HashToI64 => 1,
593            Self::BHP256HashToI128 => 1,
594            Self::BHP256HashToU8 => 1,
595            Self::BHP256HashToU16 => 1,
596            Self::BHP256HashToU32 => 1,
597            Self::BHP256HashToU64 => 1,
598            Self::BHP256HashToU128 => 1,
599            Self::BHP256HashToScalar => 1,
600
601            Self::BHP512CommitToAddress => 2,
602            Self::BHP512CommitToField => 2,
603            Self::BHP512CommitToGroup => 2,
604            Self::BHP512HashToAddress => 1,
605            Self::BHP512HashToField => 1,
606            Self::BHP512HashToGroup => 1,
607            Self::BHP512HashToI8 => 1,
608            Self::BHP512HashToI16 => 1,
609            Self::BHP512HashToI32 => 1,
610            Self::BHP512HashToI64 => 1,
611            Self::BHP512HashToI128 => 1,
612            Self::BHP512HashToU8 => 1,
613            Self::BHP512HashToU16 => 1,
614            Self::BHP512HashToU32 => 1,
615            Self::BHP512HashToU64 => 1,
616            Self::BHP512HashToU128 => 1,
617            Self::BHP512HashToScalar => 1,
618
619            Self::BHP768CommitToAddress => 2,
620            Self::BHP768CommitToField => 2,
621            Self::BHP768CommitToGroup => 2,
622            Self::BHP768HashToAddress => 1,
623            Self::BHP768HashToField => 1,
624            Self::BHP768HashToGroup => 1,
625            Self::BHP768HashToI8 => 1,
626            Self::BHP768HashToI16 => 1,
627            Self::BHP768HashToI32 => 1,
628            Self::BHP768HashToI64 => 1,
629            Self::BHP768HashToI128 => 1,
630            Self::BHP768HashToU8 => 1,
631            Self::BHP768HashToU16 => 1,
632            Self::BHP768HashToU32 => 1,
633            Self::BHP768HashToU64 => 1,
634            Self::BHP768HashToU128 => 1,
635            Self::BHP768HashToScalar => 1,
636
637            Self::BHP1024CommitToAddress => 2,
638            Self::BHP1024CommitToField => 2,
639            Self::BHP1024CommitToGroup => 2,
640            Self::BHP1024HashToAddress => 1,
641            Self::BHP1024HashToField => 1,
642            Self::BHP1024HashToGroup => 1,
643            Self::BHP1024HashToI8 => 1,
644            Self::BHP1024HashToI16 => 1,
645            Self::BHP1024HashToI32 => 1,
646            Self::BHP1024HashToI64 => 1,
647            Self::BHP1024HashToI128 => 1,
648            Self::BHP1024HashToU8 => 1,
649            Self::BHP1024HashToU16 => 1,
650            Self::BHP1024HashToU32 => 1,
651            Self::BHP1024HashToU64 => 1,
652            Self::BHP1024HashToU128 => 1,
653            Self::BHP1024HashToScalar => 1,
654
655            Self::ChaChaRandAddress => 0,
656            Self::ChaChaRandBool => 0,
657            Self::ChaChaRandField => 0,
658            Self::ChaChaRandGroup => 0,
659            Self::ChaChaRandI8 => 0,
660            Self::ChaChaRandI16 => 0,
661            Self::ChaChaRandI32 => 0,
662            Self::ChaChaRandI64 => 0,
663            Self::ChaChaRandI128 => 0,
664            Self::ChaChaRandU8 => 0,
665            Self::ChaChaRandU16 => 0,
666            Self::ChaChaRandU32 => 0,
667            Self::ChaChaRandU64 => 0,
668            Self::ChaChaRandU128 => 0,
669            Self::ChaChaRandScalar => 0,
670
671            Self::Keccak256HashToAddress => 1,
672            Self::Keccak256HashToField => 1,
673            Self::Keccak256HashToGroup => 1,
674            Self::Keccak256HashToI8 => 1,
675            Self::Keccak256HashToI16 => 1,
676            Self::Keccak256HashToI32 => 1,
677            Self::Keccak256HashToI64 => 1,
678            Self::Keccak256HashToI128 => 1,
679            Self::Keccak256HashToU8 => 1,
680            Self::Keccak256HashToU16 => 1,
681            Self::Keccak256HashToU32 => 1,
682            Self::Keccak256HashToU64 => 1,
683            Self::Keccak256HashToU128 => 1,
684            Self::Keccak256HashToScalar => 1,
685
686            Self::Keccak384HashToAddress => 1,
687            Self::Keccak384HashToField => 1,
688            Self::Keccak384HashToGroup => 1,
689            Self::Keccak384HashToI8 => 1,
690            Self::Keccak384HashToI16 => 1,
691            Self::Keccak384HashToI32 => 1,
692            Self::Keccak384HashToI64 => 1,
693            Self::Keccak384HashToI128 => 1,
694            Self::Keccak384HashToU8 => 1,
695            Self::Keccak384HashToU16 => 1,
696            Self::Keccak384HashToU32 => 1,
697            Self::Keccak384HashToU64 => 1,
698            Self::Keccak384HashToU128 => 1,
699            Self::Keccak384HashToScalar => 1,
700
701            Self::Keccak512HashToAddress => 1,
702            Self::Keccak512HashToField => 1,
703            Self::Keccak512HashToGroup => 1,
704            Self::Keccak512HashToI8 => 1,
705            Self::Keccak512HashToI16 => 1,
706            Self::Keccak512HashToI32 => 1,
707            Self::Keccak512HashToI64 => 1,
708            Self::Keccak512HashToI128 => 1,
709            Self::Keccak512HashToU8 => 1,
710            Self::Keccak512HashToU16 => 1,
711            Self::Keccak512HashToU32 => 1,
712            Self::Keccak512HashToU64 => 1,
713            Self::Keccak512HashToU128 => 1,
714            Self::Keccak512HashToScalar => 1,
715
716            Self::Pedersen64CommitToAddress => 2,
717            Self::Pedersen64CommitToField => 2,
718            Self::Pedersen64CommitToGroup => 2,
719            Self::Pedersen64HashToAddress => 1,
720            Self::Pedersen64HashToField => 1,
721            Self::Pedersen64HashToGroup => 1,
722            Self::Pedersen64HashToI8 => 1,
723            Self::Pedersen64HashToI16 => 1,
724            Self::Pedersen64HashToI32 => 1,
725            Self::Pedersen64HashToI64 => 1,
726            Self::Pedersen64HashToI128 => 1,
727            Self::Pedersen64HashToU8 => 1,
728            Self::Pedersen64HashToU16 => 1,
729            Self::Pedersen64HashToU32 => 1,
730            Self::Pedersen64HashToU64 => 1,
731            Self::Pedersen64HashToU128 => 1,
732            Self::Pedersen64HashToScalar => 1,
733
734            Self::Pedersen128CommitToAddress => 2,
735            Self::Pedersen128CommitToField => 2,
736            Self::Pedersen128CommitToGroup => 2,
737            Self::Pedersen128HashToAddress => 1,
738            Self::Pedersen128HashToField => 1,
739            Self::Pedersen128HashToGroup => 1,
740            Self::Pedersen128HashToI8 => 1,
741            Self::Pedersen128HashToI16 => 1,
742            Self::Pedersen128HashToI32 => 1,
743            Self::Pedersen128HashToI64 => 1,
744            Self::Pedersen128HashToI128 => 1,
745            Self::Pedersen128HashToU8 => 1,
746            Self::Pedersen128HashToU16 => 1,
747            Self::Pedersen128HashToU32 => 1,
748            Self::Pedersen128HashToU64 => 1,
749            Self::Pedersen128HashToU128 => 1,
750            Self::Pedersen128HashToScalar => 1,
751
752            Self::Poseidon2HashToAddress => 1,
753            Self::Poseidon2HashToField => 1,
754            Self::Poseidon2HashToGroup => 1,
755            Self::Poseidon2HashToI8 => 1,
756            Self::Poseidon2HashToI16 => 1,
757            Self::Poseidon2HashToI32 => 1,
758            Self::Poseidon2HashToI64 => 1,
759            Self::Poseidon2HashToI128 => 1,
760            Self::Poseidon2HashToU8 => 1,
761            Self::Poseidon2HashToU16 => 1,
762            Self::Poseidon2HashToU32 => 1,
763            Self::Poseidon2HashToU64 => 1,
764            Self::Poseidon2HashToU128 => 1,
765            Self::Poseidon2HashToScalar => 1,
766
767            Self::Poseidon4HashToAddress => 1,
768            Self::Poseidon4HashToField => 1,
769            Self::Poseidon4HashToGroup => 1,
770            Self::Poseidon4HashToI8 => 1,
771            Self::Poseidon4HashToI16 => 1,
772            Self::Poseidon4HashToI32 => 1,
773            Self::Poseidon4HashToI64 => 1,
774            Self::Poseidon4HashToI128 => 1,
775            Self::Poseidon4HashToU8 => 1,
776            Self::Poseidon4HashToU16 => 1,
777            Self::Poseidon4HashToU32 => 1,
778            Self::Poseidon4HashToU64 => 1,
779            Self::Poseidon4HashToU128 => 1,
780            Self::Poseidon4HashToScalar => 1,
781
782            Self::Poseidon8HashToAddress => 1,
783            Self::Poseidon8HashToField => 1,
784            Self::Poseidon8HashToGroup => 1,
785            Self::Poseidon8HashToI8 => 1,
786            Self::Poseidon8HashToI16 => 1,
787            Self::Poseidon8HashToI32 => 1,
788            Self::Poseidon8HashToI64 => 1,
789            Self::Poseidon8HashToI128 => 1,
790            Self::Poseidon8HashToU8 => 1,
791            Self::Poseidon8HashToU16 => 1,
792            Self::Poseidon8HashToU32 => 1,
793            Self::Poseidon8HashToU64 => 1,
794            Self::Poseidon8HashToU128 => 1,
795            Self::Poseidon8HashToScalar => 1,
796
797            Self::SHA3_256HashToAddress => 1,
798            Self::SHA3_256HashToField => 1,
799            Self::SHA3_256HashToGroup => 1,
800            Self::SHA3_256HashToI8 => 1,
801            Self::SHA3_256HashToI16 => 1,
802            Self::SHA3_256HashToI32 => 1,
803            Self::SHA3_256HashToI64 => 1,
804            Self::SHA3_256HashToI128 => 1,
805            Self::SHA3_256HashToU8 => 1,
806            Self::SHA3_256HashToU16 => 1,
807            Self::SHA3_256HashToU32 => 1,
808            Self::SHA3_256HashToU64 => 1,
809            Self::SHA3_256HashToU128 => 1,
810            Self::SHA3_256HashToScalar => 1,
811
812            Self::SHA3_384HashToAddress => 1,
813            Self::SHA3_384HashToField => 1,
814            Self::SHA3_384HashToGroup => 1,
815            Self::SHA3_384HashToI8 => 1,
816            Self::SHA3_384HashToI16 => 1,
817            Self::SHA3_384HashToI32 => 1,
818            Self::SHA3_384HashToI64 => 1,
819            Self::SHA3_384HashToI128 => 1,
820            Self::SHA3_384HashToU8 => 1,
821            Self::SHA3_384HashToU16 => 1,
822            Self::SHA3_384HashToU32 => 1,
823            Self::SHA3_384HashToU64 => 1,
824            Self::SHA3_384HashToU128 => 1,
825            Self::SHA3_384HashToScalar => 1,
826
827            Self::SHA3_512HashToAddress => 1,
828            Self::SHA3_512HashToField => 1,
829            Self::SHA3_512HashToGroup => 1,
830            Self::SHA3_512HashToI8 => 1,
831            Self::SHA3_512HashToI16 => 1,
832            Self::SHA3_512HashToI32 => 1,
833            Self::SHA3_512HashToI64 => 1,
834            Self::SHA3_512HashToI128 => 1,
835            Self::SHA3_512HashToU8 => 1,
836            Self::SHA3_512HashToU16 => 1,
837            Self::SHA3_512HashToU32 => 1,
838            Self::SHA3_512HashToU64 => 1,
839            Self::SHA3_512HashToU128 => 1,
840            Self::SHA3_512HashToScalar => 1,
841
842            Self::MappingGet => 2,
843            Self::MappingGetOrUse => 3,
844            Self::MappingSet => 3,
845            Self::MappingRemove => 2,
846            Self::MappingContains => 2,
847
848            Self::GroupToXCoordinate => 1,
849            Self::GroupToYCoordinate => 1,
850
851            Self::SignatureVerify => 3,
852            Self::FutureAwait => 1,
853
854            Self::CheatCodePrintMapping => 1,
855            Self::CheatCodeSetBlockHeight => 1,
856        }
857    }
858
859    /// Returns whether or not this function is finalize command.
860    pub fn is_finalize_command(&self) -> bool {
861        match self {
862            CoreFunction::FutureAwait
863            | CoreFunction::ChaChaRandAddress
864            | CoreFunction::ChaChaRandBool
865            | CoreFunction::ChaChaRandField
866            | CoreFunction::ChaChaRandGroup
867            | CoreFunction::ChaChaRandI8
868            | CoreFunction::ChaChaRandI16
869            | CoreFunction::ChaChaRandI32
870            | CoreFunction::ChaChaRandI64
871            | CoreFunction::ChaChaRandI128
872            | CoreFunction::ChaChaRandU8
873            | CoreFunction::ChaChaRandU16
874            | CoreFunction::ChaChaRandU32
875            | CoreFunction::ChaChaRandU64
876            | CoreFunction::ChaChaRandU128
877            | CoreFunction::MappingGet
878            | CoreFunction::MappingGetOrUse
879            | CoreFunction::ChaChaRandScalar
880            | CoreFunction::MappingSet
881            | CoreFunction::MappingRemove
882            | CoreFunction::MappingContains => true,
883            CoreFunction::BHP256CommitToAddress
884            | CoreFunction::BHP256CommitToField
885            | CoreFunction::BHP256CommitToGroup
886            | CoreFunction::BHP256HashToAddress
887            | CoreFunction::BHP256HashToField
888            | CoreFunction::BHP256HashToGroup
889            | CoreFunction::BHP256HashToI8
890            | CoreFunction::BHP256HashToI16
891            | CoreFunction::BHP256HashToI32
892            | CoreFunction::BHP256HashToI64
893            | CoreFunction::BHP256HashToI128
894            | CoreFunction::BHP256HashToU8
895            | CoreFunction::BHP256HashToU16
896            | CoreFunction::BHP256HashToU32
897            | CoreFunction::BHP256HashToU64
898            | CoreFunction::BHP256HashToU128
899            | CoreFunction::BHP256HashToScalar
900            | CoreFunction::BHP512CommitToAddress
901            | CoreFunction::BHP512CommitToField
902            | CoreFunction::BHP512CommitToGroup
903            | CoreFunction::BHP512HashToAddress
904            | CoreFunction::BHP512HashToField
905            | CoreFunction::BHP512HashToGroup
906            | CoreFunction::BHP512HashToI8
907            | CoreFunction::BHP512HashToI16
908            | CoreFunction::BHP512HashToI32
909            | CoreFunction::BHP512HashToI64
910            | CoreFunction::BHP512HashToI128
911            | CoreFunction::BHP512HashToU8
912            | CoreFunction::BHP512HashToU16
913            | CoreFunction::BHP512HashToU32
914            | CoreFunction::BHP512HashToU64
915            | CoreFunction::BHP512HashToU128
916            | CoreFunction::BHP512HashToScalar
917            | CoreFunction::BHP768CommitToAddress
918            | CoreFunction::BHP768CommitToField
919            | CoreFunction::BHP768CommitToGroup
920            | CoreFunction::BHP768HashToAddress
921            | CoreFunction::BHP768HashToField
922            | CoreFunction::BHP768HashToGroup
923            | CoreFunction::BHP768HashToI8
924            | CoreFunction::BHP768HashToI16
925            | CoreFunction::BHP768HashToI32
926            | CoreFunction::BHP768HashToI64
927            | CoreFunction::BHP768HashToI128
928            | CoreFunction::BHP768HashToU8
929            | CoreFunction::BHP768HashToU16
930            | CoreFunction::BHP768HashToU32
931            | CoreFunction::BHP768HashToU64
932            | CoreFunction::BHP768HashToU128
933            | CoreFunction::BHP768HashToScalar
934            | CoreFunction::BHP1024CommitToAddress
935            | CoreFunction::BHP1024CommitToField
936            | CoreFunction::BHP1024CommitToGroup
937            | CoreFunction::BHP1024HashToAddress
938            | CoreFunction::BHP1024HashToField
939            | CoreFunction::BHP1024HashToGroup
940            | CoreFunction::BHP1024HashToI8
941            | CoreFunction::BHP1024HashToI16
942            | CoreFunction::BHP1024HashToI32
943            | CoreFunction::BHP1024HashToI64
944            | CoreFunction::BHP1024HashToI128
945            | CoreFunction::BHP1024HashToU8
946            | CoreFunction::BHP1024HashToU16
947            | CoreFunction::BHP1024HashToU32
948            | CoreFunction::BHP1024HashToU64
949            | CoreFunction::BHP1024HashToU128
950            | CoreFunction::BHP1024HashToScalar
951            | CoreFunction::Keccak256HashToAddress
952            | CoreFunction::Keccak256HashToField
953            | CoreFunction::Keccak256HashToGroup
954            | CoreFunction::Keccak256HashToI8
955            | CoreFunction::Keccak256HashToI16
956            | CoreFunction::Keccak256HashToI32
957            | CoreFunction::Keccak256HashToI64
958            | CoreFunction::Keccak256HashToI128
959            | CoreFunction::Keccak256HashToU8
960            | CoreFunction::Keccak256HashToU16
961            | CoreFunction::Keccak256HashToU32
962            | CoreFunction::Keccak256HashToU64
963            | CoreFunction::Keccak256HashToU128
964            | CoreFunction::Keccak256HashToScalar
965            | CoreFunction::Keccak384HashToAddress
966            | CoreFunction::Keccak384HashToField
967            | CoreFunction::Keccak384HashToGroup
968            | CoreFunction::Keccak384HashToI8
969            | CoreFunction::Keccak384HashToI16
970            | CoreFunction::Keccak384HashToI32
971            | CoreFunction::Keccak384HashToI64
972            | CoreFunction::Keccak384HashToI128
973            | CoreFunction::Keccak384HashToU8
974            | CoreFunction::Keccak384HashToU16
975            | CoreFunction::Keccak384HashToU32
976            | CoreFunction::Keccak384HashToU64
977            | CoreFunction::Keccak384HashToU128
978            | CoreFunction::Keccak384HashToScalar
979            | CoreFunction::Keccak512HashToAddress
980            | CoreFunction::Keccak512HashToField
981            | CoreFunction::Keccak512HashToGroup
982            | CoreFunction::Keccak512HashToI8
983            | CoreFunction::Keccak512HashToI16
984            | CoreFunction::Keccak512HashToI32
985            | CoreFunction::Keccak512HashToI64
986            | CoreFunction::Keccak512HashToI128
987            | CoreFunction::Keccak512HashToU8
988            | CoreFunction::Keccak512HashToU16
989            | CoreFunction::Keccak512HashToU32
990            | CoreFunction::Keccak512HashToU64
991            | CoreFunction::Keccak512HashToU128
992            | CoreFunction::Keccak512HashToScalar
993            | CoreFunction::Pedersen64CommitToAddress
994            | CoreFunction::Pedersen64CommitToField
995            | CoreFunction::Pedersen64CommitToGroup
996            | CoreFunction::Pedersen64HashToAddress
997            | CoreFunction::Pedersen64HashToField
998            | CoreFunction::Pedersen64HashToGroup
999            | CoreFunction::Pedersen64HashToI8
1000            | CoreFunction::Pedersen64HashToI16
1001            | CoreFunction::Pedersen64HashToI32
1002            | CoreFunction::Pedersen64HashToI64
1003            | CoreFunction::Pedersen64HashToI128
1004            | CoreFunction::Pedersen64HashToU8
1005            | CoreFunction::Pedersen64HashToU16
1006            | CoreFunction::Pedersen64HashToU32
1007            | CoreFunction::Pedersen64HashToU64
1008            | CoreFunction::Pedersen64HashToU128
1009            | CoreFunction::Pedersen64HashToScalar
1010            | CoreFunction::Pedersen128CommitToAddress
1011            | CoreFunction::Pedersen128CommitToField
1012            | CoreFunction::Pedersen128CommitToGroup
1013            | CoreFunction::Pedersen128HashToAddress
1014            | CoreFunction::Pedersen128HashToField
1015            | CoreFunction::Pedersen128HashToGroup
1016            | CoreFunction::Pedersen128HashToI8
1017            | CoreFunction::Pedersen128HashToI16
1018            | CoreFunction::Pedersen128HashToI32
1019            | CoreFunction::Pedersen128HashToI64
1020            | CoreFunction::Pedersen128HashToI128
1021            | CoreFunction::Pedersen128HashToU8
1022            | CoreFunction::Pedersen128HashToU16
1023            | CoreFunction::Pedersen128HashToU32
1024            | CoreFunction::Pedersen128HashToU64
1025            | CoreFunction::Pedersen128HashToU128
1026            | CoreFunction::Pedersen128HashToScalar
1027            | CoreFunction::Poseidon2HashToAddress
1028            | CoreFunction::Poseidon2HashToField
1029            | CoreFunction::Poseidon2HashToGroup
1030            | CoreFunction::Poseidon2HashToI8
1031            | CoreFunction::Poseidon2HashToI16
1032            | CoreFunction::Poseidon2HashToI32
1033            | CoreFunction::Poseidon2HashToI64
1034            | CoreFunction::Poseidon2HashToI128
1035            | CoreFunction::Poseidon2HashToU8
1036            | CoreFunction::Poseidon2HashToU16
1037            | CoreFunction::Poseidon2HashToU32
1038            | CoreFunction::Poseidon2HashToU64
1039            | CoreFunction::Poseidon2HashToU128
1040            | CoreFunction::Poseidon2HashToScalar
1041            | CoreFunction::Poseidon4HashToAddress
1042            | CoreFunction::Poseidon4HashToField
1043            | CoreFunction::Poseidon4HashToGroup
1044            | CoreFunction::Poseidon4HashToI8
1045            | CoreFunction::Poseidon4HashToI16
1046            | CoreFunction::Poseidon4HashToI32
1047            | CoreFunction::Poseidon4HashToI64
1048            | CoreFunction::Poseidon4HashToI128
1049            | CoreFunction::Poseidon4HashToU8
1050            | CoreFunction::Poseidon4HashToU16
1051            | CoreFunction::Poseidon4HashToU32
1052            | CoreFunction::Poseidon4HashToU64
1053            | CoreFunction::Poseidon4HashToU128
1054            | CoreFunction::Poseidon4HashToScalar
1055            | CoreFunction::Poseidon8HashToAddress
1056            | CoreFunction::Poseidon8HashToField
1057            | CoreFunction::Poseidon8HashToGroup
1058            | CoreFunction::Poseidon8HashToI8
1059            | CoreFunction::Poseidon8HashToI16
1060            | CoreFunction::Poseidon8HashToI32
1061            | CoreFunction::Poseidon8HashToI64
1062            | CoreFunction::Poseidon8HashToI128
1063            | CoreFunction::Poseidon8HashToU8
1064            | CoreFunction::Poseidon8HashToU16
1065            | CoreFunction::Poseidon8HashToU32
1066            | CoreFunction::Poseidon8HashToU64
1067            | CoreFunction::Poseidon8HashToU128
1068            | CoreFunction::Poseidon8HashToScalar
1069            | CoreFunction::SHA3_256HashToAddress
1070            | CoreFunction::SHA3_256HashToField
1071            | CoreFunction::SHA3_256HashToGroup
1072            | CoreFunction::SHA3_256HashToI8
1073            | CoreFunction::SHA3_256HashToI16
1074            | CoreFunction::SHA3_256HashToI32
1075            | CoreFunction::SHA3_256HashToI64
1076            | CoreFunction::SHA3_256HashToI128
1077            | CoreFunction::SHA3_256HashToU8
1078            | CoreFunction::SHA3_256HashToU16
1079            | CoreFunction::SHA3_256HashToU32
1080            | CoreFunction::SHA3_256HashToU64
1081            | CoreFunction::SHA3_256HashToU128
1082            | CoreFunction::SHA3_256HashToScalar
1083            | CoreFunction::SHA3_384HashToAddress
1084            | CoreFunction::SHA3_384HashToField
1085            | CoreFunction::SHA3_384HashToGroup
1086            | CoreFunction::SHA3_384HashToI8
1087            | CoreFunction::SHA3_384HashToI16
1088            | CoreFunction::SHA3_384HashToI32
1089            | CoreFunction::SHA3_384HashToI64
1090            | CoreFunction::SHA3_384HashToI128
1091            | CoreFunction::SHA3_384HashToU8
1092            | CoreFunction::SHA3_384HashToU16
1093            | CoreFunction::SHA3_384HashToU32
1094            | CoreFunction::SHA3_384HashToU64
1095            | CoreFunction::SHA3_384HashToU128
1096            | CoreFunction::SHA3_384HashToScalar
1097            | CoreFunction::SHA3_512HashToAddress
1098            | CoreFunction::SHA3_512HashToField
1099            | CoreFunction::SHA3_512HashToGroup
1100            | CoreFunction::SHA3_512HashToI8
1101            | CoreFunction::SHA3_512HashToI16
1102            | CoreFunction::SHA3_512HashToI32
1103            | CoreFunction::SHA3_512HashToI64
1104            | CoreFunction::SHA3_512HashToI128
1105            | CoreFunction::SHA3_512HashToU8
1106            | CoreFunction::SHA3_512HashToU16
1107            | CoreFunction::SHA3_512HashToU32
1108            | CoreFunction::SHA3_512HashToU64
1109            | CoreFunction::SHA3_512HashToU128
1110            | CoreFunction::SHA3_512HashToScalar
1111            | CoreFunction::GroupToXCoordinate
1112            | CoreFunction::GroupToYCoordinate
1113            | CoreFunction::SignatureVerify
1114            | CoreFunction::CheatCodePrintMapping
1115            | CoreFunction::CheatCodeSetBlockHeight => false,
1116        }
1117    }
1118}