code: public ChainCodeResponse deploy(DeployRequest deployRequest) throws ChainCodeException, NoAvailableTCertException, CryptoException, IOException {
          logger.debug(String.format("Received deploy request: %s", deployRequest));
  
          if (null == getMyTCert() && getChain().isSecurityEnabled()) {
              logger.debug("Failed getting a new TCert");
              throw new NoAvailableTCertException("Failed getting a new TCert");
          }
  
          logger.debug("Got a TCert successfully, continue...");
  
          Transaction transaction = DeployTransactionBuilder.newBuilder().context(this).request(deployRequest).build();
          Fabric.Response response = execute(transaction);
  
          if (response.getStatus() == StatusCode.FAILURE) {
              throw new ChainCodeException(response.getMsg().toStringUtf8(), null);
          }
  
          return new ChainCodeResponse(
                  transaction.getTxBuilder().getTxid(),
                  transaction.getChaincodeID(),
                  Status.UNDEFINED, response.getMsg().toStringUtf8());
      }
docs: Issue a deploy transaction
  @param deployRequest {@link DeployRequest} A deploy request
  @return {@link ChainCodeResponse} response of deploy transaction