def get_output(self, transaction_hash, output_index):
        """
        Gets an output and information about its asset ID and asset quantity.

        :param bytes transaction_hash: The hash of the transaction containing the output.
        :param int output_index: The index of the output.
        :return: An object containing the output as well as its asset ID and asset quantity.
        :rtype: Future[TransactionOutput]
        """
        cached_output = yield from self._cache.get(transaction_hash, output_index)

        if cached_output is not None:
            return cached_output

        transaction = yield from self._transaction_provider(transaction_hash)

        if transaction is None:
            raise ValueError('Transaction {0} could not be retrieved'.format(bitcoin.core.b2lx(transaction_hash)))

        colored_outputs = yield from self.color_transaction(transaction)

        for index, output in enumerate(colored_outputs):
            yield from self._cache.put(transaction_hash, index, output)

        return colored_outputs[output_index]