docs: Collection<LifecycleQueryInstalledChaincodeProposalResponse> lifecycleQueryInstalledChaincode(LifecycleQueryInstalledChaincodeRequest lifecycleQueryInstalledChaincodeRequest,
                                                                                                    Collection<Peer> peers) throws InvalidArgumentException, ProposalException {
  
          if (null == lifecycleQueryInstalledChaincodeRequest) {
              throw new InvalidArgumentException("The lifecycleQueryInstalledChaincodeRequest parameter can not be null.");
          }
  
          checkPeers(peers);
  
          if (!isSystemChannel()) {
              throw new InvalidArgumentException("LifecycleQueryInstalledChaincodes should only be invoked on system channel.");
          }
  
          try {
              logger.trace(format("LifecycleQueryInstalledChaincode packageID: %s", lifecycleQueryInstalledChaincodeRequest.getPackageId()));
  
              TransactionContext context = getTransactionContext(lifecycleQueryInstalledChaincodeRequest);
  
              LifecycleQueryInstalledChaincodeBuilder lifecycleQueryInstalledChaincodeBuilder = LifecycleQueryInstalledChaincodeBuilder.newBuilder();
  
              lifecycleQueryInstalledChaincodeBuilder.setPackageId(lifecycleQueryInstalledChaincodeRequest.getPackageId());
              lifecycleQueryInstalledChaincodeBuilder.context(context);
  
              SignedProposal qProposal = getSignedProposal(context, lifecycleQueryInstalledChaincodeBuilder.build());
              return sendProposalToPeers(peers, qProposal, context, LifecycleQueryInstalledChaincodeProposalResponse.class);
  
          } catch (ProposalException e) {
              throw e;
          } catch (Exception e) {
              throw new ProposalException(format("Query for peer %s channels failed. " + e.getMessage(), name), e);
  
          }
  
      }