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