def test_transaction_deserialization(user_input, user_output, data):
    from bigchaindb.common.transaction import Transaction
    from .utils import validate_transaction_model

    expected_asset = {'data': data}
    expected = Transaction(Transaction.CREATE, expected_asset, [user_input],
                           [user_output], None, Transaction.VERSION)

    tx = {
        'version': Transaction.VERSION,
        # NOTE: This test assumes that Inputs and Outputs can
        #       successfully be serialized
        'inputs': [user_input.to_dict()],
        'outputs': [user_output.to_dict()],
        'operation': Transaction.CREATE,
        'metadata': None,
        'asset': {
            'data': data,
        }
    }
    tx_no_signatures = Transaction._remove_signatures(tx)
    tx['id'] = Transaction._to_hash(Transaction._to_str(tx_no_signatures))
    tx = Transaction.from_dict(tx)

    assert tx == expected

    validate_transaction_model(tx)
def test_validate_input_with_invalid_parameters(utx):
    from bigchaindb.common.transaction import Transaction

    input_conditions = [out.fulfillment.condition_uri for out in utx.outputs]
    tx_dict = utx.to_dict()
    tx_dict = Transaction._remove_signatures(tx_dict)
    tx_serialized = Transaction._to_str(tx_dict)
    valid = utx._input_valid(utx.inputs[0], tx_serialized, input_conditions)
    assert not valid
Exemplo n.º 3
0
def get_message_to_sign(transaction):
    from bigchaindb.common.transaction import Transaction
    # fulfillments are not part of the message to sign
    tx_dict = Transaction._remove_signatures(transaction.to_dict())
    return Transaction._to_str(tx_dict).encode()