def test_op_checklocktimeverify(): prev_txn_hash = Hash('6eae1e03964799c4e29039db459ea4fad4df57c2b06f730b60032a48fb075620') txn_input = TransactionInput(prev_txn_hash, 0, Script(""), 1) addr = "1HJiL6AYYmtkbJzC9bxAorznWijwNK5Z8E" out_script_pub_key = Script.build_p2pkh( utils.address_to_key_hash(addr)[1]) txn_output = TransactionOutput(9000, out_script_pub_key) # Create the txn txn = Transaction(Transaction.DEFAULT_TRANSACTION_VERSION, [txn_input], [txn_output], 367987) # This is one more (367988) so it should fail s = Script("0x749d05 OP_CHECKLOCKTIMEVERIFY") si = ScriptInterpreter(txn=txn, input_index=0, sub_script=out_script_pub_key) si.run_script(s) assert not si.valid # This is negative, so it should fail s = Script("0xfff74d05 OP_CHECKLOCKTIMEVERIFY") si = ScriptInterpreter(txn=txn, input_index=0, sub_script=out_script_pub_key) si.run_script(s) assert not si.valid # This is one less (367986) so it should pass s = Script("0x729d05 OP_CHECKLOCKTIMEVERIFY") si = ScriptInterpreter(txn=txn, input_index=0, sub_script=out_script_pub_key) si.run_script(s) assert not si.stop # Now reformulate the txn so that the input is finalized txn_input.sequence_num = 0xffffffff si.run_script(s) assert not si.valid # The last check is if there are mismatching notions of locktime txn_input.sequence_num = 1 txn.lock_time = 500000001 si = ScriptInterpreter(txn=txn, input_index=0, sub_script=out_script_pub_key) si.run_script(s) assert not si.valid
def test_disabled_ops(): for opcode in ScriptInterpreter.DISABLED_OPS: si = ScriptInterpreter() si.run_script(Script("OP_1 " + opcode + " OP_2")) assert not si.valid assert list(si.stack) == [1]
def test_disabled_ops(): for opcode in ScriptInterpreter.DISABLED_OPS: si = ScriptInterpreter() si.run_script(Script("OP_1 " + opcode + " OP_2")) assert not si.valid assert list(si.stack) == [1]
def test_op_depth(): s = Script("OP_1 OP_IFDUP OP_DEPTH") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 3 assert list(si.stack) == [1, 1, 2]
def test_op_drop(): s = Script("OP_1 OP_IFDUP OP_DROP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [1]
def test_op_0(): s = Script("OP_0") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[0] == b''
def test_op_size(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 0x010203 OP_SIZE") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 7 assert list(si.stack) == [1, 2, 3, 4, 5, b'\x01\x02\x03', 3]
def test_op_2rot(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_6 OP_2ROT") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 6 assert list(si.stack) == [3, 4, 5, 6, 1, 2]
def test_op_2swap(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_6 OP_2SWAP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 6 assert list(si.stack) == [1, 2, 5, 6, 3, 4]
def test_op_3dup(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_3DUP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 8 assert list(si.stack) == [1, 2, 3, 4, 5, 3, 4, 5]
def test_op_2over(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_2OVER") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 7 assert list(si.stack) == [1, 2, 3, 4, 5, 2, 3]
def test_op_2drop(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_2DROP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 3 assert list(si.stack) == [1, 2, 3]
def test_op_tuck(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_TUCK") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 6 assert list(si.stack) == [1, 2, 3, 5, 4, 5]
def test_op_rot(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_ROT") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 5 assert list(si.stack) == [1, 2, 4, 5, 3]
def test_op_1sub(): s = Script("OP_3 OP_1SUB") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [2]
def test_op_depth(): s = Script("OP_1 OP_IFDUP OP_DEPTH") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 3 assert list(si.stack) == [1, 1, 2]
def test_op_0(): s = Script("OP_0") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[0] == b''
def test_op_1negate(): s = Script("OP_1NEGATE") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[0] == -1
def test_op_add(): s = Script("OP_1 OP_2 OP_ADD") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [3]
def test_op_add(): s = Script("OP_1 OP_2 OP_ADD") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [3]
def test_op_1sub(): s = Script("OP_3 OP_1SUB") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [2]
def test_op_hash160(): s = Script("0x01 OP_HASH160") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[0] == b'\xc5\x1bf\xbc\xed^D\x91\x00\x1b\xd7\x02f\x97p\xdc\xcfD\t\x82'
def test_op_sha256(): s = Script("0x01 OP_SHA256") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[0] == b'K\xf5\x12/4ET\xc5;\xde.\xbb\x8c\xd2\xb7\xe3\xd1`\n\xd61\xc3\x85\xa5\xd7\xcc\xe2<w\x85E\x9a'
def test_op_sha1(): s = Script("0x01 OP_SHA1") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[0] == b'\xbf\x8bE0\xd8\xd2F\xddt\xacS\xa14q\xbb\xa1yA\xdf\xf7'
def test_op_ripemd160(): s = Script("0x01 OP_RIPEMD160") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[0] == b'\xf2\x91\xbaP\x15\xdf4\x8c\x80\x85?\xa5\xbb\x0fyF\xf5\xc9\xe1\xb3'
def test_op_hash256(): s = Script("0x01 OP_HASH256") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[0] == b'\x9c\x12\xcf\xdc\x04\xc7E\x84\xd7\x87\xac=#w!2\xc1\x85$\xbcz\xb2\x8d\xecB\x19\xb8\xfc[B_p'
def test_op_nip(): s = Script("OP_1 OP_2 OP_3 OP_NIP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 2 assert list(si.stack) == [1, 3]
def test_op_2swap(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_6 OP_2SWAP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 6 assert list(si.stack) == [1, 2, 5, 6, 3, 4]
def test_op_3dup(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_3DUP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 8 assert list(si.stack) == [1, 2, 3, 4, 5, 3, 4, 5]
def test_op_2over(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_2OVER") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 7 assert list(si.stack) == [1, 2, 3, 4, 5, 2, 3]
def test_op_tuck(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_TUCK") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 6 assert list(si.stack) == [1, 2, 3, 5, 4, 5]
def test_op_2drop(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_2DROP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 3 assert list(si.stack) == [1, 2, 3]
def test_op_nip(): s = Script("OP_1 OP_2 OP_3 OP_NIP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 2 assert list(si.stack) == [1, 3]
def test_op_abs(): s = Script("OP_3 OP_NEGATE OP_ABS") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [3]
def test_op_drop(): s = Script("OP_1 OP_IFDUP OP_DROP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [1]
def test_op_1negate(): s = Script("OP_1NEGATE") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[0] == -1
def test_op_size(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 0x010203 OP_SIZE") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 7 assert list(si.stack) == [1, 2, 3, 4, 5, b'\x01\x02\x03', 3]
def test_op_abs(): s = Script("OP_3 OP_NEGATE OP_ABS") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [3]
def test_op_return(): s = Script("OP_RETURN 0x010203") si = ScriptInterpreter() si.run_script(s) assert si.stop assert len(si.stack) == 0
def test_op_return(): s = Script("OP_RETURN 0x010203") si = ScriptInterpreter() si.run_script(s) assert si.stop assert len(si.stack) == 0
def test_op_2rot(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_6 OP_2ROT") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 6 assert list(si.stack) == [3, 4, 5, 6, 1, 2]
def test_op_rot(): s = Script("OP_1 OP_2 OP_3 OP_4 OP_5 OP_ROT") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 5 assert list(si.stack) == [1, 2, 4, 5, 3]
def test_op_checklocktimeverify(): prev_txn_hash = Hash( '6eae1e03964799c4e29039db459ea4fad4df57c2b06f730b60032a48fb075620') txn_input = TransactionInput(prev_txn_hash, 0, Script(""), 1) addr = "1HJiL6AYYmtkbJzC9bxAorznWijwNK5Z8E" out_script_pub_key = Script.build_p2pkh(utils.address_to_key_hash(addr)[1]) txn_output = TransactionOutput(9000, out_script_pub_key) # Create the txn txn = Transaction(Transaction.DEFAULT_TRANSACTION_VERSION, [txn_input], [txn_output], 367987) # This is one more (367988) so it should fail s = Script("0x749d05 OP_CHECKLOCKTIMEVERIFY") si = ScriptInterpreter(txn=txn, input_index=0, sub_script=out_script_pub_key) si.run_script(s) assert not si.valid # This is negative, so it should fail s = Script("0xfff74d05 OP_CHECKLOCKTIMEVERIFY") si = ScriptInterpreter(txn=txn, input_index=0, sub_script=out_script_pub_key) si.run_script(s) assert not si.valid # This is one less (367986) so it should pass s = Script("0x729d05 OP_CHECKLOCKTIMEVERIFY") si = ScriptInterpreter(txn=txn, input_index=0, sub_script=out_script_pub_key) si.run_script(s) assert not si.stop # Now reformulate the txn so that the input is finalized txn_input.sequence_num = 0xffffffff si.run_script(s) assert not si.valid # The last check is if there are mismatching notions of locktime txn_input.sequence_num = 1 txn.lock_time = 500000001 si = ScriptInterpreter(txn=txn, input_index=0, sub_script=out_script_pub_key) si.run_script(s) assert not si.valid
def test_op_dup(): s = Script("0x01 OP_DUP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 2 assert si.stack[0] == b'\x01' assert si.stack[1] == b'\x01'
def test_op_push(): s = Script("0x02 0x03") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 2 assert si.stack[0] == b'\x02' assert si.stack[1] == b'\x03'
def test_op_push(): s = Script("0x02 0x03") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 2 assert si.stack[0] == b'\x02' assert si.stack[1] == b'\x03'
def test_op_pushnum(): for i in range(1, 17): s = Script("OP_%d" % i) si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[0] == i
def test_op_dup(): s = Script("0x01 OP_DUP") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 2 assert si.stack[0] == b'\x01' assert si.stack[1] == b'\x01'
def test_op_hash256(): s = Script("0x01 OP_HASH256") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[ 0] == b'\x9c\x12\xcf\xdc\x04\xc7E\x84\xd7\x87\xac=#w!2\xc1\x85$\xbcz\xb2\x8d\xecB\x19\xb8\xfc[B_p'
def test_op_sha256(): s = Script("0x01 OP_SHA256") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[ 0] == b'K\xf5\x12/4ET\xc5;\xde.\xbb\x8c\xd2\xb7\xe3\xd1`\n\xd61\xc3\x85\xa5\xd7\xcc\xe2<w\x85E\x9a'
def test_op_hash160(): s = Script("0x01 OP_HASH160") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[ 0] == b'\xc5\x1bf\xbc\xed^D\x91\x00\x1b\xd7\x02f\x97p\xdc\xcfD\t\x82'
def test_op_ripemd160(): s = Script("0x01 OP_RIPEMD160") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[ 0] == b'\xf2\x91\xbaP\x15\xdf4\x8c\x80\x85?\xa5\xbb\x0fyF\xf5\xc9\xe1\xb3'
def test_op_sha1(): s = Script("0x01 OP_SHA1") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[ 0] == b'\xbf\x8bE0\xd8\xd2F\xddt\xacS\xa14q\xbb\xa1yA\xdf\xf7'
def test_op_pushnum(): for i in range(1, 17): s = Script("OP_%d" % i) si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert si.stack[0] == i
def test_op_fromaltstack(): s = Script("OP_1 OP_2 OP_TOALTSTACK OP_FROMALTSTACK") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 2 assert si.stack[-1] == 2 assert si.stack[-2] == 1 assert len(si._alt_stack) == 0
def test_op_fromaltstack(): s = Script("OP_1 OP_2 OP_TOALTSTACK OP_FROMALTSTACK") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 2 assert si.stack[-1] == 2 assert si.stack[-2] == 1 assert len(si._alt_stack) == 0
def test_op_negate(): s = Script("OP_3 OP_NEGATE") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [-3] si.run_script(Script("OP_NEGATE")) assert list(si.stack) == [3]
def test_op_negate(): s = Script("OP_3 OP_NEGATE") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [-3] si.run_script(Script("OP_NEGATE")) assert list(si.stack) == [3]
def test_op_within(): s = Script("OP_4 OP_1 OP_15 OP_WITHIN") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [1] s = Script("OP_4 OP_5 OP_15 OP_WITHIN") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [0] s = Script("OP_4 OP_4 OP_15 OP_WITHIN") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [1] s = Script("OP_15 OP_4 OP_15 OP_WITHIN") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [0]
def test_op_within(): s = Script("OP_4 OP_1 OP_15 OP_WITHIN") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [1] s = Script("OP_4 OP_5 OP_15 OP_WITHIN") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [0] s = Script("OP_4 OP_4 OP_15 OP_WITHIN") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [1] s = Script("OP_15 OP_4 OP_15 OP_WITHIN") si = ScriptInterpreter() si.run_script(s) assert len(si.stack) == 1 assert list(si.stack) == [0]