Do a transfer with `target` with the given `amount` of `token_address`.

def transfer_and_wait(
            self,
            registry_address: PaymentNetworkID,
            token_address: TokenAddress,
            amount: TokenAmount,
            target: Address,
            identifier: PaymentID = None,
            transfer_timeout: int = None,
            secret: Secret = None,
            secret_hash: SecretHash = None,
    ):
        """ Do a transfer with `target` with the given `amount` of `token_address`. """
        # pylint: disable=too-many-arguments

        payment_status = self.transfer_async(
            registry_address=registry_address,
            token_address=token_address,
            amount=amount,
            target=target,
            identifier=identifier,
            secret=secret,
            secret_hash=secret_hash,
        )
        payment_status.payment_done.wait(timeout=transfer_timeout)
        return payment_status