示例#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)
示例#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)
示例#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()
示例#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()
示例#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)
示例#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)
示例#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
示例#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()
示例#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()
示例#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
示例#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
示例#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
示例#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
示例#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()
示例#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
示例#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)
示例#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()
示例#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
示例#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()
示例#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()
示例#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
示例#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
示例#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)
示例#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)
示例#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)
示例#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)
示例#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)
示例#28
0
def transaction__immature_inputs__empty_inputs__returns_empty():
    instance = bc.Transaction()
    assert not instance.immature_inputs(453)
示例#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)
示例#30
0
def transaction__is_immature__empty_inputs__returns_false():
    instance = bc.Transaction()
    assert not instance.is_immature(453)