Changeset View
Changeset View
Standalone View
Standalone View
test/functional/test_framework/script.py
Show All 19 Lines | if sys.version > '3': | ||||
def bchr(x): return bytes([x]) | def bchr(x): return bytes([x]) | ||||
def bord(x): return x | def bord(x): return x | ||||
import struct | import struct | ||||
from .bignum import bn2vch | from .bignum import bn2vch | ||||
MAX_SCRIPT_SIZE = 10000 | |||||
MAX_SCRIPT_ELEMENT_SIZE = 520 | MAX_SCRIPT_ELEMENT_SIZE = 520 | ||||
MAX_SCRIPT_OPCODES = 201 | |||||
OPCODE_NAMES = {} | OPCODE_NAMES = {} | ||||
def hash160(s): | def hash160(s): | ||||
return hashlib.new('ripemd160', sha256(s)).digest() | return hashlib.new('ripemd160', sha256(s)).digest() | ||||
▲ Show 20 Lines • Show All 213 Lines • ▼ Show 20 Lines | |||||
# template matching params | # template matching params | ||||
OP_SMALLINTEGER = CScriptOp(0xfa) | OP_SMALLINTEGER = CScriptOp(0xfa) | ||||
OP_PUBKEYS = CScriptOp(0xfb) | OP_PUBKEYS = CScriptOp(0xfb) | ||||
OP_PUBKEYHASH = CScriptOp(0xfd) | OP_PUBKEYHASH = CScriptOp(0xfd) | ||||
OP_PUBKEY = CScriptOp(0xfe) | OP_PUBKEY = CScriptOp(0xfe) | ||||
OP_INVALIDOPCODE = CScriptOp(0xff) | OP_INVALIDOPCODE = CScriptOp(0xff) | ||||
VALID_OPCODES = { | |||||
OP_1NEGATE, | |||||
OP_RESERVED, | |||||
OP_1, | |||||
OP_2, | |||||
OP_3, | |||||
OP_4, | |||||
OP_5, | |||||
OP_6, | |||||
OP_7, | |||||
OP_8, | |||||
OP_9, | |||||
OP_10, | |||||
OP_11, | |||||
OP_12, | |||||
OP_13, | |||||
OP_14, | |||||
OP_15, | |||||
OP_16, | |||||
OP_NOP, | |||||
OP_VER, | |||||
OP_IF, | |||||
OP_NOTIF, | |||||
OP_VERIF, | |||||
OP_VERNOTIF, | |||||
OP_ELSE, | |||||
OP_ENDIF, | |||||
OP_VERIFY, | |||||
OP_RETURN, | |||||
OP_TOALTSTACK, | |||||
OP_FROMALTSTACK, | |||||
OP_2DROP, | |||||
OP_2DUP, | |||||
OP_3DUP, | |||||
OP_2OVER, | |||||
OP_2ROT, | |||||
OP_2SWAP, | |||||
OP_IFDUP, | |||||
OP_DEPTH, | |||||
OP_DROP, | |||||
OP_DUP, | |||||
OP_NIP, | |||||
OP_OVER, | |||||
OP_PICK, | |||||
OP_ROLL, | |||||
OP_ROT, | |||||
OP_SWAP, | |||||
OP_TUCK, | |||||
OP_CAT, | |||||
OP_SPLIT, | |||||
OP_NUM2BIN, | |||||
OP_BIN2NUM, | |||||
OP_SIZE, | |||||
OP_INVERT, | |||||
OP_AND, | |||||
OP_OR, | |||||
OP_XOR, | |||||
OP_EQUAL, | |||||
OP_EQUALVERIFY, | |||||
OP_RESERVED1, | |||||
OP_RESERVED2, | |||||
OP_1ADD, | |||||
OP_1SUB, | |||||
OP_2MUL, | |||||
OP_2DIV, | |||||
OP_NEGATE, | |||||
OP_ABS, | |||||
OP_NOT, | |||||
OP_0NOTEQUAL, | |||||
OP_ADD, | |||||
OP_SUB, | |||||
OP_MUL, | |||||
OP_DIV, | |||||
OP_MOD, | |||||
OP_LSHIFT, | |||||
OP_RSHIFT, | |||||
OP_BOOLAND, | |||||
OP_BOOLOR, | |||||
OP_NUMEQUAL, | |||||
OP_NUMEQUALVERIFY, | |||||
OP_NUMNOTEQUAL, | |||||
OP_LESSTHAN, | |||||
OP_GREATERTHAN, | |||||
OP_LESSTHANOREQUAL, | |||||
OP_GREATERTHANOREQUAL, | |||||
OP_MIN, | |||||
OP_MAX, | |||||
OP_WITHIN, | |||||
OP_RIPEMD160, | |||||
OP_SHA1, | |||||
OP_SHA256, | |||||
OP_HASH160, | |||||
OP_HASH256, | |||||
OP_CODESEPARATOR, | |||||
OP_CHECKSIG, | |||||
OP_CHECKSIGVERIFY, | |||||
OP_CHECKMULTISIG, | |||||
OP_CHECKMULTISIGVERIFY, | |||||
OP_CHECKDATASIG, | |||||
OP_CHECKDATASIGVERIFY, | |||||
OP_NOP1, | |||||
OP_CHECKLOCKTIMEVERIFY, | |||||
OP_CHECKSEQUENCEVERIFY, | |||||
OP_NOP4, | |||||
OP_NOP5, | |||||
OP_NOP6, | |||||
OP_NOP7, | |||||
OP_NOP8, | |||||
OP_NOP9, | |||||
OP_NOP10, | |||||
OP_SMALLINTEGER, | |||||
OP_PUBKEYS, | |||||
OP_PUBKEYHASH, | |||||
OP_PUBKEY, | |||||
} | |||||
OPCODE_NAMES.update({ | OPCODE_NAMES.update({ | ||||
OP_0: 'OP_0', | OP_0: 'OP_0', | ||||
OP_PUSHDATA1: 'OP_PUSHDATA1', | OP_PUSHDATA1: 'OP_PUSHDATA1', | ||||
OP_PUSHDATA2: 'OP_PUSHDATA2', | OP_PUSHDATA2: 'OP_PUSHDATA2', | ||||
OP_PUSHDATA4: 'OP_PUSHDATA4', | OP_PUSHDATA4: 'OP_PUSHDATA4', | ||||
OP_1NEGATE: 'OP_1NEGATE', | OP_1NEGATE: 'OP_1NEGATE', | ||||
OP_RESERVED: 'OP_RESERVED', | OP_RESERVED: 'OP_RESERVED', | ||||
OP_1: 'OP_1', | OP_1: 'OP_1', | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | OPCODE_NAMES.update({ | ||||
OP_NOP10: 'OP_NOP10', | OP_NOP10: 'OP_NOP10', | ||||
OP_SMALLINTEGER: 'OP_SMALLINTEGER', | OP_SMALLINTEGER: 'OP_SMALLINTEGER', | ||||
OP_PUBKEYS: 'OP_PUBKEYS', | OP_PUBKEYS: 'OP_PUBKEYS', | ||||
OP_PUBKEYHASH: 'OP_PUBKEYHASH', | OP_PUBKEYHASH: 'OP_PUBKEYHASH', | ||||
OP_PUBKEY: 'OP_PUBKEY', | OP_PUBKEY: 'OP_PUBKEY', | ||||
OP_INVALIDOPCODE: 'OP_INVALIDOPCODE', | OP_INVALIDOPCODE: 'OP_INVALIDOPCODE', | ||||
}) | }) | ||||
OPCODES_BY_NAME = { | |||||
'OP_0': OP_0, | |||||
'OP_PUSHDATA1': OP_PUSHDATA1, | |||||
'OP_PUSHDATA2': OP_PUSHDATA2, | |||||
'OP_PUSHDATA4': OP_PUSHDATA4, | |||||
'OP_1NEGATE': OP_1NEGATE, | |||||
'OP_RESERVED': OP_RESERVED, | |||||
'OP_1': OP_1, | |||||
'OP_2': OP_2, | |||||
'OP_3': OP_3, | |||||
'OP_4': OP_4, | |||||
'OP_5': OP_5, | |||||
'OP_6': OP_6, | |||||
'OP_7': OP_7, | |||||
'OP_8': OP_8, | |||||
'OP_9': OP_9, | |||||
'OP_10': OP_10, | |||||
'OP_11': OP_11, | |||||
'OP_12': OP_12, | |||||
'OP_13': OP_13, | |||||
'OP_14': OP_14, | |||||
'OP_15': OP_15, | |||||
'OP_16': OP_16, | |||||
'OP_NOP': OP_NOP, | |||||
'OP_VER': OP_VER, | |||||
'OP_IF': OP_IF, | |||||
'OP_NOTIF': OP_NOTIF, | |||||
'OP_VERIF': OP_VERIF, | |||||
'OP_VERNOTIF': OP_VERNOTIF, | |||||
'OP_ELSE': OP_ELSE, | |||||
'OP_ENDIF': OP_ENDIF, | |||||
'OP_VERIFY': OP_VERIFY, | |||||
'OP_RETURN': OP_RETURN, | |||||
'OP_TOALTSTACK': OP_TOALTSTACK, | |||||
'OP_FROMALTSTACK': OP_FROMALTSTACK, | |||||
'OP_2DROP': OP_2DROP, | |||||
'OP_2DUP': OP_2DUP, | |||||
'OP_3DUP': OP_3DUP, | |||||
'OP_2OVER': OP_2OVER, | |||||
'OP_2ROT': OP_2ROT, | |||||
'OP_2SWAP': OP_2SWAP, | |||||
'OP_IFDUP': OP_IFDUP, | |||||
'OP_DEPTH': OP_DEPTH, | |||||
'OP_DROP': OP_DROP, | |||||
'OP_DUP': OP_DUP, | |||||
'OP_NIP': OP_NIP, | |||||
'OP_OVER': OP_OVER, | |||||
'OP_PICK': OP_PICK, | |||||
'OP_ROLL': OP_ROLL, | |||||
'OP_ROT': OP_ROT, | |||||
'OP_SWAP': OP_SWAP, | |||||
'OP_TUCK': OP_TUCK, | |||||
'OP_CAT': OP_CAT, | |||||
'OP_SPLIT': OP_SPLIT, | |||||
'OP_NUM2BIN': OP_NUM2BIN, | |||||
'OP_BIN2NUM': OP_BIN2NUM, | |||||
'OP_SIZE': OP_SIZE, | |||||
'OP_INVERT': OP_INVERT, | |||||
'OP_AND': OP_AND, | |||||
'OP_OR': OP_OR, | |||||
'OP_XOR': OP_XOR, | |||||
'OP_EQUAL': OP_EQUAL, | |||||
'OP_EQUALVERIFY': OP_EQUALVERIFY, | |||||
'OP_RESERVED1': OP_RESERVED1, | |||||
'OP_RESERVED2': OP_RESERVED2, | |||||
'OP_1ADD': OP_1ADD, | |||||
'OP_1SUB': OP_1SUB, | |||||
'OP_2MUL': OP_2MUL, | |||||
'OP_2DIV': OP_2DIV, | |||||
'OP_NEGATE': OP_NEGATE, | |||||
'OP_ABS': OP_ABS, | |||||
'OP_NOT': OP_NOT, | |||||
'OP_0NOTEQUAL': OP_0NOTEQUAL, | |||||
'OP_ADD': OP_ADD, | |||||
'OP_SUB': OP_SUB, | |||||
'OP_MUL': OP_MUL, | |||||
'OP_DIV': OP_DIV, | |||||
'OP_MOD': OP_MOD, | |||||
'OP_LSHIFT': OP_LSHIFT, | |||||
'OP_RSHIFT': OP_RSHIFT, | |||||
'OP_BOOLAND': OP_BOOLAND, | |||||
'OP_BOOLOR': OP_BOOLOR, | |||||
'OP_NUMEQUAL': OP_NUMEQUAL, | |||||
'OP_NUMEQUALVERIFY': OP_NUMEQUALVERIFY, | |||||
'OP_NUMNOTEQUAL': OP_NUMNOTEQUAL, | |||||
'OP_LESSTHAN': OP_LESSTHAN, | |||||
'OP_GREATERTHAN': OP_GREATERTHAN, | |||||
'OP_LESSTHANOREQUAL': OP_LESSTHANOREQUAL, | |||||
'OP_GREATERTHANOREQUAL': OP_GREATERTHANOREQUAL, | |||||
'OP_MIN': OP_MIN, | |||||
'OP_MAX': OP_MAX, | |||||
'OP_WITHIN': OP_WITHIN, | |||||
'OP_RIPEMD160': OP_RIPEMD160, | |||||
'OP_SHA1': OP_SHA1, | |||||
'OP_SHA256': OP_SHA256, | |||||
'OP_HASH160': OP_HASH160, | |||||
'OP_HASH256': OP_HASH256, | |||||
'OP_CODESEPARATOR': OP_CODESEPARATOR, | |||||
'OP_CHECKSIG': OP_CHECKSIG, | |||||
'OP_CHECKSIGVERIFY': OP_CHECKSIGVERIFY, | |||||
'OP_CHECKMULTISIG': OP_CHECKMULTISIG, | |||||
'OP_CHECKMULTISIGVERIFY': OP_CHECKMULTISIGVERIFY, | |||||
'OP_CHECKDATASIG': OP_CHECKDATASIG, | |||||
'OP_CHECKDATASIGVERIFY': OP_CHECKDATASIGVERIFY, | |||||
'OP_NOP1': OP_NOP1, | |||||
'OP_CHECKLOCKTIMEVERIFY': OP_CHECKLOCKTIMEVERIFY, | |||||
'OP_CHECKSEQUENCEVERIFY': OP_CHECKSEQUENCEVERIFY, | |||||
'OP_NOP4': OP_NOP4, | |||||
'OP_NOP5': OP_NOP5, | |||||
'OP_NOP6': OP_NOP6, | |||||
'OP_NOP7': OP_NOP7, | |||||
'OP_NOP8': OP_NOP8, | |||||
'OP_NOP9': OP_NOP9, | |||||
'OP_NOP10': OP_NOP10, | |||||
'OP_SMALLINTEGER': OP_SMALLINTEGER, | |||||
'OP_PUBKEYS': OP_PUBKEYS, | |||||
'OP_PUBKEYHASH': OP_PUBKEYHASH, | |||||
'OP_PUBKEY': OP_PUBKEY, | |||||
} | |||||
class CScriptInvalidError(Exception): | class CScriptInvalidError(Exception): | ||||
"""Base class for CScript exceptions""" | """Base class for CScript exceptions""" | ||||
pass | pass | ||||
class CScriptTruncatedPushDataError(CScriptInvalidError): | class CScriptTruncatedPushDataError(CScriptInvalidError): | ||||
"""Invalid pushdata due to truncation""" | """Invalid pushdata due to truncation""" | ||||
▲ Show 20 Lines • Show All 340 Lines • Show Last 20 Lines |