Exemple #1
0
def transaction__is_final__locktime_less_block_height_less_threshold_returns_true(
):
    height = 100
    time = 100
    instance = bc.Transaction()
    instance.set_locktime(50)
    assert instance.is_final(height, time)
Exemple #2
0
def transaction__double_spends__include_unconfirmed_false_with_unconfirmed__returns_empty(
):
    instance = bc.Transaction()
    input = bc.Input()
    input.previous_output().validation.spent = True
    instance.set_inputs([input])
    assert not instance.double_spends(False)
Exemple #3
0
def transaction__is_coinbase__with_coinbase_input__returns_true():
    input = bc.Input()
    input.set_previous_output(
        bc.OutputPoint.from_tuple(bc.null_hash, bc.max_input_sequence))
    instance = bc.Transaction()
    instance.set_inputs([input])
    assert instance.is_coinbase()
Exemple #4
0
def transaction__inputs_setter_1__roundtrip__success():
    input = bc.Input.from_data(bytes.fromhex(TX0))

    instance = bc.Transaction()
    assert [input] != instance.inputs()
    instance.set_inputs([input])
    assert [input] == instance.inputs()
Exemple #5
0
def transaction__is_double_spend__include_unconfirmed_true_with_unconfirmed__returns_true(
):
    instance = bc.Transaction()
    input = bc.Input()
    input.previous_output().validation.spent = True
    instance.set_inputs([input])
    assert instance.is_double_spend(True)
Exemple #6
0
def transaction__is_final__locktime_less_block_time_greater_threshold__returns_true(
):
    height = bc.locktime_threshold + 100
    time = 100
    instance = bc.Transaction()
    instance.set_locktime(bc.locktime_threshold + 50)
    assert instance.is_final(height, time)
Exemple #7
0
def transaction__operator_boolean_equals__differs__returns_false():
    raw_tx = bytes.fromhex(TX4)
    alpha = bc.Transaction.from_data(raw_tx)
    assert alpha is not None
    beta = bc.Transaction()
    assert beta is not None
    assert alpha != beta
Exemple #8
0
def transaction__outputs_setter_1__roundtrip__success():
    output = bc.Output.from_data(bytes.fromhex(TX0_LAST_OUTPUT))

    instance = bc.Transaction()
    assert [output] != instance.outputs()
    instance.set_outputs([output])
    assert [output] == instance.outputs()
Exemple #9
0
def transaction__missing_previous_outputs__inputs_with_cache_value__returns_empty(
):
    instance = bc.Transaction()
    input = bc.Input()
    input.previous_output().validation.cache.set_value(123)
    instance.set_inputs([input])
    assert not instance.missing_previous_outputs()
Exemple #10
0
def transaction__missing_previous_outputs__inputs_without_cache_value__returns_single_index(
):
    instance = bc.Transaction()
    input = bc.Input()
    instance.set_inputs([input])
    result = instance.missing_previous_outputs()
    assert len(result) == 1
    assert result[-1] == 0
Exemple #11
0
def transaction__total_input_value__cache__returns_cache_value_sum():
    instance = bc.Transaction()
    input0 = bc.Input()
    input1 = bc.Input()
    input0.previous_output().validation.cache.set_value(123)
    input1.previous_output().validation.cache.set_value(123)
    instance.set_inputs([input0, input1])
    assert instance.total_input_value() == 444
Exemple #12
0
def transaction__immature_inputs__immature_inputs__returns_input_indexes():
    instance = bc.Transaction()
    input = bc.Input()
    input.previous_output().validation.height = 20
    instance.set_inputs([input])
    result = instance.immature_inputs(50)
    assert len(result) == 1
    assert result[-1] == 0
Exemple #13
0
def transaction__double_spends__include_unconfirmed_true_with_unconfirmed__returns_expected(
):
    instance = bc.Transaction()
    input = bc.Input()
    input.previous_output().validation.spent = True
    instance.set_inputs([input])
    result = instance.double_spends(True)
    assert len(result) == 1
    assert result[-1] == 0
Exemple #14
0
def transaction__is_overspent__output_exceeds_input__returns_true():
    instance = bc.Transaction()

    output0 = bc.Output()
    output0.set_value(1200)
    output1 = bc.Output()
    output1.set_value(34)
    instance.set_outputs([output0, output1])
    assert instance.is_overspent()
Exemple #15
0
def transaction__total_output_value__non_empty_outputs__returns_sum():
    instance = bc.Transaction()

    output0 = bc.Output()
    output0.set_value(1200)
    output1 = bc.Output()
    output1.set_value(34)
    instance.set_outputs([output0, output1])
    assert instance.total_output_value() == 1234
Exemple #16
0
def transaction__is_final__locktime_input_not_final__returns_false():
    height = 100
    time = 100
    instance = bc.Transaction()
    instance.set_locktime(101)
    input = bc.Input()
    input.sequence = 1
    instance.set_inputs([input])
    assert not instance.is_final(height, time)
Exemple #17
0
def transaction__is_oversized_coinbase__script_size_below_min__returns_true():
    prevout = bc.OutputPoint()
    prevout.base.set_index(bc.Point.null_index)
    prevout.base.set_hash(bc.null_hash)
    input = bc.Input()
    input.set_previous_output(prevout)
    instance = bc.Transaction()
    instance.set_inputs([input])
    assert instance.is_coinbase()
    assert input.script().serialized_size(False) < bc.min_coinbase_size
    assert instance.is_oversized_coinbase()
Exemple #18
0
def transaction__fees__nonempty__returns_outputs_minus_inputs():
    instance = bc.Transaction()
    input0 = bc.Input()
    input1 = bc.Input()
    input0.previous_output().validation.cache.set_value(123)
    input1.previous_output().validation.cache.set_value(321)
    instance.set_inputs([input0, input1])
    output0 = bc.Output()
    output0.set_value(44)
    instance.set_outputs([output0])
    assert instance.fees() == 400
Exemple #19
0
def transaction__is_null_non_coinbase__null_input_prevout__returns_true():
    prevout = bc.OutputPoint()
    prevout.base.set_index(bc.Point.null_index)
    prevout.base.set_hash(bc.null_hash)
    input0 = bc.Input()
    input1 = bc.Input()
    input1.set_previous_output(prevout)
    instance = bc.Transaction()
    instance.set_inputs([input0, input1])
    assert not instance.is_coinbase()
    assert prevout.is_null()
    assert instance.is_null_non_coinbase()
Exemple #20
0
def transaction__is_oversized_coinbase__script_size_above_max__returns_true():
    prevout = bc.OutputPoint()
    prevout.base.set_index(bc.Point.null_index)
    prevout.base.set_hash(bc.null_hash)
    input_script = bc.Script.from_data(
        bytes.fromhex("00" * (bc.max_coinbase_size + 10)), False)
    assert input_script is not None
    input = bc.Input()
    input.set_previous_output(prevout)
    input.set_script(input_script)
    instance = bc.Transaction()
    instance.set_inputs([input])
    assert instance.is_coinbase()
    assert input.script().serialized_size(False) > bc.max_coinbase_size
    assert instance.is_oversized_coinbase()
Exemple #21
0
    async def _build_transaction(self, out, dests, change_pocket=None):
        tx = bc.Transaction()
        tx.set_version(1)
        tx.set_locktime(0)

        inputs = [self._create_input(point) for point in out.points]
        tx.set_inputs(inputs)

        outputs = [self._create_outputs(addr, value) for addr, value in dests]
        if out.change:
            outputs += [self._create_change_output(change_pocket, out.change)]
        random.shuffle(outputs)
        outputs = flatten(outputs)
        tx.set_outputs(outputs)

        return tx
Exemple #22
0
def new_tx(test, sequence=0):
    tx = bc.Transaction()

    input_script = [bc.Script()]
    if not parse(input_script, test[0]):
        return tx

    output_script = [bc.Script()]
    if not parse(output_script, test[1]):
        return tx

    input = bc.Input()
    input.set_sequence(sequence)
    input.set_script(input_script[0])
    input.previous_output().validation.cache.set_script(output_script[0])

    tx.set_inputs([input])
    return tx
Exemple #23
0
def transaction__is_double_spend__empty_inputs__returns_false():
    instance = bc.Transaction()
    assert not instance.is_double_spend(False)
    assert not instance.is_double_spend(True)
Exemple #24
0
def transaction__double_spends__empty_inputs__returns_empty():
    instance = bc.Transaction()
    assert not instance.double_spends(False)
    assert not instance.double_spends(True)
Exemple #25
0
def transaction__is_double_spend__unspent_inputs__returns_false():
    instance = bc.Transaction()
    input = bc.Input()
    instance.set_inputs([input])
    assert not instance.is_double_spend(False)
    assert not instance.is_double_spend(True)
Exemple #26
0
def transaction__double_spends__unspent_inputs__returns_empty():
    instance = bc.Transaction()
    instance.set_inputs([bc.Input()])
    assert not instance.double_spends(False)
    assert not instance.double_spends(True)
Exemple #27
0
def transaction__immature_inputs__mature_inputs__returns_empty():
    input = bc.Input()
    input.previous_output().base.set_index(123)
    instance = bc.Transaction()
    instance.set_inputs([input])
    assert not instance.immature_inputs(453)
Exemple #28
0
def transaction__immature_inputs__empty_inputs__returns_empty():
    instance = bc.Transaction()
    assert not instance.immature_inputs(453)
Exemple #29
0
def transaction__is_immature__immature_inputs__returns_true():
    instance = bc.Transaction()
    input = bc.Input()
    input.previous_output().validation.height = 20
    instance.set_inputs([input])
    assert instance.is_immature(50)
Exemple #30
0
def transaction__is_immature__empty_inputs__returns_false():
    instance = bc.Transaction()
    assert not instance.is_immature(453)