docs: Collection<LifecycleQueryInstalledChaincodesProposalResponse> lifecycleQueryInstalledChaincodes(LifecycleQueryInstalledChaincodesRequest lifecycleQueryInstalledChaincodesRequest, Collection<Peer> peers) throws InvalidArgumentException, ProposalException {
  
          logger.trace("LifecycleQueryInstalledChaincodes");
          if (null == lifecycleQueryInstalledChaincodesRequest) {
              throw new InvalidArgumentException("The lifecycleQueryInstalledChaincodesRequest parameter can not be null.");
          }
  
          checkPeers(peers);
  
          if (!isSystemChannel()) {
              throw new InvalidArgumentException("LifecycleQueryInstalledChaincodes should only be invoked on system channel.");
          }
  
          try {
  
              TransactionContext context = getTransactionContext(lifecycleQueryInstalledChaincodesRequest);
  
              FabricProposal.Proposal proposalBuilder = LifecycleQueryInstalledChaincodesBuilder.newBuilder().context(context).build();
  
              SignedProposal qProposal = getSignedProposal(context, proposalBuilder);
  
              return sendProposalToPeers(peers, qProposal, context, LifecycleQueryInstalledChaincodesProposalResponse.class);
  
          } catch (ProposalException e) {
              throw e;
          } catch (Exception e) {
              throw new ProposalException(format("Query for peer %s channels failed. " + e.getMessage(), name), e);
  
          }
  
      }