code: func (c *Client) trackRegisteredNtfns(cmd interface{}) {
  	// Nothing to do if the caller is not interested in notifications.
  	if c.ntfnHandlers == nil {
  		return
  	}
  
  	c.ntfnStateLock.Lock()
  	defer c.ntfnStateLock.Unlock()
  
  	switch bcmd := cmd.(type) {
  	case *btcjson.NotifyBlocksCmd:
  		c.ntfnState.notifyBlocks = true
  
  	case *btcjson.NotifyNewTransactionsCmd:
  		if bcmd.Verbose != nil && *bcmd.Verbose {
  			c.ntfnState.notifyNewTxVerbose = true
  		} else {
  			c.ntfnState.notifyNewTx = true
  
  		}
  
  	case *btcjson.NotifySpentCmd:
  		for _, op := range bcmd.OutPoints {
  			c.ntfnState.notifySpent[op] = struct{}{}
  		}
  
  	case *btcjson.NotifyReceivedCmd:
  		for _, addr := range bcmd.Addresses {
  			c.ntfnState.notifyReceived[addr] = struct{}{}
  		}
  	}
  }
docs: // trackRegisteredNtfns examines the passed command to see if it is one of
  // the notification commands and updates the notification state that is used
  // to automatically re-establish registered notifications on reconnects.