code: func (s *Service) Blocks(minHeight, maxHeight int64) (*ResultBlocks, error) {
  	if s.nodeView == nil {
  		return nil, fmt.Errorf("NodeView is not mounted so cannot pull Tendermint blocks")
  	}
  	latestHeight := int64(s.blockchain.LastBlockHeight())
  
  	if minHeight < 1 {
  		minHeight = latestHeight
  	}
  	if maxHeight == 0 || latestHeight < maxHeight {
  		maxHeight = latestHeight
  	}
  	if maxHeight > minHeight && maxHeight-minHeight > MaxBlockLookback {
  		minHeight = maxHeight - MaxBlockLookback
  	}
  
  	var blockMetas []*tmTypes.BlockMeta
  	for height := minHeight; height <= maxHeight; height++ {
  		blockMeta := s.nodeView.BlockStore().LoadBlockMeta(height)
  		blockMetas = append(blockMetas, blockMeta)
  	}
  
  	return &ResultBlocks{
  		LastHeight: uint64(latestHeight),
  		BlockMetas: blockMetas,
  	}, nil
  }
docs: // Returns the current blockchain height and metadata for a range of blocks
  // between minHeight and maxHeight. Only returns maxBlockLookback block metadata
  // from the top of the range of blocks.
  // Passing 0 for maxHeight sets the upper height of the range to the current
  // blockchain height.