from binascii import hexlify OPCODE = dict() # push opcodes OPCODE["OP_FALSE"] = 0x00 OPCODE["OP_0"] = 0x00 OPCODE["OP_PUSHDATA1"] = 0x4c OPCODE["OP_PUSHDATA2"] = 0x4d OPCODE["OP_PUSHDATA4"] = 0x4e OPCODE["OP_1NEGATE"] = 0x4f OPCODE["OP_RESERVED"] = 0x50 OPCODE["OP_1"] = 0x51 OPCODE["OP_TRUE"] = 0x51 OPCODE["OP_2"] = 0x52 OPCODE["OP_3"] = 0x53 OPCODE["OP_4"] = 0x54 OPCODE["OP_5"] = 0x55 OPCODE["OP_6"] = 0x56 OPCODE["OP_7"] = 0x57 OPCODE["OP_8"] = 0x58 OPCODE["OP_9"] = 0x59 OPCODE["OP_10"] = 0x5a OPCODE["OP_11"] = 0x5b OPCODE["OP_12"] = 0x5c OPCODE["OP_13"] = 0x5d OPCODE["OP_14"] = 0x5e OPCODE["OP_15"] = 0x5f OPCODE["OP_16"] = 0x60 # control OPCODE["OP_NOP"] = 0x61 OPCODE["OP_VER"] = 0x62 OPCODE["OP_IF"] = 0x63 OPCODE["OP_NOTIF"] = 0x64 OPCODE["OP_VERIF"] = 0x65 OPCODE["OP_ELSE"] = 0x67 OPCODE["OP_ENDIF"] = 0x68 OPCODE["OP_VERIFY"] = 0x69 OPCODE["OP_RETURN"] = 0x6a # stack OPCODE["OP_TOALTSTACK"] = 0x6b OPCODE["OP_FROMALTSTACK"] = 0x6c OPCODE["OP_2DROP"] = 0x6d OPCODE["OP_2DUP"] = 0x6e OPCODE["OP_3DUP"] = 0x6f OPCODE["OP_2OVER"] = 0x70 OPCODE["OP_2ROT"] = 0x71 OPCODE["OP_2SWAP"] = 0x72 OPCODE["OP_IFDUP"] = 0x73 OPCODE["OP_DEPTH"] = 0x74 OPCODE["OP_DROP"] = 0x75 OPCODE["OP_DUP"] = 0x76 OPCODE["OP_NIP"] = 0x77 OPCODE["OP_OVER"] = 0x78 OPCODE["OP_PICK"] = 0x79 OPCODE["OP_ROLL"] = 0x7a OPCODE["OP_ROT"] = 0x7b OPCODE["OP_SWAP"] = 0x7c OPCODE["OP_TUCK"] = 0x7d # splice OPCODE["OP_CAT"] = 0x7e OPCODE["OP_SUBSTR"] = 0x7f OPCODE["OP_LEFT"] = 0x80 OPCODE["OP_RIGHT"] = 0x81 OPCODE["OP_SIZE"] = 0x82 # bit operations OPCODE["OP_INVERT"] = 0x83 OPCODE["OP_AND"] = 0x84 OPCODE["OP_OR"] = 0x85 OPCODE["OP_XOR"] = 0x86 OPCODE["OP_EQUAL"] = 0x87 OPCODE["OP_EQUALVERIFY"] = 0x88 OPCODE["OP_RESERVED1"] = 0x89 OPCODE["OP_RESERVED2"] = 0x8a # math OPCODE["OP_1ADD"] = 0x8b OPCODE["OP_1SUB"] = 0x8c OPCODE["OP_2MUL"] = 0x8d OPCODE["OP_2DIV"] = 0x8e OPCODE["OP_NEGATE"] = 0x8f OPCODE["OP_ABS"] = 0x90 OPCODE["OP_NOT"] = 0x91 OPCODE["OP_0NOTEQUAL"] = 0x92 OPCODE["OP_ADD"] = 0x93 OPCODE["OP_SUB"] = 0x94 OPCODE["OP_MUL"] = 0x95 OPCODE["OP_DIV"] = 0x96 OPCODE["OP_MOD"] = 0x97 OPCODE["OP_LSHIFT"] = 0x98 OPCODE["OP_RSHIFT"] = 0x99 OPCODE["OP_BOOLAND"] = 0x9a OPCODE["OP_BOOLOR"] = 0x9b OPCODE["OP_NUMEQUAL"] = 0x9c OPCODE["OP_NUMEQUALVERIFY"] = 0x9d OPCODE["OP_NUMNOTEQUAL"] = 0x9e OPCODE["OP_LESSTHAN"] = 0x9f OPCODE["OP_GREATERTHAN"] = 0xa0 OPCODE["OP_LESSTHANOREQUAL"] = 0xa1 OPCODE["OP_GREATERTHANOREQUAL"] = 0xa2 OPCODE["OP_MIN"] = 0xa3 OPCODE["OP_MAX"] = 0xa4 OPCODE["OP_WITHIN"] = 0xa5 # crypto OPCODE["OP_RIPEMD160"] = 0xa6 OPCODE["OP_SHA1"] = 0xa7 OPCODE["OP_SHA256"] = 0xa8 OPCODE["OP_HASH160"] = 0xa9 OPCODE["OP_HASH256"] = 0xaa OPCODE["OP_CODESEPARATOR"] = 0xab OPCODE["OP_CHECKSIG"] = 0xac OPCODE["OP_CHECKSIGVERIFY"] = 0xad OPCODE["OP_CHECKMULTISIG"] = 0xae OPCODE["OP_CHECKMULTISIGVERIFY"] = 0xaf # expansion OPCODE["OP_NOP1"] = 0xb0 OPCODE["OP_CHECKLOCKTIMEVERIFY"] = 0xb1 OPCODE["OP_CHECKSEQUENCEVERIFY"] = 0xb2 OPCODE["OP_NOP4"] = 0xb3 OPCODE["OP_NOP5"] = 0xb4 OPCODE["OP_NOP6"] = 0xb5 OPCODE["OP_NOP7"] = 0xb6 OPCODE["OP_NOP8"] = 0xb7 OPCODE["OP_NOP9"] = 0xb8 OPCODE["OP_NOP10"] = 0xb9 # template matching params OPCODE["OP_SMALLINTEGER"] = 0xfa OPCODE["OP_PUBKEYS"] = 0xfb OPCODE["OP_PUBKEYHASH"] = 0xfd OPCODE["OP_PUBKEY"] = 0xfe OPCODE["OP_INVALIDOPCODE"] = 0xff RAW_OPCODE = dict((OPCODE[i], i) for i in OPCODE) BYTE_OPCODE = dict((i, bytes([OPCODE[i]])) for i in OPCODE) HEX_OPCODE = dict((i, hexlify(bytes([OPCODE[i]])).decode()) for i in OPCODE) OP_FALSE = BYTE_OPCODE["OP_FALSE"] OP_0 = BYTE_OPCODE["OP_0"] OP_PUSHDATA1 = BYTE_OPCODE["OP_PUSHDATA1"] OP_PUSHDATA2 = BYTE_OPCODE["OP_PUSHDATA2"] OP_PUSHDATA4 = BYTE_OPCODE["OP_PUSHDATA4"] OP_1NEGATE = BYTE_OPCODE["OP_1NEGATE"] OP_RESERVED = BYTE_OPCODE["OP_RESERVED"] OP_1 = BYTE_OPCODE["OP_1"] OP_TRUE = BYTE_OPCODE["OP_TRUE"] OP_2 = BYTE_OPCODE["OP_2"] OP_3 = BYTE_OPCODE["OP_3"] OP_4 = BYTE_OPCODE["OP_4"] OP_5 = BYTE_OPCODE["OP_5"] OP_6 = BYTE_OPCODE["OP_6"] OP_7 = BYTE_OPCODE["OP_7"] OP_8 = BYTE_OPCODE["OP_8"] OP_9 = BYTE_OPCODE["OP_9"] OP_10 = BYTE_OPCODE["OP_10"] OP_11 = BYTE_OPCODE["OP_11"] OP_12 = BYTE_OPCODE["OP_12"] OP_13 = BYTE_OPCODE["OP_13"] OP_14 = BYTE_OPCODE["OP_14"] OP_15 = BYTE_OPCODE["OP_15"] OP_16 = BYTE_OPCODE["OP_16"] # control OP_NOP = BYTE_OPCODE["OP_NOP"] OP_VER = BYTE_OPCODE["OP_VER"] OP_IF = BYTE_OPCODE["OP_IF"] OP_NOTIF = BYTE_OPCODE["OP_NOTIF"] OP_VERIF = BYTE_OPCODE["OP_VERIF"] OP_ELSE = BYTE_OPCODE["OP_ELSE"] OP_ENDIF = BYTE_OPCODE["OP_ENDIF"] OP_VERIFY = BYTE_OPCODE["OP_VERIFY"] OP_RETURN = BYTE_OPCODE["OP_RETURN"] # stack OP_TOALTSTACK = BYTE_OPCODE["OP_TOALTSTACK"] OP_FROMALTSTACK = BYTE_OPCODE["OP_FROMALTSTACK"] OP_2DROP = BYTE_OPCODE["OP_2DROP"] OP_2DUP = BYTE_OPCODE["OP_2DUP"] OP_3DUP = BYTE_OPCODE["OP_3DUP"] OP_2OVER = BYTE_OPCODE["OP_2OVER"] OP_2ROT = BYTE_OPCODE["OP_2ROT"] OP_2SWAP = BYTE_OPCODE["OP_2SWAP"] OP_IFDUP = BYTE_OPCODE["OP_IFDUP"] OP_DEPTH = BYTE_OPCODE["OP_DEPTH"] OP_DROP = BYTE_OPCODE["OP_DROP"] OP_DUP = BYTE_OPCODE["OP_DUP"] OP_NIP = BYTE_OPCODE["OP_NIP"] OP_OVER = BYTE_OPCODE["OP_OVER"] OP_PICK = BYTE_OPCODE["OP_PICK"] OP_ROLL = BYTE_OPCODE["OP_ROLL"] OP_ROT = BYTE_OPCODE["OP_ROT"] OP_SWAP = BYTE_OPCODE["OP_SWAP"] OP_TUCK = BYTE_OPCODE["OP_TUCK"] # splice OP_CAT = BYTE_OPCODE["OP_CAT"] OP_SUBSTR = BYTE_OPCODE["OP_SUBSTR"] OP_LEFT = BYTE_OPCODE["OP_LEFT"] OP_RIGHT = BYTE_OPCODE["OP_RIGHT"] OP_SIZE = BYTE_OPCODE["OP_SIZE"] # bit operations OP_INVERT = BYTE_OPCODE["OP_INVERT"] OP_AND = BYTE_OPCODE["OP_AND"] OP_OR = BYTE_OPCODE["OP_OR"] OP_XOR = BYTE_OPCODE["OP_XOR"] OP_EQUAL = BYTE_OPCODE["OP_EQUAL"] OP_EQUALVERIFY = BYTE_OPCODE["OP_EQUALVERIFY"] OP_RESERVED1 = BYTE_OPCODE["OP_RESERVED1"] OP_RESERVED2 = BYTE_OPCODE["OP_RESERVED2"] # math OP_1ADD = BYTE_OPCODE["OP_1ADD"] OP_1SUB = BYTE_OPCODE["OP_1SUB"] OP_2MUL = BYTE_OPCODE["OP_2MUL"] OP_2DIV = BYTE_OPCODE["OP_2DIV"] OP_NEGATE = BYTE_OPCODE["OP_NEGATE"] OP_ABS = BYTE_OPCODE["OP_ABS"] OP_NOT = BYTE_OPCODE["OP_NOT"] OP_0NOTEQUAL = BYTE_OPCODE["OP_0NOTEQUAL"] OP_ADD = BYTE_OPCODE["OP_ADD"] OP_SUB = BYTE_OPCODE["OP_SUB"] OP_MUL = BYTE_OPCODE["OP_MUL"] OP_DIV = BYTE_OPCODE["OP_DIV"] OP_MOD = BYTE_OPCODE["OP_MOD"] OP_LSHIFT = BYTE_OPCODE["OP_LSHIFT"] OP_RSHIFT = BYTE_OPCODE["OP_RSHIFT"] OP_BOOLAND = BYTE_OPCODE["OP_BOOLAND"] OP_BOOLOR = BYTE_OPCODE["OP_BOOLOR"] OP_NUMEQUAL = BYTE_OPCODE["OP_NUMEQUAL"] OP_NUMEQUALVERIFY = BYTE_OPCODE["OP_NUMEQUALVERIFY"] OP_NUMNOTEQUAL = BYTE_OPCODE["OP_NUMNOTEQUAL"] OP_LESSTHAN = BYTE_OPCODE["OP_LESSTHAN"] OP_GREATERTHAN = BYTE_OPCODE["OP_GREATERTHAN"] OP_LESSTHANOREQUAL = BYTE_OPCODE["OP_LESSTHANOREQUAL"] OP_GREATERTHANOREQUAL = BYTE_OPCODE["OP_GREATERTHANOREQUAL"] OP_MIN = BYTE_OPCODE["OP_MIN"] OP_MAX = BYTE_OPCODE["OP_MAX"] OP_WITHIN = BYTE_OPCODE["OP_WITHIN"] # crypto OP_RIPEMD160 = BYTE_OPCODE["OP_RIPEMD160"] OP_SHA1 = BYTE_OPCODE["OP_SHA1"] OP_SHA256 = BYTE_OPCODE["OP_SHA256"] OP_HASH160 = BYTE_OPCODE["OP_HASH160"] OP_HASH256 = BYTE_OPCODE["OP_HASH256"] OP_CODESEPARATOR = BYTE_OPCODE["OP_CODESEPARATOR"] OP_CHECKSIG = BYTE_OPCODE["OP_CHECKSIG"] OP_CHECKSIGVERIFY = BYTE_OPCODE["OP_CHECKSIGVERIFY"] OP_CHECKMULTISIG = BYTE_OPCODE["OP_CHECKMULTISIG"] OP_CHECKMULTISIGVERIFY = BYTE_OPCODE["OP_CHECKMULTISIGVERIFY"] # expansion OP_NOP1 = BYTE_OPCODE["OP_NOP1"] OP_CHECKLOCKTIMEVERIFY = BYTE_OPCODE["OP_CHECKLOCKTIMEVERIFY"] OP_CHECKSEQUENCEVERIFY = BYTE_OPCODE["OP_CHECKSEQUENCEVERIFY"] OP_NOP4 = BYTE_OPCODE["OP_NOP4"] OP_NOP5 = BYTE_OPCODE["OP_NOP5"] OP_NOP6 = BYTE_OPCODE["OP_NOP6"] OP_NOP7 = BYTE_OPCODE["OP_NOP7"] OP_NOP8 = BYTE_OPCODE["OP_NOP8"] OP_NOP9 = BYTE_OPCODE["OP_NOP9"] OP_NOP10 = BYTE_OPCODE["OP_NOP10"] # template matching params OP_SMALLINTEGER = BYTE_OPCODE["OP_SMALLINTEGER"] OP_PUBKEYS = BYTE_OPCODE["OP_PUBKEYS"] OP_PUBKEYHASH = BYTE_OPCODE["OP_PUBKEYHASH"] OP_PUBKEY = BYTE_OPCODE["OP_PUBKEY"] OP_INVALIDOPCODE = BYTE_OPCODE["OP_INVALIDOPCODE"]