mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00

The cfilter BIP specifies that the filter type is a uint8. The current code encodes it correctly on the wire, but everywhere else, it's treated as a boolean (false for basic filter, true for extended). This commit corrects that to account for possible additional filter types in the future. All package changes are done in one commit as they're all interdependent. The following packages are updated: * blockchain/indexers * btcjson * peer * wire * main (server.go and rpcserver.go)
58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
// Copyright (c) 2017 The btcsuite developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package wire
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
|
)
|
|
|
|
type MsgGetCFilter struct {
|
|
BlockHash chainhash.Hash
|
|
FilterType uint8
|
|
}
|
|
|
|
func (msg *MsgGetCFilter) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error {
|
|
err := readElement(r, &msg.BlockHash)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return readElement(r, &msg.FilterType)
|
|
}
|
|
|
|
// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.
|
|
// This is part of the Message interface implementation.
|
|
func (msg *MsgGetCFilter) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error {
|
|
err := writeElement(w, &msg.BlockHash)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return writeElement(w, msg.FilterType)
|
|
}
|
|
|
|
// Command returns the protocol command string for the message. This is part
|
|
// of the Message interface implementation.
|
|
func (msg *MsgGetCFilter) Command() string {
|
|
return CmdGetCFilter
|
|
}
|
|
|
|
// MaxPayloadLength returns the maximum length the payload can be for the
|
|
// receiver. This is part of the Message interface implementation.
|
|
func (msg *MsgGetCFilter) MaxPayloadLength(pver uint32) uint32 {
|
|
// Block hash + filter type.
|
|
return chainhash.HashSize + 1
|
|
}
|
|
|
|
// NewMsgGetCFilter returns a new bitcoin getcfilter message that conforms to
|
|
// the Message interface using the passed parameters and defaults for the
|
|
// remaining fields.
|
|
func NewMsgGetCFilter(blockHash *chainhash.Hash, filterType uint8) *MsgGetCFilter {
|
|
return &MsgGetCFilter{
|
|
BlockHash: *blockHash,
|
|
FilterType: filterType,
|
|
}
|
|
}
|