1use crate::pallas_codec::flat::de;
2use crate::uplc::ast::Term;
3use alloc::{
4 rc::Rc,
5 str::FromStr,
6 string::{String, ToString},
7};
8use core::fmt::Display;
9use strum_macros::EnumIter;
10
11#[repr(u8)]
13#[allow(non_camel_case_types)]
14#[derive(
15 Debug,
16 Clone,
17 PartialEq,
18 Eq,
19 Copy,
20 EnumIter,
21 serde::Serialize,
22 serde::Deserialize,
23 Hash,
24 PartialOrd,
25 Ord,
26)]
27pub enum DefaultFunction {
28 AddInteger = 0,
30 SubtractInteger = 1,
31 MultiplyInteger = 2,
32 DivideInteger = 3,
33 QuotientInteger = 4,
34 RemainderInteger = 5,
35 ModInteger = 6,
36 EqualsInteger = 7,
37 LessThanInteger = 8,
38 LessThanEqualsInteger = 9,
39 AppendByteString = 10,
41 ConsByteString = 11,
42 SliceByteString = 12,
43 LengthOfByteString = 13,
44 IndexByteString = 14,
45 EqualsByteString = 15,
46 LessThanByteString = 16,
47 LessThanEqualsByteString = 17,
48 Sha2_256 = 18,
50 Sha3_256 = 19,
51 Blake2b_256 = 20,
52 Keccak_256 = 71,
53 Blake2b_224 = 72,
54 VerifyEd25519Signature = 21,
55 VerifyEcdsaSecp256k1Signature = 52,
56 VerifySchnorrSecp256k1Signature = 53,
57 AppendString = 22,
59 EqualsString = 23,
60 EncodeUtf8 = 24,
61 DecodeUtf8 = 25,
62 IfThenElse = 26,
64 ChooseUnit = 27,
66 Trace = 28,
68 FstPair = 29,
70 SndPair = 30,
71 ChooseList = 31,
73 MkCons = 32,
74 HeadList = 33,
75 TailList = 34,
76 NullList = 35,
77 ChooseData = 36,
82 ConstrData = 37,
83 MapData = 38,
84 ListData = 39,
85 IData = 40,
86 BData = 41,
87 UnConstrData = 42,
88 UnMapData = 43,
89 UnListData = 44,
90 UnIData = 45,
91 UnBData = 46,
92 EqualsData = 47,
93 SerialiseData = 51,
94 MkPairData = 48,
99 MkNilData = 49,
100 MkNilPairData = 50,
101
102 Bls12_381_G1_Add = 54,
104 Bls12_381_G1_Neg = 55,
105 Bls12_381_G1_ScalarMul = 56,
106 Bls12_381_G1_Equal = 57,
107 Bls12_381_G1_Compress = 58,
108 Bls12_381_G1_Uncompress = 59,
109 Bls12_381_G1_HashToGroup = 60,
110 Bls12_381_G2_Add = 61,
111 Bls12_381_G2_Neg = 62,
112 Bls12_381_G2_ScalarMul = 63,
113 Bls12_381_G2_Equal = 64,
114 Bls12_381_G2_Compress = 65,
115 Bls12_381_G2_Uncompress = 66,
116 Bls12_381_G2_HashToGroup = 67,
117 Bls12_381_MillerLoop = 68,
118 Bls12_381_MulMlResult = 69,
119 Bls12_381_FinalVerify = 70,
120
121 IntegerToByteString = 73,
123 ByteStringToInteger = 74,
124 AndByteString = 75,
126 OrByteString = 76,
127 XorByteString = 77,
128 ComplementByteString = 78,
129 ReadBit = 79,
130 WriteBits = 80,
131 ReplicateByte = 81,
132 ShiftByteString = 82,
134 RotateByteString = 83,
135 CountSetBits = 84,
136 FindFirstSetBit = 85,
137 Ripemd_160 = 86,
139 }
144
145impl TryFrom<u8> for DefaultFunction {
146 type Error = de::Error;
147
148 fn try_from(v: u8) -> Result<Self, Self::Error> {
149 match v {
150 v if v == DefaultFunction::AddInteger as u8 => Ok(DefaultFunction::AddInteger),
151 v if v == DefaultFunction::SubtractInteger as u8 => {
152 Ok(DefaultFunction::SubtractInteger)
153 }
154 v if v == DefaultFunction::MultiplyInteger as u8 => {
155 Ok(DefaultFunction::MultiplyInteger)
156 }
157 v if v == DefaultFunction::DivideInteger as u8 => Ok(DefaultFunction::DivideInteger),
158 v if v == DefaultFunction::QuotientInteger as u8 => {
159 Ok(DefaultFunction::QuotientInteger)
160 }
161 v if v == DefaultFunction::RemainderInteger as u8 => {
162 Ok(DefaultFunction::RemainderInteger)
163 }
164 v if v == DefaultFunction::ModInteger as u8 => Ok(DefaultFunction::ModInteger),
165 v if v == DefaultFunction::EqualsInteger as u8 => Ok(DefaultFunction::EqualsInteger),
166 v if v == DefaultFunction::LessThanInteger as u8 => {
167 Ok(DefaultFunction::LessThanInteger)
168 }
169 v if v == DefaultFunction::LessThanEqualsInteger as u8 => {
170 Ok(DefaultFunction::LessThanEqualsInteger)
171 }
172 v if v == DefaultFunction::AppendByteString as u8 => {
174 Ok(DefaultFunction::AppendByteString)
175 }
176 v if v == DefaultFunction::ConsByteString as u8 => Ok(DefaultFunction::ConsByteString),
177 v if v == DefaultFunction::SliceByteString as u8 => {
178 Ok(DefaultFunction::SliceByteString)
179 }
180 v if v == DefaultFunction::LengthOfByteString as u8 => {
181 Ok(DefaultFunction::LengthOfByteString)
182 }
183 v if v == DefaultFunction::IndexByteString as u8 => {
184 Ok(DefaultFunction::IndexByteString)
185 }
186 v if v == DefaultFunction::EqualsByteString as u8 => {
187 Ok(DefaultFunction::EqualsByteString)
188 }
189 v if v == DefaultFunction::LessThanByteString as u8 => {
190 Ok(DefaultFunction::LessThanByteString)
191 }
192 v if v == DefaultFunction::LessThanEqualsByteString as u8 => {
193 Ok(DefaultFunction::LessThanEqualsByteString)
194 }
195 v if v == DefaultFunction::Sha2_256 as u8 => Ok(DefaultFunction::Sha2_256),
197 v if v == DefaultFunction::Sha3_256 as u8 => Ok(DefaultFunction::Sha3_256),
198 v if v == DefaultFunction::Blake2b_256 as u8 => Ok(DefaultFunction::Blake2b_256),
199 v if v == DefaultFunction::Blake2b_224 as u8 => Ok(DefaultFunction::Blake2b_224),
200 v if v == DefaultFunction::Keccak_256 as u8 => Ok(DefaultFunction::Keccak_256),
201 v if v == DefaultFunction::VerifyEd25519Signature as u8 => {
202 Ok(DefaultFunction::VerifyEd25519Signature)
203 }
204 v if v == DefaultFunction::VerifyEcdsaSecp256k1Signature as u8 => {
205 Ok(DefaultFunction::VerifyEcdsaSecp256k1Signature)
206 }
207 v if v == DefaultFunction::VerifySchnorrSecp256k1Signature as u8 => {
208 Ok(DefaultFunction::VerifySchnorrSecp256k1Signature)
209 }
210 v if v == DefaultFunction::AppendString as u8 => Ok(DefaultFunction::AppendString),
212 v if v == DefaultFunction::EqualsString as u8 => Ok(DefaultFunction::EqualsString),
213 v if v == DefaultFunction::EncodeUtf8 as u8 => Ok(DefaultFunction::EncodeUtf8),
214 v if v == DefaultFunction::DecodeUtf8 as u8 => Ok(DefaultFunction::DecodeUtf8),
215 v if v == DefaultFunction::IfThenElse as u8 => Ok(DefaultFunction::IfThenElse),
217 v if v == DefaultFunction::ChooseUnit as u8 => Ok(DefaultFunction::ChooseUnit),
219 v if v == DefaultFunction::Trace as u8 => Ok(DefaultFunction::Trace),
221 v if v == DefaultFunction::FstPair as u8 => Ok(DefaultFunction::FstPair),
223 v if v == DefaultFunction::SndPair as u8 => Ok(DefaultFunction::SndPair),
224 v if v == DefaultFunction::ChooseList as u8 => Ok(DefaultFunction::ChooseList),
226 v if v == DefaultFunction::MkCons as u8 => Ok(DefaultFunction::MkCons),
227 v if v == DefaultFunction::HeadList as u8 => Ok(DefaultFunction::HeadList),
228 v if v == DefaultFunction::TailList as u8 => Ok(DefaultFunction::TailList),
229 v if v == DefaultFunction::NullList as u8 => Ok(DefaultFunction::NullList),
230 v if v == DefaultFunction::ChooseData as u8 => Ok(DefaultFunction::ChooseData),
235 v if v == DefaultFunction::ConstrData as u8 => Ok(DefaultFunction::ConstrData),
236 v if v == DefaultFunction::MapData as u8 => Ok(DefaultFunction::MapData),
237 v if v == DefaultFunction::ListData as u8 => Ok(DefaultFunction::ListData),
238 v if v == DefaultFunction::IData as u8 => Ok(DefaultFunction::IData),
239 v if v == DefaultFunction::BData as u8 => Ok(DefaultFunction::BData),
240 v if v == DefaultFunction::UnConstrData as u8 => Ok(DefaultFunction::UnConstrData),
241 v if v == DefaultFunction::UnMapData as u8 => Ok(DefaultFunction::UnMapData),
242 v if v == DefaultFunction::UnListData as u8 => Ok(DefaultFunction::UnListData),
243 v if v == DefaultFunction::UnIData as u8 => Ok(DefaultFunction::UnIData),
244 v if v == DefaultFunction::UnBData as u8 => Ok(DefaultFunction::UnBData),
245 v if v == DefaultFunction::EqualsData as u8 => Ok(DefaultFunction::EqualsData),
246 v if v == DefaultFunction::SerialiseData as u8 => Ok(DefaultFunction::SerialiseData),
247 v if v == DefaultFunction::MkPairData as u8 => Ok(DefaultFunction::MkPairData),
252 v if v == DefaultFunction::MkNilData as u8 => Ok(DefaultFunction::MkNilData),
253 v if v == DefaultFunction::MkNilPairData as u8 => Ok(DefaultFunction::MkNilPairData),
254 v if v == DefaultFunction::Bls12_381_G1_Add as u8 => {
255 Ok(DefaultFunction::Bls12_381_G1_Add)
256 }
257 v if v == DefaultFunction::Bls12_381_G1_Neg as u8 => {
258 Ok(DefaultFunction::Bls12_381_G1_Neg)
259 }
260 v if v == DefaultFunction::Bls12_381_G1_ScalarMul as u8 => {
261 Ok(DefaultFunction::Bls12_381_G1_ScalarMul)
262 }
263 v if v == DefaultFunction::Bls12_381_G1_Equal as u8 => {
264 Ok(DefaultFunction::Bls12_381_G1_Equal)
265 }
266 v if v == DefaultFunction::Bls12_381_G1_Compress as u8 => {
267 Ok(DefaultFunction::Bls12_381_G1_Compress)
268 }
269 v if v == DefaultFunction::Bls12_381_G1_Uncompress as u8 => {
270 Ok(DefaultFunction::Bls12_381_G1_Uncompress)
271 }
272 v if v == DefaultFunction::Bls12_381_G1_HashToGroup as u8 => {
273 Ok(DefaultFunction::Bls12_381_G1_HashToGroup)
274 }
275 v if v == DefaultFunction::Bls12_381_G2_Add as u8 => {
276 Ok(DefaultFunction::Bls12_381_G2_Add)
277 }
278 v if v == DefaultFunction::Bls12_381_G2_Neg as u8 => {
279 Ok(DefaultFunction::Bls12_381_G2_Neg)
280 }
281 v if v == DefaultFunction::Bls12_381_G2_ScalarMul as u8 => {
282 Ok(DefaultFunction::Bls12_381_G2_ScalarMul)
283 }
284 v if v == DefaultFunction::Bls12_381_G2_Equal as u8 => {
285 Ok(DefaultFunction::Bls12_381_G2_Equal)
286 }
287 v if v == DefaultFunction::Bls12_381_G2_Compress as u8 => {
288 Ok(DefaultFunction::Bls12_381_G2_Compress)
289 }
290 v if v == DefaultFunction::Bls12_381_G2_Uncompress as u8 => {
291 Ok(DefaultFunction::Bls12_381_G2_Uncompress)
292 }
293 v if v == DefaultFunction::Bls12_381_G2_HashToGroup as u8 => {
294 Ok(DefaultFunction::Bls12_381_G2_HashToGroup)
295 }
296 v if v == DefaultFunction::Bls12_381_MillerLoop as u8 => {
297 Ok(DefaultFunction::Bls12_381_MillerLoop)
298 }
299 v if v == DefaultFunction::Bls12_381_MulMlResult as u8 => {
300 Ok(DefaultFunction::Bls12_381_MulMlResult)
301 }
302 v if v == DefaultFunction::Bls12_381_FinalVerify as u8 => {
303 Ok(DefaultFunction::Bls12_381_FinalVerify)
304 }
305
306 v if v == DefaultFunction::IntegerToByteString as u8 => {
308 Ok(DefaultFunction::IntegerToByteString)
309 }
310 v if v == DefaultFunction::ByteStringToInteger as u8 => {
311 Ok(DefaultFunction::ByteStringToInteger)
312 }
313 v if v == DefaultFunction::AndByteString as u8 => Ok(DefaultFunction::AndByteString),
314 v if v == DefaultFunction::OrByteString as u8 => Ok(DefaultFunction::OrByteString),
315 v if v == DefaultFunction::XorByteString as u8 => Ok(DefaultFunction::XorByteString),
316 v if v == DefaultFunction::ComplementByteString as u8 => {
317 Ok(DefaultFunction::ComplementByteString)
318 }
319 v if v == DefaultFunction::ReadBit as u8 => Ok(DefaultFunction::ReadBit),
320 v if v == DefaultFunction::WriteBits as u8 => Ok(DefaultFunction::WriteBits),
321 v if v == DefaultFunction::ReplicateByte as u8 => Ok(DefaultFunction::ReplicateByte),
322 v if v == DefaultFunction::ShiftByteString as u8 => {
323 Ok(DefaultFunction::ShiftByteString)
324 }
325 v if v == DefaultFunction::RotateByteString as u8 => {
326 Ok(DefaultFunction::RotateByteString)
327 }
328 v if v == DefaultFunction::CountSetBits as u8 => Ok(DefaultFunction::CountSetBits),
329 v if v == DefaultFunction::FindFirstSetBit as u8 => {
330 Ok(DefaultFunction::FindFirstSetBit)
331 }
332 v if v == DefaultFunction::Ripemd_160 as u8 => Ok(DefaultFunction::Ripemd_160),
333 _ => Err(de::Error::Message(format!(
334 "Default Function not found - {v}"
335 ))),
336 }
337 }
338}
339
340impl FromStr for DefaultFunction {
341 type Err = String;
342
343 fn from_str(s: &str) -> Result<Self, Self::Err> {
344 use DefaultFunction::*;
345
346 match s {
347 "addInteger" => Ok(AddInteger),
348 "subtractInteger" => Ok(SubtractInteger),
349 "multiplyInteger" => Ok(MultiplyInteger),
350 "divideInteger" => Ok(DivideInteger),
351 "quotientInteger" => Ok(QuotientInteger),
352 "remainderInteger" => Ok(RemainderInteger),
353 "modInteger" => Ok(ModInteger),
354 "equalsInteger" => Ok(EqualsInteger),
355 "lessThanInteger" => Ok(LessThanInteger),
356 "lessThanEqualsInteger" => Ok(LessThanEqualsInteger),
357 "appendByteString" => Ok(AppendByteString),
358 "consByteString" => Ok(ConsByteString),
359 "sliceByteString" => Ok(SliceByteString),
360 "lengthOfByteString" => Ok(LengthOfByteString),
361 "indexByteString" => Ok(IndexByteString),
362 "equalsByteString" => Ok(EqualsByteString),
363 "lessThanByteString" => Ok(LessThanByteString),
364 "lessThanEqualsByteString" => Ok(LessThanEqualsByteString),
365 "sha2_256" => Ok(Sha2_256),
366 "sha3_256" => Ok(Sha3_256),
367 "blake2b_256" => Ok(Blake2b_256),
368 "keccak_256" => Ok(Keccak_256),
369 "blake2b_224" => Ok(Blake2b_224),
370 "verifyEd25519Signature" => Ok(VerifyEd25519Signature),
371 "verifyEcdsaSecp256k1Signature" => Ok(VerifyEcdsaSecp256k1Signature),
372 "verifySchnorrSecp256k1Signature" => Ok(VerifySchnorrSecp256k1Signature),
373 "appendString" => Ok(AppendString),
374 "equalsString" => Ok(EqualsString),
375 "encodeUtf8" => Ok(EncodeUtf8),
376 "decodeUtf8" => Ok(DecodeUtf8),
377 "ifThenElse" => Ok(IfThenElse),
378 "chooseUnit" => Ok(ChooseUnit),
379 "trace" => Ok(Trace),
380 "fstPair" => Ok(FstPair),
381 "sndPair" => Ok(SndPair),
382 "chooseList" => Ok(ChooseList),
383 "mkCons" => Ok(MkCons),
384 "headList" => Ok(HeadList),
385 "tailList" => Ok(TailList),
386 "nullList" => Ok(NullList),
387 "chooseData" => Ok(ChooseData),
388 "constrData" => Ok(ConstrData),
389 "mapData" => Ok(MapData),
390 "listData" => Ok(ListData),
391 "iData" => Ok(IData),
392 "bData" => Ok(BData),
393 "unConstrData" => Ok(UnConstrData),
394 "unMapData" => Ok(UnMapData),
395 "unListData" => Ok(UnListData),
396 "unIData" => Ok(UnIData),
397 "unBData" => Ok(UnBData),
398 "equalsData" => Ok(EqualsData),
399 "serialiseData" => Ok(SerialiseData),
400 "mkPairData" => Ok(MkPairData),
401 "mkNilData" => Ok(MkNilData),
402 "mkNilPairData" => Ok(MkNilPairData),
403 "bls12_381_G1_add" => Ok(Bls12_381_G1_Add),
404 "bls12_381_G1_neg" => Ok(Bls12_381_G1_Neg),
405 "bls12_381_G1_scalarMul" => Ok(Bls12_381_G1_ScalarMul),
406 "bls12_381_G1_equal" => Ok(Bls12_381_G1_Equal),
407 "bls12_381_G1_compress" => Ok(Bls12_381_G1_Compress),
408 "bls12_381_G1_uncompress" => Ok(Bls12_381_G1_Uncompress),
409 "bls12_381_G1_hashToGroup" => Ok(Bls12_381_G1_HashToGroup),
410 "bls12_381_G2_add" => Ok(Bls12_381_G2_Add),
411 "bls12_381_G2_neg" => Ok(Bls12_381_G2_Neg),
412 "bls12_381_G2_scalarMul" => Ok(Bls12_381_G2_ScalarMul),
413 "bls12_381_G2_equal" => Ok(Bls12_381_G2_Equal),
414 "bls12_381_G2_compress" => Ok(Bls12_381_G2_Compress),
415 "bls12_381_G2_uncompress" => Ok(Bls12_381_G2_Uncompress),
416 "bls12_381_G2_hashToGroup" => Ok(Bls12_381_G2_HashToGroup),
417 "bls12_381_millerLoop" => Ok(Bls12_381_MillerLoop),
418 "bls12_381_mulMlResult" => Ok(Bls12_381_MulMlResult),
419 "bls12_381_finalVerify" => Ok(Bls12_381_FinalVerify),
420 "integerToByteString" => Ok(IntegerToByteString),
421 "byteStringToInteger" => Ok(ByteStringToInteger),
422 "andByteString" => Ok(AndByteString),
423 "orByteString" => Ok(OrByteString),
424 "xorByteString" => Ok(XorByteString),
425 "complementByteString" => Ok(ComplementByteString),
426 "readBit" => Ok(ReadBit),
427 "writeBits" => Ok(WriteBits),
428 "replicateByte" => Ok(ReplicateByte),
429 "shiftByteString" => Ok(ShiftByteString),
430 "rotateByteString" => Ok(RotateByteString),
431 "countSetBits" => Ok(CountSetBits),
432 "findFirstSetBit" => Ok(FindFirstSetBit),
433 "ripemd_160" => Ok(Ripemd_160),
434 rest => Err(format!("Default Function not found - {rest}")),
438 }
439 }
440}
441
442impl Display for DefaultFunction {
443 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
444 use DefaultFunction::*;
445
446 match self {
447 AddInteger => write!(f, "addInteger"),
448 SubtractInteger => write!(f, "subtractInteger"),
449 MultiplyInteger => write!(f, "multiplyInteger"),
450 DivideInteger => write!(f, "divideInteger"),
451 QuotientInteger => write!(f, "quotientInteger"),
452 RemainderInteger => write!(f, "remainderInteger"),
453 ModInteger => write!(f, "modInteger"),
454 EqualsInteger => write!(f, "equalsInteger"),
455 LessThanInteger => write!(f, "lessThanInteger"),
456 LessThanEqualsInteger => write!(f, "lessThanEqualsInteger"),
457 AppendByteString => write!(f, "appendByteString"),
458 ConsByteString => write!(f, "consByteString"),
459 SliceByteString => write!(f, "sliceByteString"),
460 LengthOfByteString => write!(f, "lengthOfByteString"),
461 IndexByteString => write!(f, "indexByteString"),
462 EqualsByteString => write!(f, "equalsByteString"),
463 LessThanByteString => write!(f, "lessThanByteString"),
464 LessThanEqualsByteString => write!(f, "lessThanEqualsByteString"),
465 Sha2_256 => write!(f, "sha2_256"),
466 Sha3_256 => write!(f, "sha3_256"),
467 Blake2b_256 => write!(f, "blake2b_256"),
468 Keccak_256 => write!(f, "keccak_256"),
469 Blake2b_224 => write!(f, "blake2b_224"),
470 VerifyEd25519Signature => write!(f, "verifySignature"),
471 VerifyEcdsaSecp256k1Signature => write!(f, "verifyEcdsaSecp256k1Signature"),
472 VerifySchnorrSecp256k1Signature => write!(f, "verifySchnorrSecp256k1Signature"),
473 AppendString => write!(f, "appendString"),
474 EqualsString => write!(f, "equalsString"),
475 EncodeUtf8 => write!(f, "encodeUtf8"),
476 DecodeUtf8 => write!(f, "decodeUtf8"),
477 IfThenElse => write!(f, "ifThenElse"),
478 ChooseUnit => write!(f, "chooseUnit"),
479 Trace => write!(f, "trace"),
480 FstPair => write!(f, "fstPair"),
481 SndPair => write!(f, "sndPair"),
482 ChooseList => write!(f, "chooseList"),
483 MkCons => write!(f, "mkCons"),
484 HeadList => write!(f, "headList"),
485 TailList => write!(f, "tailList"),
486 NullList => write!(f, "nullList"),
487 ChooseData => write!(f, "chooseData"),
488 ConstrData => write!(f, "constrData"),
489 MapData => write!(f, "mapData"),
490 ListData => write!(f, "listData"),
491 IData => write!(f, "iData"),
492 BData => write!(f, "bData"),
493 UnConstrData => write!(f, "unConstrData"),
494 UnMapData => write!(f, "unMapData"),
495 UnListData => write!(f, "unListData"),
496 UnIData => write!(f, "unIData"),
497 UnBData => write!(f, "unBData"),
498 EqualsData => write!(f, "equalsData"),
499 SerialiseData => write!(f, "serialiseData"),
500 MkPairData => write!(f, "mkPairData"),
501 MkNilData => write!(f, "mkNilData"),
502 MkNilPairData => write!(f, "mkNilPairData"),
503 Bls12_381_G1_Add => write!(f, "bls12_381_G1_add"),
504 Bls12_381_G1_Neg => write!(f, "bls12_381_G1_neg"),
505 Bls12_381_G1_ScalarMul => write!(f, "bls12_381_G1_scalarMul"),
506 Bls12_381_G1_Equal => write!(f, "bls12_381_G1_equal"),
507 Bls12_381_G1_Compress => write!(f, "bls12_381_G1_compress"),
508 Bls12_381_G1_Uncompress => write!(f, "bls12_381_G1_uncompress"),
509 Bls12_381_G1_HashToGroup => write!(f, "bls12_381_G1_hashToGroup"),
510 Bls12_381_G2_Add => write!(f, "bls12_381_G2_add"),
511 Bls12_381_G2_Neg => write!(f, "bls12_381_G2_neg"),
512 Bls12_381_G2_ScalarMul => write!(f, "bls12_381_G2_scalarMul"),
513 Bls12_381_G2_Equal => write!(f, "bls12_381_G2_equal"),
514 Bls12_381_G2_Compress => write!(f, "bls12_381_G2_compress"),
515 Bls12_381_G2_Uncompress => write!(f, "bls12_381_G2_uncompress"),
516 Bls12_381_G2_HashToGroup => write!(f, "bls12_381_G2_hashToGroup"),
517 Bls12_381_MillerLoop => write!(f, "bls12_381_millerLoop"),
518 Bls12_381_MulMlResult => write!(f, "bls12_381_mulMlResult"),
519 Bls12_381_FinalVerify => write!(f, "bls12_381_finalVerify"),
520 IntegerToByteString => write!(f, "integerToByteString"),
521 ByteStringToInteger => write!(f, "byteStringToInteger"),
522 AndByteString => write!(f, "andByteString"),
523 OrByteString => write!(f, "orByteString"),
524 XorByteString => write!(f, "xorByteString"),
525 ComplementByteString => write!(f, "complementByteString"),
526 ReadBit => write!(f, "readBit"),
527 WriteBits => write!(f, "writeBits"),
528 ReplicateByte => write!(f, "replicateByte"),
529 ShiftByteString => write!(f, "shiftByteString"),
530 RotateByteString => write!(f, "rotateByteString"),
531 CountSetBits => write!(f, "countSetBits"),
532 FindFirstSetBit => write!(f, "findFirstSetBit"),
533 Ripemd_160 => write!(f, "ripemd_160"),
534 }
538 }
539}
540
541impl DefaultFunction {
542 pub fn aiken_name(&self) -> String {
543 use DefaultFunction::*;
544
545 match self {
546 AddInteger => "add_integer",
547 SubtractInteger => "subtract_integer",
548 MultiplyInteger => "multiply_integer",
549 DivideInteger => "divide_integer",
550 QuotientInteger => "quotient_integer",
551 RemainderInteger => "remainder_integer",
552 ModInteger => "mod_integer",
553 EqualsInteger => "equals_integer",
554 LessThanInteger => "less_than_integer",
555 LessThanEqualsInteger => "less_than_equals_integer",
556 AppendByteString => "append_bytearray",
557 ConsByteString => "cons_bytearray",
558 SliceByteString => "slice_bytearray",
559 LengthOfByteString => "length_of_bytearray",
560 IndexByteString => "index_bytearray",
561 EqualsByteString => "equals_bytearray",
562 LessThanByteString => "less_than_bytearray",
563 LessThanEqualsByteString => "less_than_equals_bytearray",
564 Sha2_256 => "sha2_256",
565 Sha3_256 => "sha3_256",
566 Blake2b_224 => "blake2b_224",
567 Blake2b_256 => "blake2b_256",
568 Keccak_256 => "keccak_256",
569 VerifyEd25519Signature => "verify_ed25519_signature",
570 VerifyEcdsaSecp256k1Signature => "verify_ecdsa_secp256k1_signature",
571 VerifySchnorrSecp256k1Signature => "verify_schnorr_secp256k1_signature",
572 AppendString => "append_string",
573 EqualsString => "equals_string",
574 EncodeUtf8 => "encode_utf8",
575 DecodeUtf8 => "decode_utf8",
576 IfThenElse => "if_then_else",
577 ChooseUnit => "choose_void",
578 Trace => "debug",
579 FstPair => "fst_pair",
580 SndPair => "snd_pair",
581 ChooseList => "choose_list",
582 MkCons => "cons_list",
583 HeadList => "head_list",
584 TailList => "tail_list",
585 NullList => "null_list",
586 ChooseData => "choose_data",
587 ConstrData => "constr_data",
588 MapData => "map_data",
589 ListData => "list_data",
590 IData => "i_data",
591 BData => "b_data",
592 UnConstrData => "un_constr_data",
593 UnMapData => "un_map_data",
594 UnListData => "un_list_data",
595 UnIData => "un_i_data",
596 UnBData => "un_b_data",
597 EqualsData => "equals_data",
598 SerialiseData => "serialise_data",
599 MkPairData => "new_pair",
600 MkNilData => "new_list",
601 MkNilPairData => "new_pairs",
602 Bls12_381_G1_Add => "bls12_381_g1_add",
603 Bls12_381_G1_Neg => "bls12_381_g1_neg",
604 Bls12_381_G1_ScalarMul => "bls12_381_g1_scalar_mul",
605 Bls12_381_G1_Equal => "bls12_381_g1_equal",
606 Bls12_381_G1_Compress => "bls12_381_g1_compress",
607 Bls12_381_G1_Uncompress => "bls12_381_g1_uncompress",
608 Bls12_381_G1_HashToGroup => "bls12_381_g1_hash_to_group",
609 Bls12_381_G2_Add => "bls12_381_g2_add",
610 Bls12_381_G2_Neg => "bls12_381_g2_neg",
611 Bls12_381_G2_ScalarMul => "bls12_381_g2_scalar_mul",
612 Bls12_381_G2_Equal => "bls12_381_g2_equal",
613 Bls12_381_G2_Compress => "bls12_381_g2_compress",
614 Bls12_381_G2_Uncompress => "bls12_381_g2_uncompress",
615 Bls12_381_G2_HashToGroup => "bls12_381_g2_hash_to_group",
616 Bls12_381_MillerLoop => "bls12_381_miller_loop",
617 Bls12_381_MulMlResult => "bls12_381_mul_miller_loop_result",
618 Bls12_381_FinalVerify => "bls12_381_final_verify",
619 IntegerToByteString => "integer_to_bytearray",
620 ByteStringToInteger => "bytearray_to_integer",
621 AndByteString => "and_bytearray",
622 OrByteString => "or_bytearray",
623 XorByteString => "xor_bytearray",
624 ComplementByteString => "complement_bytearray",
625 ReadBit => "read_bit",
626 WriteBits => "write_bits",
627 ReplicateByte => "replicate_byte",
628 ShiftByteString => "shift_bytearray",
629 RotateByteString => "rotate_bytearray",
630 CountSetBits => "count_set_bits",
631 FindFirstSetBit => "find_first_set_bit",
632 Ripemd_160 => "ripemd_160",
633 }
637 .to_string()
638 }
639}
640
641impl<T> From<DefaultFunction> for Term<T> {
642 fn from(builtin: DefaultFunction) -> Self {
643 Term::Builtin(builtin)
644 }
645}
646
647impl<T> From<DefaultFunction> for Rc<Term<T>> {
648 fn from(builtin: DefaultFunction) -> Self {
649 Term::Builtin(builtin).into()
650 }
651}