code: func parseFilteredBlockConnectedParams(params []json.RawMessage) (int32,
  	*wire.BlockHeader, []*btcutil.Tx, error) {
  
  	if len(params) < 3 {
  		return 0, nil, nil, wrongNumParams(len(params))
  	}
  
  	// Unmarshal first parameter as an integer.
  	var blockHeight int32
  	err := json.Unmarshal(params[0], &blockHeight)
  	if err != nil {
  		return 0, nil, nil, err
  	}
  
  	// Unmarshal second parameter as a slice of bytes.
  	blockHeaderBytes, err := parseHexParam(params[1])
  	if err != nil {
  		return 0, nil, nil, err
  	}
  
  	// Deserialize block header from slice of bytes.
  	var blockHeader wire.BlockHeader
  	err = blockHeader.Deserialize(bytes.NewReader(blockHeaderBytes))
  	if err != nil {
  		return 0, nil, nil, err
  	}
  
  	// Unmarshal third parameter as a slice of hex-encoded strings.
  	var hexTransactions []string
  	err = json.Unmarshal(params[2], &hexTransactions)
  	if err != nil {
  		return 0, nil, nil, err
  	}
  
  	// Create slice of transactions from slice of strings by hex-decoding.
  	transactions := make([]*btcutil.Tx, len(hexTransactions))
  	for i, hexTx := range hexTransactions {
  		transaction, err := hex.DecodeString(hexTx)
  		if err != nil {
  			return 0, nil, nil, err
  		}
  
  		transactions[i], err = btcutil.NewTxFromBytes(transaction)
  		if err != nil {
  			return 0, nil, nil, err
  		}
  	}
  
  	return blockHeight, &blockHeader, transactions, nil
  }
docs: // parseFilteredBlockConnectedParams parses out the parameters included in a
  // filteredblockconnected notification.
  //
  // NOTE: This is a btcd extension ported from github.com/decred/dcrrpcclient
  // and requires a websocket connection.