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