docs: public TransactionInfo queryTransactionByID(Collection<Peer> peers, String txID, User userContext) throws ProposalException, InvalidArgumentException {
  
          checkChannelState();
          checkPeers(peers);
          User.userContextCheck(userContext);
  
          if (txID == null) {
              throw new InvalidArgumentException("TxID parameter is null.");
          }
  
          TransactionInfo transactionInfo;
          try {
              logger.debug("queryTransactionByID with txID " + txID + "\n    from peer " + " on channel " + name);
              QuerySCCRequest querySCCRequest = new QuerySCCRequest(userContext);
              querySCCRequest.setFcn(QuerySCCRequest.GETTRANSACTIONBYID);
              querySCCRequest.setArgs(name, txID);
  
              ProposalResponse proposalResponse = sendProposalSerially(querySCCRequest, peers);
  
              return new TransactionInfo(txID, ProcessedTransaction.parseFrom(proposalResponse.getProposalResponse().getResponse().getPayload()));
          } catch (Exception e) {
  
              logger.error(e);
  
              throw new ProposalException(e);
          }
      }