pyflo/pybtc/opcodes.py
2018-05-28 13:59:35 +04:00

156 lines
3.4 KiB
Python

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 )