code: func (c *Client) QueryInfo(options ...RequestOption) (*fab.BlockchainInfoResponse, error) {
  
  	targets, opts, err := c.prepareRequestParams(options...)
  	if err != nil {
  		return nil, errors.WithMessage(err, "QueryInfo failed to prepare request parameters")
  	}
  	reqCtx, cancel := c.createRequestContext(opts)
  	defer cancel()
  
  	responses, err := c.ledger.QueryInfo(reqCtx, peersToTxnProcessors(targets), c.verifier)
  	if err != nil && len(responses) == 0 {
  		return nil, errors.WithMessage(err, "QueryInfo failed")
  	}
  
  	if len(responses) < opts.MinTargets {
  		return nil, errors.Errorf("Number of responses %d is less than MinTargets %d. Targets: %v, Error: %s", len(responses), opts.MinTargets, targets, err)
  	}
  
  	response := responses[0]
  	maxHeight := response.BCI.Height
  	for i, r := range responses {
  		if i == 0 {
  			continue
  		}
  
  		// Match one with highest block height,
  		if r.BCI.Height > maxHeight {
  			response = r
  			maxHeight = r.BCI.Height
  		}
  
  	}
  
  	return response, nil
  }
docs: // QueryInfo queries for various useful blockchain information on this channel such as block height and current block hash.
  //  Parameters:
  //  options are optional request options
  //
  //  Returns:
  //  blockchain information