code: func (f *FilterHeaderStore) RollbackLastBlock(newTip *chainhash.Hash) (*waddrmgr.BlockStamp, error) {
  	// Lock store for write.
  	f.mtx.Lock()
  	defer f.mtx.Unlock()
  
  	// First, we'll obtain the latest height that the index knows of.
  	_, chainTipHeight, err := f.chainTip()
  	if err != nil {
  		return nil, err
  	}
  
  	// With this height obtained, we'll use it to read what will be the new
  	// chain tip from disk.
  	newHeightTip := chainTipHeight - 1
  	newHeaderTip, err := f.readHeader(newHeightTip)
  	if err != nil {
  		return nil, err
  	}
  
  	// Now that we have the information we need to return from this
  	// function, we can now truncate both the header file and the index.
  	if err := f.singleTruncate(); err != nil {
  		return nil, err
  	}
  	if err := f.truncateIndex(newTip, false); err != nil {
  		return nil, err
  	}
  
  	// TODO(roasbeef): return chain hash also?
  	return &waddrmgr.BlockStamp{
  		Height: int32(newHeightTip),
  		Hash:   *newHeaderTip,
  	}, nil
  }
docs: // RollbackLastBlock rollsback both the index, and on-disk header file by a
  // _single_ filter header. This method is meant to be used in the case of
  // re-org which disconnects the latest filter header from the end of the main
  // chain. The information about the latest header tip after truncation is
  // returned.