docs: Collection<LifecycleInstallChaincodeProposalResponse> sendLifecycleInstallProposal(LifecycleInstallChaincodeRequest installProposalRequest, Collection<Peer> peers)
              throws ProposalException, InvalidArgumentException {
  
          checkChannelState();
          checkPeers(peers);
  
          LifecycleChaincodePackage lifecycleChaincodePackage = installProposalRequest.getLifecycleChaincodePackage();
          if (null == lifecycleChaincodePackage) {
              throw new InvalidArgumentException("Install request is missing lifecycle package");
          }
  
          byte[] chaincodeBytes = lifecycleChaincodePackage.getAsBytes();
  
          if (null == chaincodeBytes) {
              throw new InvalidArgumentException("InstallProposalRequest lifecycleChaincodePackage bytes is null.");
          }
  
          if (chaincodeBytes.length == 0) {
              throw new InvalidArgumentException("InstallProposalRequest lifecycleChaincodePackage bytes is empty.");
          }
  
          try {
              TransactionContext transactionContext = getTransactionContext(installProposalRequest);
              transactionContext.verify(false);  // Install will have no signing cause it's not really targeted to a channel.
              LifecycleInstallProposalBuilder installProposalbuilder = LifecycleInstallProposalBuilder.newBuilder();
              installProposalbuilder.setChaincodeBytes(chaincodeBytes);
              installProposalbuilder.context(transactionContext);
              FabricProposal.Proposal deploymentProposal = installProposalbuilder.build();
              SignedProposal signedProposal = getSignedProposal(transactionContext, deploymentProposal);
  
              return sendProposalToPeers(peers, signedProposal, transactionContext, LifecycleInstallChaincodeProposalResponse.class);
          } catch (Exception e) {
              throw new ProposalException(e);
          }
  
      }