code: func (c *Client) RescanAsync(startBlock *chainhash.Hash,
  	addresses []btcutil.Address,
  	outpoints []*wire.OutPoint) FutureRescanResult {
  
  	// Not supported in HTTP POST mode.
  	if c.config.HTTPPostMode {
  		return newFutureError(ErrWebsocketsRequired)
  	}
  
  	// Ignore the notification if the client is not interested in
  	// notifications.
  	if c.ntfnHandlers == nil {
  		return newNilFutureResult()
  	}
  
  	// Convert block hashes to strings.
  	var startBlockHashStr string
  	if startBlock != nil {
  		startBlockHashStr = startBlock.String()
  	}
  
  	// Convert addresses to strings.
  	addrs := make([]string, 0, len(addresses))
  	for _, addr := range addresses {
  		addrs = append(addrs, addr.String())
  	}
  
  	// Convert outpoints.
  	ops := make([]btcjson.OutPoint, 0, len(outpoints))
  	for _, op := range outpoints {
  		ops = append(ops, newOutPointFromWire(op))
  	}
  
  	cmd := btcjson.NewRescanCmd(startBlockHashStr, addrs, ops, nil)
  	return c.sendCmd(cmd)
  }
docs: // RescanAsync returns an instance of a type that can be used to get the result
  // of the RPC at some future time by invoking the Receive function on the
  // returned instance.
  //
  // See Rescan for the blocking version and more details.
  //
  // NOTE: Rescan requests are not issued on client reconnect and must be
  // performed manually (ideally with a new start height based on the last
  // rescan progress notification).  See the OnClientConnected notification
  // callback for a good callsite to reissue rescan requests on connect and
  // reconnect.
  //
  // NOTE: This is a btcd extension and requires a websocket connection.
  //
  // NOTE: Deprecated. Use RescanBlocksAsync instead.