def prepare_transfer(inputs, outputs, metadata=None): """Create an instance of a :class:`~.Output`. Args: inputs (list of (dict): { 'tx': <(bigchaindb.common.transactionTransaction): input transaction, can differ but must have same asset id>, 'output': <(int): output index of tx> } ) outputs (list of (dict): { 'condition': <(cryptoconditions.Condition): output condition>, 'public_keys': <(optional list of base58): for indexing defaults to `None`>, 'amount': <(int): defaults to `1`> } ) metadata (dict) Raises: TypeError: if `public_keys` is not instance of `list`. """ from bigchaindb.common.transaction import (Input, Output, TransactionLink) from bigchaindb.models import Transaction from cryptoconditions import (Fulfillment, Condition) asset = inputs[0]['tx']['asset'] asset = {'id': asset['id'] if 'id' in asset else inputs[0]['tx']['id']} _inputs, _outputs = [], [] for _input in inputs: _output = _input['tx']['outputs'][_input['output']] _inputs.append( Input(fulfillment=Condition.from_uri(_output['condition']['uri']), owners_before=_output['public_keys'], fulfills=TransactionLink(txid=_input['tx']['id'], output=_input['output']))) for output in outputs: _outputs.append( Output(fulfillment=output['condition'], public_keys=output['public_keys'] if "public_keys" in output else [], amount=output['amount'] if "amount" in output else 1)) return Transaction( operation='TRANSFER', asset=asset, inputs=_inputs, outputs=_outputs, metadata=metadata, )