code: func parseChainNtfnParams(params []json.RawMessage) (*chainhash.Hash,
  	int32, time.Time, error) {
  
  	if len(params) != 3 {
  		return nil, 0, time.Time{}, wrongNumParams(len(params))
  	}
  
  	// Unmarshal first parameter as a string.
  	var blockHashStr string
  	err := json.Unmarshal(params[0], &blockHashStr)
  	if err != nil {
  		return nil, 0, time.Time{}, err
  	}
  
  	// Unmarshal second parameter as an integer.
  	var blockHeight int32
  	err = json.Unmarshal(params[1], &blockHeight)
  	if err != nil {
  		return nil, 0, time.Time{}, err
  	}
  
  	// Unmarshal third parameter as unix time.
  	var blockTimeUnix int64
  	err = json.Unmarshal(params[2], &blockTimeUnix)
  	if err != nil {
  		return nil, 0, time.Time{}, err
  	}
  
  	// Create hash from block hash string.
  	blockHash, err := chainhash.NewHashFromStr(blockHashStr)
  	if err != nil {
  		return nil, 0, time.Time{}, err
  	}
  
  	// Create time.Time from unix time.
  	blockTime := time.Unix(blockTimeUnix, 0)
  
  	return blockHash, blockHeight, blockTime, nil
  }
docs: // parseChainNtfnParams parses out the block hash and height from the parameters
  // of blockconnected and blockdisconnected notifications.