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
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()