code: func blockFilterMatches(chain ChainSource, ro *rescanOptions,
  	blockHash *chainhash.Hash) (bool, error) {
  
  	// TODO(roasbeef): need to ENSURE always get filter
  
  	// Since this method is called when we are not current, and from the
  	// utxoscanner, we expect more calls to follow for the subsequent
  	// filters. To speed up the fetching, we make an optimistic batch
  	// query.
  	filter, err := chain.GetCFilter(
  		*blockHash, wire.GCSFilterRegular, OptimisticBatch(),
  	)
  	if err != nil {
  		if err == headerfs.ErrHashNotFound {
  			// Block has been reorged out from under us.
  			return false, nil
  		}
  		return false, err
  	}
  
  	// If we found the filter, then we'll check the items in the watch list
  	// against it.
  	if filter != nil && filter.N() != 0 {
  		return matchBlockFilter(ro, filter, blockHash)
  	}
  
  	return false, nil
  }
docs: // blockFilterMatches returns whether the block filter matches the watched
  // items. If this returns false, it means the block is certainly not interesting
  // to us.