Exemple #1
0
    def get_blocks_by_hashes(self, block_hash_batch, with_transactions=True):
        if not block_hash_batch:
            return []

        # get block details by hash
        block_detail_rpc = list(
            generate_get_block_by_hash_json_rpc(block_hash_batch,
                                                with_transactions, self.chain))
        block_detail_response = self.bitcoin_rpc.batch(block_detail_rpc)
        block_detail_results = list(
            rpc_response_batch_to_results(block_detail_response))

        blocks = [
            self.block_mapper.json_dict_to_block(block_detail_result)
            for block_detail_result in block_detail_results
        ]

        if self.chain in Chain.HAVE_OLD_API and with_transactions:
            self._fetch_transactions(blocks)

        for block in blocks:
            self._remove_coinbase_input(block)
            self._add_non_standard_addresses(block)
            if self.chain == Chain.ZCASH:
                self._add_shielded_inputs_and_outputs(block)

        return blocks
Exemple #2
0
    def _get_raw_transactions_by_hashes(self, hashes):
        if hashes is None or len(hashes) == 0:
            return []

        genesis_transaction = GENESIS_TRANSACTIONS.get(self.chain)
        genesis_transaction_hash = genesis_transaction.get('txid') if genesis_transaction is not None else None
        filtered_hashes = [transaction_hash for transaction_hash in hashes
                           if transaction_hash != genesis_transaction_hash]
        transaction_detail_rpc = list(generate_get_transaction_by_id_json_rpc(filtered_hashes))
        transaction_detail_response = self.bitcoin_rpc.batch(transaction_detail_rpc)
        transaction_detail_results = rpc_response_batch_to_results(transaction_detail_response)
        raw_transactions = list(transaction_detail_results)

        if genesis_transaction_hash is not None and genesis_transaction_hash in hashes:
            raw_transactions.append(genesis_transaction)

        return raw_transactions
Exemple #3
0
 def get_block_hashes(self, block_number_batch):
     block_hash_rpc = list(
         generate_get_block_hash_by_number_json_rpc(block_number_batch))
     block_hashes_response = self.bitcoin_rpc.batch(block_hash_rpc)
     block_hashes = rpc_response_batch_to_results(block_hashes_response)
     return block_hashes