1pub const OP_0: u8 = 0x00;
11pub const OP_FALSE: u8 = 0x00;
13
14pub const OP_DATA_1: u8 = 0x01;
18pub const OP_DATA_2: u8 = 0x02;
20pub const OP_DATA_3: u8 = 0x03;
22pub const OP_DATA_4: u8 = 0x04;
24pub const OP_DATA_5: u8 = 0x05;
26pub const OP_DATA_6: u8 = 0x06;
28pub const OP_DATA_7: u8 = 0x07;
30pub const OP_DATA_8: u8 = 0x08;
32pub const OP_DATA_9: u8 = 0x09;
34pub const OP_DATA_10: u8 = 0x0a;
36pub const OP_DATA_11: u8 = 0x0b;
38pub const OP_DATA_12: u8 = 0x0c;
40pub const OP_DATA_13: u8 = 0x0d;
42pub const OP_DATA_14: u8 = 0x0e;
44pub const OP_DATA_15: u8 = 0x0f;
46pub const OP_DATA_16: u8 = 0x10;
48pub const OP_DATA_17: u8 = 0x11;
50pub const OP_DATA_18: u8 = 0x12;
52pub const OP_DATA_19: u8 = 0x13;
54pub const OP_DATA_20: u8 = 0x14;
56pub const OP_DATA_21: u8 = 0x15;
58pub const OP_DATA_22: u8 = 0x16;
60pub const OP_DATA_23: u8 = 0x17;
62pub const OP_DATA_24: u8 = 0x18;
64pub const OP_DATA_25: u8 = 0x19;
66pub const OP_DATA_26: u8 = 0x1a;
68pub const OP_DATA_27: u8 = 0x1b;
70pub const OP_DATA_28: u8 = 0x1c;
72pub const OP_DATA_29: u8 = 0x1d;
74pub const OP_DATA_30: u8 = 0x1e;
76pub const OP_DATA_31: u8 = 0x1f;
78pub const OP_DATA_32: u8 = 0x20;
80pub const OP_DATA_33: u8 = 0x21;
82pub const OP_DATA_34: u8 = 0x22;
84pub const OP_DATA_35: u8 = 0x23;
86pub const OP_DATA_36: u8 = 0x24;
88pub const OP_DATA_37: u8 = 0x25;
90pub const OP_DATA_38: u8 = 0x26;
92pub const OP_DATA_39: u8 = 0x27;
94pub const OP_DATA_40: u8 = 0x28;
96pub const OP_DATA_41: u8 = 0x29;
98pub const OP_DATA_42: u8 = 0x2a;
100pub const OP_DATA_43: u8 = 0x2b;
102pub const OP_DATA_44: u8 = 0x2c;
104pub const OP_DATA_45: u8 = 0x2d;
106pub const OP_DATA_46: u8 = 0x2e;
108pub const OP_DATA_47: u8 = 0x2f;
110pub const OP_DATA_48: u8 = 0x30;
112pub const OP_DATA_49: u8 = 0x31;
114pub const OP_DATA_50: u8 = 0x32;
116pub const OP_DATA_51: u8 = 0x33;
118pub const OP_DATA_52: u8 = 0x34;
120pub const OP_DATA_53: u8 = 0x35;
122pub const OP_DATA_54: u8 = 0x36;
124pub const OP_DATA_55: u8 = 0x37;
126pub const OP_DATA_56: u8 = 0x38;
128pub const OP_DATA_57: u8 = 0x39;
130pub const OP_DATA_58: u8 = 0x3a;
132pub const OP_DATA_59: u8 = 0x3b;
134pub const OP_DATA_60: u8 = 0x3c;
136pub const OP_DATA_61: u8 = 0x3d;
138pub const OP_DATA_62: u8 = 0x3e;
140pub const OP_DATA_63: u8 = 0x3f;
142pub const OP_DATA_64: u8 = 0x40;
144pub const OP_DATA_65: u8 = 0x41;
146pub const OP_DATA_66: u8 = 0x42;
148pub const OP_DATA_67: u8 = 0x43;
150pub const OP_DATA_68: u8 = 0x44;
152pub const OP_DATA_69: u8 = 0x45;
154pub const OP_DATA_70: u8 = 0x46;
156pub const OP_DATA_71: u8 = 0x47;
158pub const OP_DATA_72: u8 = 0x48;
160pub const OP_DATA_73: u8 = 0x49;
162pub const OP_DATA_74: u8 = 0x4a;
164pub const OP_DATA_75: u8 = 0x4b;
166
167pub const OP_PUSHDATA1: u8 = 0x4c;
171pub const OP_PUSHDATA2: u8 = 0x4d;
173pub const OP_PUSHDATA4: u8 = 0x4e;
175
176pub const OP_1NEGATE: u8 = 0x4f;
178pub const OP_RESERVED: u8 = 0x50;
180pub const OP_BASE: u8 = 0x50;
182pub const OP_1: u8 = 0x51;
184pub const OP_TRUE: u8 = 0x51;
186pub const OP_2: u8 = 0x52;
188pub const OP_3: u8 = 0x53;
190pub const OP_4: u8 = 0x54;
192pub const OP_5: u8 = 0x55;
194pub const OP_6: u8 = 0x56;
196pub const OP_7: u8 = 0x57;
198pub const OP_8: u8 = 0x58;
200pub const OP_9: u8 = 0x59;
202pub const OP_10: u8 = 0x5a;
204pub const OP_11: u8 = 0x5b;
206pub const OP_12: u8 = 0x5c;
208pub const OP_13: u8 = 0x5d;
210pub const OP_14: u8 = 0x5e;
212pub const OP_15: u8 = 0x5f;
214pub const OP_16: u8 = 0x60;
216
217pub const OP_NOP: u8 = 0x61;
221pub const OP_VER: u8 = 0x62;
223pub const OP_IF: u8 = 0x63;
225pub const OP_NOTIF: u8 = 0x64;
227pub const OP_VERIF: u8 = 0x65;
229pub const OP_VERNOTIF: u8 = 0x66;
231pub const OP_ELSE: u8 = 0x67;
233pub const OP_ENDIF: u8 = 0x68;
235pub const OP_VERIFY: u8 = 0x69;
237pub const OP_RETURN: u8 = 0x6a;
239
240pub const OP_TOALTSTACK: u8 = 0x6b;
244pub const OP_FROMALTSTACK: u8 = 0x6c;
246pub const OP_2DROP: u8 = 0x6d;
248pub const OP_2DUP: u8 = 0x6e;
250pub const OP_3DUP: u8 = 0x6f;
252pub const OP_2OVER: u8 = 0x70;
254pub const OP_2ROT: u8 = 0x71;
256pub const OP_2SWAP: u8 = 0x72;
258pub const OP_IFDUP: u8 = 0x73;
260pub const OP_DEPTH: u8 = 0x74;
262pub const OP_DROP: u8 = 0x75;
264pub const OP_DUP: u8 = 0x76;
266pub const OP_NIP: u8 = 0x77;
268pub const OP_OVER: u8 = 0x78;
270pub const OP_PICK: u8 = 0x79;
272pub const OP_ROLL: u8 = 0x7a;
274pub const OP_ROT: u8 = 0x7b;
276pub const OP_SWAP: u8 = 0x7c;
278pub const OP_TUCK: u8 = 0x7d;
280
281pub const OP_CAT: u8 = 0x7e;
285pub const OP_SPLIT: u8 = 0x7f;
287pub const OP_NUM2BIN: u8 = 0x80;
289pub const OP_BIN2NUM: u8 = 0x81;
291pub const OP_SIZE: u8 = 0x82;
293
294pub const OP_INVERT: u8 = 0x83;
298pub const OP_AND: u8 = 0x84;
300pub const OP_OR: u8 = 0x85;
302pub const OP_XOR: u8 = 0x86;
304pub const OP_EQUAL: u8 = 0x87;
306pub const OP_EQUALVERIFY: u8 = 0x88;
308pub const OP_RESERVED1: u8 = 0x89;
310pub const OP_RESERVED2: u8 = 0x8a;
312
313pub const OP_1ADD: u8 = 0x8b;
317pub const OP_1SUB: u8 = 0x8c;
319pub const OP_2MUL: u8 = 0x8d;
321pub const OP_2DIV: u8 = 0x8e;
323pub const OP_NEGATE: u8 = 0x8f;
325pub const OP_ABS: u8 = 0x90;
327pub const OP_NOT: u8 = 0x91;
329pub const OP_0NOTEQUAL: u8 = 0x92;
331pub const OP_ADD: u8 = 0x93;
333pub const OP_SUB: u8 = 0x94;
335pub const OP_MUL: u8 = 0x95;
337pub const OP_DIV: u8 = 0x96;
339pub const OP_MOD: u8 = 0x97;
341pub const OP_LSHIFT: u8 = 0x98;
343pub const OP_RSHIFT: u8 = 0x99;
345pub const OP_BOOLAND: u8 = 0x9a;
347pub const OP_BOOLOR: u8 = 0x9b;
349pub const OP_NUMEQUAL: u8 = 0x9c;
351pub const OP_NUMEQUALVERIFY: u8 = 0x9d;
353pub const OP_NUMNOTEQUAL: u8 = 0x9e;
355pub const OP_LESSTHAN: u8 = 0x9f;
357pub const OP_GREATERTHAN: u8 = 0xa0;
359pub const OP_LESSTHANOREQUAL: u8 = 0xa1;
361pub const OP_GREATERTHANOREQUAL: u8 = 0xa2;
363pub const OP_MIN: u8 = 0xa3;
365pub const OP_MAX: u8 = 0xa4;
367pub const OP_WITHIN: u8 = 0xa5;
369
370pub const OP_RIPEMD160: u8 = 0xa6;
374pub const OP_SHA1: u8 = 0xa7;
376pub const OP_SHA256: u8 = 0xa8;
378pub const OP_HASH160: u8 = 0xa9;
380pub const OP_HASH256: u8 = 0xaa;
382pub const OP_CODESEPARATOR: u8 = 0xab;
384pub const OP_CHECKSIG: u8 = 0xac;
386pub const OP_CHECKSIGVERIFY: u8 = 0xad;
388pub const OP_CHECKMULTISIG: u8 = 0xae;
390pub const OP_CHECKMULTISIGVERIFY: u8 = 0xaf;
392
393pub const OP_NOP1: u8 = 0xb0;
397pub const OP_NOP2: u8 = 0xb1;
399pub const OP_CHECKLOCKTIMEVERIFY: u8 = 0xb1;
401pub const OP_NOP3: u8 = 0xb2;
403pub const OP_CHECKSEQUENCEVERIFY: u8 = 0xb2;
405pub const OP_NOP4: u8 = 0xb3;
407pub const OP_NOP5: u8 = 0xb4;
409pub const OP_NOP6: u8 = 0xb5;
411pub const OP_NOP7: u8 = 0xb6;
413pub const OP_NOP8: u8 = 0xb7;
415pub const OP_NOP9: u8 = 0xb8;
417pub const OP_NOP10: u8 = 0xb9;
419
420pub const OP_UNKNOWN186: u8 = 0xba;
424pub const OP_UNKNOWN187: u8 = 0xbb;
426pub const OP_UNKNOWN188: u8 = 0xbc;
428pub const OP_UNKNOWN189: u8 = 0xbd;
430pub const OP_UNKNOWN190: u8 = 0xbe;
432pub const OP_UNKNOWN191: u8 = 0xbf;
434pub const OP_UNKNOWN192: u8 = 0xc0;
436pub const OP_UNKNOWN193: u8 = 0xc1;
438pub const OP_UNKNOWN194: u8 = 0xc2;
440pub const OP_UNKNOWN195: u8 = 0xc3;
442pub const OP_UNKNOWN196: u8 = 0xc4;
444pub const OP_UNKNOWN197: u8 = 0xc5;
446pub const OP_UNKNOWN198: u8 = 0xc6;
448pub const OP_UNKNOWN199: u8 = 0xc7;
450pub const OP_UNKNOWN200: u8 = 0xc8;
452pub const OP_UNKNOWN201: u8 = 0xc9;
454pub const OP_UNKNOWN202: u8 = 0xca;
456pub const OP_UNKNOWN203: u8 = 0xcb;
458pub const OP_UNKNOWN204: u8 = 0xcc;
460pub const OP_UNKNOWN205: u8 = 0xcd;
462pub const OP_UNKNOWN206: u8 = 0xce;
464pub const OP_UNKNOWN207: u8 = 0xcf;
466pub const OP_UNKNOWN208: u8 = 0xd0;
468pub const OP_UNKNOWN209: u8 = 0xd1;
470pub const OP_UNKNOWN210: u8 = 0xd2;
472pub const OP_UNKNOWN211: u8 = 0xd3;
474pub const OP_UNKNOWN212: u8 = 0xd4;
476pub const OP_UNKNOWN213: u8 = 0xd5;
478pub const OP_UNKNOWN214: u8 = 0xd6;
480pub const OP_UNKNOWN215: u8 = 0xd7;
482pub const OP_UNKNOWN216: u8 = 0xd8;
484pub const OP_UNKNOWN217: u8 = 0xd9;
486pub const OP_UNKNOWN218: u8 = 0xda;
488pub const OP_UNKNOWN219: u8 = 0xdb;
490pub const OP_UNKNOWN220: u8 = 0xdc;
492pub const OP_UNKNOWN221: u8 = 0xdd;
494pub const OP_UNKNOWN222: u8 = 0xde;
496pub const OP_UNKNOWN223: u8 = 0xdf;
498pub const OP_UNKNOWN224: u8 = 0xe0;
500pub const OP_UNKNOWN225: u8 = 0xe1;
502pub const OP_UNKNOWN226: u8 = 0xe2;
504pub const OP_UNKNOWN227: u8 = 0xe3;
506pub const OP_UNKNOWN228: u8 = 0xe4;
508pub const OP_UNKNOWN229: u8 = 0xe5;
510pub const OP_UNKNOWN230: u8 = 0xe6;
512pub const OP_UNKNOWN231: u8 = 0xe7;
514pub const OP_UNKNOWN232: u8 = 0xe8;
516pub const OP_UNKNOWN233: u8 = 0xe9;
518pub const OP_UNKNOWN234: u8 = 0xea;
520pub const OP_UNKNOWN235: u8 = 0xeb;
522pub const OP_UNKNOWN236: u8 = 0xec;
524pub const OP_UNKNOWN237: u8 = 0xed;
526pub const OP_UNKNOWN238: u8 = 0xee;
528pub const OP_UNKNOWN239: u8 = 0xef;
530pub const OP_UNKNOWN240: u8 = 0xf0;
532pub const OP_UNKNOWN241: u8 = 0xf1;
534pub const OP_UNKNOWN242: u8 = 0xf2;
536pub const OP_UNKNOWN243: u8 = 0xf3;
538pub const OP_UNKNOWN244: u8 = 0xf4;
540pub const OP_UNKNOWN245: u8 = 0xf5;
542pub const OP_UNKNOWN246: u8 = 0xf6;
544pub const OP_UNKNOWN247: u8 = 0xf7;
546pub const OP_UNKNOWN248: u8 = 0xf8;
548pub const OP_UNKNOWN249: u8 = 0xf9;
550pub const OP_SMALLINTEGER: u8 = 0xfa;
552pub const OP_PUBKEYS: u8 = 0xfb;
554pub const OP_UNKNOWN252: u8 = 0xfc;
556pub const OP_PUBKEYHASH: u8 = 0xfd;
558pub const OP_PUBKEY: u8 = 0xfe;
560pub const OP_INVALIDOPCODE: u8 = 0xff;
562
563pub fn opcode_to_string(op: u8) -> &'static str {
574 match op {
575 0x00 => "OP_FALSE",
576 0x01 => "OP_DATA_1",
577 0x02 => "OP_DATA_2",
578 0x03 => "OP_DATA_3",
579 0x04 => "OP_DATA_4",
580 0x05 => "OP_DATA_5",
581 0x06 => "OP_DATA_6",
582 0x07 => "OP_DATA_7",
583 0x08 => "OP_DATA_8",
584 0x09 => "OP_DATA_9",
585 0x0a => "OP_DATA_10",
586 0x0b => "OP_DATA_11",
587 0x0c => "OP_DATA_12",
588 0x0d => "OP_DATA_13",
589 0x0e => "OP_DATA_14",
590 0x0f => "OP_DATA_15",
591 0x10 => "OP_DATA_16",
592 0x11 => "OP_DATA_17",
593 0x12 => "OP_DATA_18",
594 0x13 => "OP_DATA_19",
595 0x14 => "OP_DATA_20",
596 0x15 => "OP_DATA_21",
597 0x16 => "OP_DATA_22",
598 0x17 => "OP_DATA_23",
599 0x18 => "OP_DATA_24",
600 0x19 => "OP_DATA_25",
601 0x1a => "OP_DATA_26",
602 0x1b => "OP_DATA_27",
603 0x1c => "OP_DATA_28",
604 0x1d => "OP_DATA_29",
605 0x1e => "OP_DATA_30",
606 0x1f => "OP_DATA_31",
607 0x20 => "OP_DATA_32",
608 0x21 => "OP_DATA_33",
609 0x22 => "OP_DATA_34",
610 0x23 => "OP_DATA_35",
611 0x24 => "OP_DATA_36",
612 0x25 => "OP_DATA_37",
613 0x26 => "OP_DATA_38",
614 0x27 => "OP_DATA_39",
615 0x28 => "OP_DATA_40",
616 0x29 => "OP_DATA_41",
617 0x2a => "OP_DATA_42",
618 0x2b => "OP_DATA_43",
619 0x2c => "OP_DATA_44",
620 0x2d => "OP_DATA_45",
621 0x2e => "OP_DATA_46",
622 0x2f => "OP_DATA_47",
623 0x30 => "OP_DATA_48",
624 0x31 => "OP_DATA_49",
625 0x32 => "OP_DATA_50",
626 0x33 => "OP_DATA_51",
627 0x34 => "OP_DATA_52",
628 0x35 => "OP_DATA_53",
629 0x36 => "OP_DATA_54",
630 0x37 => "OP_DATA_55",
631 0x38 => "OP_DATA_56",
632 0x39 => "OP_DATA_57",
633 0x3a => "OP_DATA_58",
634 0x3b => "OP_DATA_59",
635 0x3c => "OP_DATA_60",
636 0x3d => "OP_DATA_61",
637 0x3e => "OP_DATA_62",
638 0x3f => "OP_DATA_63",
639 0x40 => "OP_DATA_64",
640 0x41 => "OP_DATA_65",
641 0x42 => "OP_DATA_66",
642 0x43 => "OP_DATA_67",
643 0x44 => "OP_DATA_68",
644 0x45 => "OP_DATA_69",
645 0x46 => "OP_DATA_70",
646 0x47 => "OP_DATA_71",
647 0x48 => "OP_DATA_72",
648 0x49 => "OP_DATA_73",
649 0x4a => "OP_DATA_74",
650 0x4b => "OP_DATA_75",
651 0x4c => "OP_PUSHDATA1",
652 0x4d => "OP_PUSHDATA2",
653 0x4e => "OP_PUSHDATA4",
654 0x4f => "OP_1NEGATE",
655 0x50 => "OP_BASE",
656 0x51 => "OP_TRUE",
657 0x52 => "OP_2",
658 0x53 => "OP_3",
659 0x54 => "OP_4",
660 0x55 => "OP_5",
661 0x56 => "OP_6",
662 0x57 => "OP_7",
663 0x58 => "OP_8",
664 0x59 => "OP_9",
665 0x5a => "OP_10",
666 0x5b => "OP_11",
667 0x5c => "OP_12",
668 0x5d => "OP_13",
669 0x5e => "OP_14",
670 0x5f => "OP_15",
671 0x60 => "OP_16",
672 0x61 => "OP_NOP",
673 0x62 => "OP_VER",
674 0x63 => "OP_IF",
675 0x64 => "OP_NOTIF",
676 0x65 => "OP_VERIF",
677 0x66 => "OP_VERNOTIF",
678 0x67 => "OP_ELSE",
679 0x68 => "OP_ENDIF",
680 0x69 => "OP_VERIFY",
681 0x6a => "OP_RETURN",
682 0x6b => "OP_TOALTSTACK",
683 0x6c => "OP_FROMALTSTACK",
684 0x6d => "OP_2DROP",
685 0x6e => "OP_2DUP",
686 0x6f => "OP_3DUP",
687 0x70 => "OP_2OVER",
688 0x71 => "OP_2ROT",
689 0x72 => "OP_2SWAP",
690 0x73 => "OP_IFDUP",
691 0x74 => "OP_DEPTH",
692 0x75 => "OP_DROP",
693 0x76 => "OP_DUP",
694 0x77 => "OP_NIP",
695 0x78 => "OP_OVER",
696 0x79 => "OP_PICK",
697 0x7a => "OP_ROLL",
698 0x7b => "OP_ROT",
699 0x7c => "OP_SWAP",
700 0x7d => "OP_TUCK",
701 0x7e => "OP_CAT",
702 0x7f => "OP_SPLIT",
703 0x80 => "OP_NUM2BIN",
704 0x81 => "OP_BIN2NUM",
705 0x82 => "OP_SIZE",
706 0x83 => "OP_INVERT",
707 0x84 => "OP_AND",
708 0x85 => "OP_OR",
709 0x86 => "OP_XOR",
710 0x87 => "OP_EQUAL",
711 0x88 => "OP_EQUALVERIFY",
712 0x89 => "OP_RESERVED1",
713 0x8a => "OP_RESERVED2",
714 0x8b => "OP_1ADD",
715 0x8c => "OP_1SUB",
716 0x8d => "OP_2MUL",
717 0x8e => "OP_2DIV",
718 0x8f => "OP_NEGATE",
719 0x90 => "OP_ABS",
720 0x91 => "OP_NOT",
721 0x92 => "OP_0NOTEQUAL",
722 0x93 => "OP_ADD",
723 0x94 => "OP_SUB",
724 0x95 => "OP_MUL",
725 0x96 => "OP_DIV",
726 0x97 => "OP_MOD",
727 0x98 => "OP_LSHIFT",
728 0x99 => "OP_RSHIFT",
729 0x9a => "OP_BOOLAND",
730 0x9b => "OP_BOOLOR",
731 0x9c => "OP_NUMEQUAL",
732 0x9d => "OP_NUMEQUALVERIFY",
733 0x9e => "OP_NUMNOTEQUAL",
734 0x9f => "OP_LESSTHAN",
735 0xa0 => "OP_GREATERTHAN",
736 0xa1 => "OP_LESSTHANOREQUAL",
737 0xa2 => "OP_GREATERTHANOREQUAL",
738 0xa3 => "OP_MIN",
739 0xa4 => "OP_MAX",
740 0xa5 => "OP_WITHIN",
741 0xa6 => "OP_RIPEMD160",
742 0xa7 => "OP_SHA1",
743 0xa8 => "OP_SHA256",
744 0xa9 => "OP_HASH160",
745 0xaa => "OP_HASH256",
746 0xab => "OP_CODESEPARATOR",
747 0xac => "OP_CHECKSIG",
748 0xad => "OP_CHECKSIGVERIFY",
749 0xae => "OP_CHECKMULTISIG",
750 0xaf => "OP_CHECKMULTISIGVERIFY",
751 0xb0 => "OP_NOP1",
752 0xb1 => "OP_NOP2",
753 0xb2 => "OP_NOP3",
754 0xb3 => "OP_NOP4",
755 0xb4 => "OP_NOP5",
756 0xb5 => "OP_NOP6",
757 0xb6 => "OP_NOP7",
758 0xb7 => "OP_NOP8",
759 0xb8 => "OP_NOP9",
760 0xb9 => "OP_NOP10",
761 0xba => "OP_UNKNOWN186",
762 0xbb => "OP_UNKNOWN187",
763 0xbc => "OP_UNKNOWN188",
764 0xbd => "OP_UNKNOWN189",
765 0xbe => "OP_UNKNOWN190",
766 0xbf => "OP_UNKNOWN191",
767 0xc0 => "OP_UNKNOWN192",
768 0xc1 => "OP_UNKNOWN193",
769 0xc2 => "OP_UNKNOWN194",
770 0xc3 => "OP_UNKNOWN195",
771 0xc4 => "OP_UNKNOWN196",
772 0xc5 => "OP_UNKNOWN197",
773 0xc6 => "OP_UNKNOWN198",
774 0xc7 => "OP_UNKNOWN199",
775 0xc8 => "OP_UNKNOWN200",
776 0xc9 => "OP_UNKNOWN201",
777 0xca => "OP_UNKNOWN202",
778 0xcb => "OP_UNKNOWN203",
779 0xcc => "OP_UNKNOWN204",
780 0xcd => "OP_UNKNOWN205",
781 0xce => "OP_UNKNOWN206",
782 0xcf => "OP_UNKNOWN207",
783 0xd0 => "OP_UNKNOWN208",
784 0xd1 => "OP_UNKNOWN209",
785 0xd2 => "OP_UNKNOWN210",
786 0xd3 => "OP_UNKNOWN211",
787 0xd4 => "OP_UNKNOWN212",
788 0xd5 => "OP_UNKNOWN213",
789 0xd6 => "OP_UNKNOWN214",
790 0xd7 => "OP_UNKNOWN215",
791 0xd8 => "OP_UNKNOWN216",
792 0xd9 => "OP_UNKNOWN217",
793 0xda => "OP_UNKNOWN218",
794 0xdb => "OP_UNKNOWN219",
795 0xdc => "OP_UNKNOWN220",
796 0xdd => "OP_UNKNOWN221",
797 0xde => "OP_UNKNOWN222",
798 0xdf => "OP_UNKNOWN223",
799 0xe0 => "OP_UNKNOWN224",
800 0xe1 => "OP_UNKNOWN225",
801 0xe2 => "OP_UNKNOWN226",
802 0xe3 => "OP_UNKNOWN227",
803 0xe4 => "OP_UNKNOWN228",
804 0xe5 => "OP_UNKNOWN229",
805 0xe6 => "OP_UNKNOWN230",
806 0xe7 => "OP_UNKNOWN231",
807 0xe8 => "OP_UNKNOWN232",
808 0xe9 => "OP_UNKNOWN233",
809 0xea => "OP_UNKNOWN234",
810 0xeb => "OP_UNKNOWN235",
811 0xec => "OP_UNKNOWN236",
812 0xed => "OP_UNKNOWN237",
813 0xee => "OP_UNKNOWN238",
814 0xef => "OP_UNKNOWN239",
815 0xf0 => "OP_UNKNOWN240",
816 0xf1 => "OP_UNKNOWN241",
817 0xf2 => "OP_UNKNOWN242",
818 0xf3 => "OP_UNKNOWN243",
819 0xf4 => "OP_UNKNOWN244",
820 0xf5 => "OP_UNKNOWN245",
821 0xf6 => "OP_UNKNOWN246",
822 0xf7 => "OP_UNKNOWN247",
823 0xf8 => "OP_UNKNOWN248",
824 0xf9 => "OP_UNKNOWN249",
825 0xfa => "OP_SMALLINTEGER",
826 0xfb => "OP_PUBKEYS",
827 0xfc => "OP_UNKNOWN252",
828 0xfd => "OP_PUBKEYHASH",
829 0xfe => "OP_PUBKEY",
830 0xff => "OP_INVALIDOPCODE",
831 }
832}
833
834pub fn string_to_opcode(name: &str) -> Option<u8> {
845 match name {
846 "OP_0" | "OP_ZERO" | "OP_FALSE" => Some(OP_0),
847 "OP_DATA_1" => Some(0x01),
848 "OP_DATA_2" => Some(0x02),
849 "OP_DATA_3" => Some(0x03),
850 "OP_DATA_4" => Some(0x04),
851 "OP_DATA_5" => Some(0x05),
852 "OP_DATA_6" => Some(0x06),
853 "OP_DATA_7" => Some(0x07),
854 "OP_DATA_8" => Some(0x08),
855 "OP_DATA_9" => Some(0x09),
856 "OP_DATA_10" => Some(0x0a),
857 "OP_DATA_11" => Some(0x0b),
858 "OP_DATA_12" => Some(0x0c),
859 "OP_DATA_13" => Some(0x0d),
860 "OP_DATA_14" => Some(0x0e),
861 "OP_DATA_15" => Some(0x0f),
862 "OP_DATA_16" => Some(0x10),
863 "OP_DATA_17" => Some(0x11),
864 "OP_DATA_18" => Some(0x12),
865 "OP_DATA_19" => Some(0x13),
866 "OP_DATA_20" => Some(0x14),
867 "OP_DATA_21" => Some(0x15),
868 "OP_DATA_22" => Some(0x16),
869 "OP_DATA_23" => Some(0x17),
870 "OP_DATA_24" => Some(0x18),
871 "OP_DATA_25" => Some(0x19),
872 "OP_DATA_26" => Some(0x1a),
873 "OP_DATA_27" => Some(0x1b),
874 "OP_DATA_28" => Some(0x1c),
875 "OP_DATA_29" => Some(0x1d),
876 "OP_DATA_30" => Some(0x1e),
877 "OP_DATA_31" => Some(0x1f),
878 "OP_DATA_32" => Some(0x20),
879 "OP_DATA_33" => Some(0x21),
880 "OP_DATA_34" => Some(0x22),
881 "OP_DATA_35" => Some(0x23),
882 "OP_DATA_36" => Some(0x24),
883 "OP_DATA_37" => Some(0x25),
884 "OP_DATA_38" => Some(0x26),
885 "OP_DATA_39" => Some(0x27),
886 "OP_DATA_40" => Some(0x28),
887 "OP_DATA_41" => Some(0x29),
888 "OP_DATA_42" => Some(0x2a),
889 "OP_DATA_43" => Some(0x2b),
890 "OP_DATA_44" => Some(0x2c),
891 "OP_DATA_45" => Some(0x2d),
892 "OP_DATA_46" => Some(0x2e),
893 "OP_DATA_47" => Some(0x2f),
894 "OP_DATA_48" => Some(0x30),
895 "OP_DATA_49" => Some(0x31),
896 "OP_DATA_50" => Some(0x32),
897 "OP_DATA_51" => Some(0x33),
898 "OP_DATA_52" => Some(0x34),
899 "OP_DATA_53" => Some(0x35),
900 "OP_DATA_54" => Some(0x36),
901 "OP_DATA_55" => Some(0x37),
902 "OP_DATA_56" => Some(0x38),
903 "OP_DATA_57" => Some(0x39),
904 "OP_DATA_58" => Some(0x3a),
905 "OP_DATA_59" => Some(0x3b),
906 "OP_DATA_60" => Some(0x3c),
907 "OP_DATA_61" => Some(0x3d),
908 "OP_DATA_62" => Some(0x3e),
909 "OP_DATA_63" => Some(0x3f),
910 "OP_DATA_64" => Some(0x40),
911 "OP_DATA_65" => Some(0x41),
912 "OP_DATA_66" => Some(0x42),
913 "OP_DATA_67" => Some(0x43),
914 "OP_DATA_68" => Some(0x44),
915 "OP_DATA_69" => Some(0x45),
916 "OP_DATA_70" => Some(0x46),
917 "OP_DATA_71" => Some(0x47),
918 "OP_DATA_72" => Some(0x48),
919 "OP_DATA_73" => Some(0x49),
920 "OP_DATA_74" => Some(0x4a),
921 "OP_DATA_75" => Some(0x4b),
922 "OP_PUSHDATA1" => Some(OP_PUSHDATA1),
923 "OP_PUSHDATA2" => Some(OP_PUSHDATA2),
924 "OP_PUSHDATA4" => Some(OP_PUSHDATA4),
925 "OP_1NEGATE" => Some(OP_1NEGATE),
926 "OP_RESERVED" | "OP_BASE" => Some(OP_RESERVED),
927 "OP_1" | "OP_ONE" | "OP_TRUE" => Some(OP_1),
928 "OP_2" => Some(OP_2),
929 "OP_3" => Some(OP_3),
930 "OP_4" => Some(OP_4),
931 "OP_5" => Some(OP_5),
932 "OP_6" => Some(OP_6),
933 "OP_7" => Some(OP_7),
934 "OP_8" => Some(OP_8),
935 "OP_9" => Some(OP_9),
936 "OP_10" => Some(OP_10),
937 "OP_11" => Some(OP_11),
938 "OP_12" => Some(OP_12),
939 "OP_13" => Some(OP_13),
940 "OP_14" => Some(OP_14),
941 "OP_15" => Some(OP_15),
942 "OP_16" => Some(OP_16),
943 "OP_NOP" => Some(OP_NOP),
944 "OP_VER" => Some(OP_VER),
945 "OP_IF" => Some(OP_IF),
946 "OP_NOTIF" => Some(OP_NOTIF),
947 "OP_VERIF" => Some(OP_VERIF),
948 "OP_VERNOTIF" => Some(OP_VERNOTIF),
949 "OP_ELSE" => Some(OP_ELSE),
950 "OP_ENDIF" => Some(OP_ENDIF),
951 "OP_VERIFY" => Some(OP_VERIFY),
952 "OP_RETURN" => Some(OP_RETURN),
953 "OP_TOALTSTACK" => Some(OP_TOALTSTACK),
954 "OP_FROMALTSTACK" => Some(OP_FROMALTSTACK),
955 "OP_2DROP" => Some(OP_2DROP),
956 "OP_2DUP" => Some(OP_2DUP),
957 "OP_3DUP" => Some(OP_3DUP),
958 "OP_2OVER" => Some(OP_2OVER),
959 "OP_2ROT" => Some(OP_2ROT),
960 "OP_2SWAP" => Some(OP_2SWAP),
961 "OP_IFDUP" => Some(OP_IFDUP),
962 "OP_DEPTH" => Some(OP_DEPTH),
963 "OP_DROP" => Some(OP_DROP),
964 "OP_DUP" => Some(OP_DUP),
965 "OP_NIP" => Some(OP_NIP),
966 "OP_OVER" => Some(OP_OVER),
967 "OP_PICK" => Some(OP_PICK),
968 "OP_ROLL" => Some(OP_ROLL),
969 "OP_ROT" => Some(OP_ROT),
970 "OP_SWAP" => Some(OP_SWAP),
971 "OP_TUCK" => Some(OP_TUCK),
972 "OP_CAT" => Some(OP_CAT),
973 "OP_SPLIT" => Some(OP_SPLIT),
974 "OP_NUM2BIN" | "OP_LEFT" => Some(OP_NUM2BIN),
975 "OP_BIN2NUM" | "OP_RIGHT" => Some(OP_BIN2NUM),
976 "OP_SIZE" => Some(OP_SIZE),
977 "OP_INVERT" => Some(OP_INVERT),
978 "OP_AND" => Some(OP_AND),
979 "OP_OR" => Some(OP_OR),
980 "OP_XOR" => Some(OP_XOR),
981 "OP_EQUAL" => Some(OP_EQUAL),
982 "OP_EQUALVERIFY" => Some(OP_EQUALVERIFY),
983 "OP_RESERVED1" => Some(OP_RESERVED1),
984 "OP_RESERVED2" => Some(OP_RESERVED2),
985 "OP_1ADD" => Some(OP_1ADD),
986 "OP_1SUB" => Some(OP_1SUB),
987 "OP_2MUL" => Some(OP_2MUL),
988 "OP_2DIV" => Some(OP_2DIV),
989 "OP_NEGATE" => Some(OP_NEGATE),
990 "OP_ABS" => Some(OP_ABS),
991 "OP_NOT" => Some(OP_NOT),
992 "OP_0NOTEQUAL" => Some(OP_0NOTEQUAL),
993 "OP_ADD" => Some(OP_ADD),
994 "OP_SUB" => Some(OP_SUB),
995 "OP_MUL" => Some(OP_MUL),
996 "OP_DIV" => Some(OP_DIV),
997 "OP_MOD" => Some(OP_MOD),
998 "OP_LSHIFT" => Some(OP_LSHIFT),
999 "OP_RSHIFT" => Some(OP_RSHIFT),
1000 "OP_BOOLAND" => Some(OP_BOOLAND),
1001 "OP_BOOLOR" => Some(OP_BOOLOR),
1002 "OP_NUMEQUAL" => Some(OP_NUMEQUAL),
1003 "OP_NUMEQUALVERIFY" => Some(OP_NUMEQUALVERIFY),
1004 "OP_NUMNOTEQUAL" => Some(OP_NUMNOTEQUAL),
1005 "OP_LESSTHAN" => Some(OP_LESSTHAN),
1006 "OP_GREATERTHAN" => Some(OP_GREATERTHAN),
1007 "OP_LESSTHANOREQUAL" => Some(OP_LESSTHANOREQUAL),
1008 "OP_GREATERTHANOREQUAL" => Some(OP_GREATERTHANOREQUAL),
1009 "OP_MIN" => Some(OP_MIN),
1010 "OP_MAX" => Some(OP_MAX),
1011 "OP_WITHIN" => Some(OP_WITHIN),
1012 "OP_RIPEMD160" => Some(OP_RIPEMD160),
1013 "OP_SHA1" => Some(OP_SHA1),
1014 "OP_SHA256" => Some(OP_SHA256),
1015 "OP_HASH160" => Some(OP_HASH160),
1016 "OP_HASH256" => Some(OP_HASH256),
1017 "OP_CODESEPARATOR" => Some(OP_CODESEPARATOR),
1018 "OP_CHECKSIG" => Some(OP_CHECKSIG),
1019 "OP_CHECKSIGVERIFY" => Some(OP_CHECKSIGVERIFY),
1020 "OP_CHECKMULTISIG" => Some(OP_CHECKMULTISIG),
1021 "OP_CHECKMULTISIGVERIFY" => Some(OP_CHECKMULTISIGVERIFY),
1022 "OP_NOP1" => Some(OP_NOP1),
1023 "OP_NOP2" => Some(OP_NOP2),
1024 "OP_NOP3" => Some(OP_NOP3),
1025 "OP_NOP4" => Some(OP_NOP4),
1026 "OP_NOP5" => Some(OP_NOP5),
1027 "OP_NOP6" => Some(OP_NOP6),
1028 "OP_NOP7" => Some(OP_NOP7),
1029 "OP_NOP8" => Some(OP_NOP8),
1030 "OP_NOP9" => Some(OP_NOP9),
1031 "OP_NOP10" => Some(OP_NOP10),
1032 "OP_UNKNOWN186" => Some(OP_UNKNOWN186),
1033 "OP_UNKNOWN187" => Some(OP_UNKNOWN187),
1034 "OP_UNKNOWN188" => Some(OP_UNKNOWN188),
1035 "OP_UNKNOWN189" => Some(OP_UNKNOWN189),
1036 "OP_UNKNOWN190" => Some(OP_UNKNOWN190),
1037 "OP_UNKNOWN191" => Some(OP_UNKNOWN191),
1038 "OP_UNKNOWN192" => Some(OP_UNKNOWN192),
1039 "OP_UNKNOWN193" => Some(OP_UNKNOWN193),
1040 "OP_UNKNOWN194" => Some(OP_UNKNOWN194),
1041 "OP_UNKNOWN195" => Some(OP_UNKNOWN195),
1042 "OP_UNKNOWN196" => Some(OP_UNKNOWN196),
1043 "OP_UNKNOWN197" => Some(OP_UNKNOWN197),
1044 "OP_UNKNOWN198" => Some(OP_UNKNOWN198),
1045 "OP_UNKNOWN199" => Some(OP_UNKNOWN199),
1046 "OP_UNKNOWN200" => Some(OP_UNKNOWN200),
1047 "OP_UNKNOWN201" => Some(OP_UNKNOWN201),
1048 "OP_UNKNOWN202" => Some(OP_UNKNOWN202),
1049 "OP_UNKNOWN203" => Some(OP_UNKNOWN203),
1050 "OP_UNKNOWN204" => Some(OP_UNKNOWN204),
1051 "OP_UNKNOWN205" => Some(OP_UNKNOWN205),
1052 "OP_UNKNOWN206" => Some(OP_UNKNOWN206),
1053 "OP_UNKNOWN207" => Some(OP_UNKNOWN207),
1054 "OP_UNKNOWN208" => Some(OP_UNKNOWN208),
1055 "OP_UNKNOWN209" => Some(OP_UNKNOWN209),
1056 "OP_UNKNOWN210" => Some(OP_UNKNOWN210),
1057 "OP_UNKNOWN211" => Some(OP_UNKNOWN211),
1058 "OP_UNKNOWN212" => Some(OP_UNKNOWN212),
1059 "OP_UNKNOWN213" => Some(OP_UNKNOWN213),
1060 "OP_UNKNOWN214" => Some(OP_UNKNOWN214),
1061 "OP_UNKNOWN215" => Some(OP_UNKNOWN215),
1062 "OP_UNKNOWN216" => Some(OP_UNKNOWN216),
1063 "OP_UNKNOWN217" => Some(OP_UNKNOWN217),
1064 "OP_UNKNOWN218" => Some(OP_UNKNOWN218),
1065 "OP_UNKNOWN219" => Some(OP_UNKNOWN219),
1066 "OP_UNKNOWN220" => Some(OP_UNKNOWN220),
1067 "OP_UNKNOWN221" => Some(OP_UNKNOWN221),
1068 "OP_UNKNOWN222" => Some(OP_UNKNOWN222),
1069 "OP_UNKNOWN223" => Some(OP_UNKNOWN223),
1070 "OP_UNKNOWN224" => Some(OP_UNKNOWN224),
1071 "OP_UNKNOWN225" => Some(OP_UNKNOWN225),
1072 "OP_UNKNOWN226" => Some(OP_UNKNOWN226),
1073 "OP_UNKNOWN227" => Some(OP_UNKNOWN227),
1074 "OP_UNKNOWN228" => Some(OP_UNKNOWN228),
1075 "OP_UNKNOWN229" => Some(OP_UNKNOWN229),
1076 "OP_UNKNOWN230" => Some(OP_UNKNOWN230),
1077 "OP_UNKNOWN231" => Some(OP_UNKNOWN231),
1078 "OP_UNKNOWN232" => Some(OP_UNKNOWN232),
1079 "OP_UNKNOWN233" => Some(OP_UNKNOWN233),
1080 "OP_UNKNOWN234" => Some(OP_UNKNOWN234),
1081 "OP_UNKNOWN235" => Some(OP_UNKNOWN235),
1082 "OP_UNKNOWN236" => Some(OP_UNKNOWN236),
1083 "OP_UNKNOWN237" => Some(OP_UNKNOWN237),
1084 "OP_UNKNOWN238" => Some(OP_UNKNOWN238),
1085 "OP_UNKNOWN239" => Some(OP_UNKNOWN239),
1086 "OP_UNKNOWN240" => Some(OP_UNKNOWN240),
1087 "OP_UNKNOWN241" => Some(OP_UNKNOWN241),
1088 "OP_UNKNOWN242" => Some(OP_UNKNOWN242),
1089 "OP_UNKNOWN243" => Some(OP_UNKNOWN243),
1090 "OP_UNKNOWN244" => Some(OP_UNKNOWN244),
1091 "OP_UNKNOWN245" => Some(OP_UNKNOWN245),
1092 "OP_UNKNOWN246" => Some(OP_UNKNOWN246),
1093 "OP_UNKNOWN247" => Some(OP_UNKNOWN247),
1094 "OP_UNKNOWN248" => Some(OP_UNKNOWN248),
1095 "OP_UNKNOWN249" => Some(OP_UNKNOWN249),
1096 "OP_SMALLINTEGER" => Some(OP_SMALLINTEGER),
1097 "OP_PUBKEYS" => Some(OP_PUBKEYS),
1098 "OP_UNKNOWN252" => Some(OP_UNKNOWN252),
1099 "OP_PUBKEYHASH" => Some(OP_PUBKEYHASH),
1100 "OP_PUBKEY" => Some(OP_PUBKEY),
1101 "OP_INVALIDOPCODE" => Some(OP_INVALIDOPCODE),
1102 _ => None,
1103 }
1104}
1105
1106pub fn is_small_int_op(op: u8) -> bool {
1114 op == OP_0 || (op >= OP_1 && op <= OP_16)
1115}
1116
1117pub fn is_push_data(op: u8) -> bool {
1125 op >= OP_DATA_1 && op <= OP_PUSHDATA4
1126}