mirror of
https://github.com/LBRYFoundation/lbcd.git
synced 2025-08-23 17:47:24 +00:00
wire: Populate cfheaders message with filter hashes instead of headers.
This commit is contained in:
parent
175af18043
commit
4c991c8783
2 changed files with 22 additions and 23 deletions
23
server.go
23
server.go
|
@ -820,11 +820,11 @@ func (sp *serverPeer) OnGetCFHeaders(_ *peer.Peer, msg *wire.MsgGetCFHeaders) {
|
||||||
hashPtrs[i] = &hashList[i]
|
hashPtrs[i] = &hashList[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch the raw filter header bytes from the database for all blocks.
|
// Fetch the raw filter hash bytes from the database for all blocks.
|
||||||
filterHeaders, err := sp.server.cfIndex.FilterHeadersByBlockHashes(hashPtrs,
|
filterHashes, err := sp.server.cfIndex.FilterHashesByBlockHashes(hashPtrs,
|
||||||
msg.FilterType)
|
msg.FilterType)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
peerLog.Errorf("Error retrieving cfilters: %v", err)
|
peerLog.Errorf("Error retrieving cfilter hashes: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -857,30 +857,29 @@ func (sp *serverPeer) OnGetCFHeaders(_ *peer.Peer, msg *wire.MsgGetCFHeaders) {
|
||||||
}
|
}
|
||||||
|
|
||||||
hashList = hashList[1:]
|
hashList = hashList[1:]
|
||||||
filterHeaders = filterHeaders[1:]
|
filterHashes = filterHashes[1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate HeaderHashes.
|
// Populate HeaderHashes.
|
||||||
for i, headerBytes := range filterHeaders {
|
for i, hashBytes := range filterHashes {
|
||||||
if len(headerBytes) == 0 {
|
if len(hashBytes) == 0 {
|
||||||
peerLog.Warnf("Could not obtain CF header for %v", hashList[i])
|
peerLog.Warnf("Could not obtain CF hash for %v", hashList[i])
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deserialize the hash.
|
// Deserialize the hash.
|
||||||
var header chainhash.Hash
|
filterHash, err := chainhash.NewHash(hashBytes)
|
||||||
err = header.SetBytes(headerBytes)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
peerLog.Warnf("Committed filter header deserialize "+
|
peerLog.Warnf("Committed filter hash deserialize "+
|
||||||
"failed: %v", err)
|
"failed: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
headersMsg.AddCFHeader(&header)
|
headersMsg.AddCFHash(filterHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
headersMsg.FilterType = msg.FilterType
|
headersMsg.FilterType = msg.FilterType
|
||||||
headersMsg.StopHash = hashList[len(hashList)-1]
|
headersMsg.StopHash = msg.StopHash
|
||||||
sp.QueueMessage(headersMsg, nil)
|
sp.QueueMessage(headersMsg, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,18 +30,18 @@ type MsgCFHeaders struct {
|
||||||
FilterType FilterType
|
FilterType FilterType
|
||||||
StopHash chainhash.Hash
|
StopHash chainhash.Hash
|
||||||
PrevFilterHeader chainhash.Hash
|
PrevFilterHeader chainhash.Hash
|
||||||
HeaderHashes []*chainhash.Hash
|
FilterHashes []*chainhash.Hash
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddCFHeader adds a new committed filter header to the message.
|
// AddCFHeader adds a new committed filter header to the message.
|
||||||
func (msg *MsgCFHeaders) AddCFHeader(headerHash *chainhash.Hash) error {
|
func (msg *MsgCFHeaders) AddCFHash(hash *chainhash.Hash) error {
|
||||||
if len(msg.HeaderHashes)+1 > MaxCFHeadersPerMsg {
|
if len(msg.FilterHashes)+1 > MaxCFHeadersPerMsg {
|
||||||
str := fmt.Sprintf("too many block headers in message [max %v]",
|
str := fmt.Sprintf("too many block headers in message [max %v]",
|
||||||
MaxBlockHeadersPerMsg)
|
MaxBlockHeadersPerMsg)
|
||||||
return messageError("MsgCFHeaders.AddCFHeader", str)
|
return messageError("MsgCFHeaders.AddCFHash", str)
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.HeaderHashes = append(msg.HeaderHashes, headerHash)
|
msg.FilterHashes = append(msg.FilterHashes, hash)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,16 +80,16 @@ func (msg *MsgCFHeaders) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding)
|
||||||
return messageError("MsgCFHeaders.BtcDecode", str)
|
return messageError("MsgCFHeaders.BtcDecode", str)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a contiguous slice of headers to deserialize into in order to
|
// Create a contiguous slice of hashes to deserialize into in order to
|
||||||
// reduce the number of allocations.
|
// reduce the number of allocations.
|
||||||
msg.HeaderHashes = make([]*chainhash.Hash, 0, count)
|
msg.FilterHashes = make([]*chainhash.Hash, 0, count)
|
||||||
for i := uint64(0); i < count; i++ {
|
for i := uint64(0); i < count; i++ {
|
||||||
var cfh chainhash.Hash
|
var cfh chainhash.Hash
|
||||||
err := readElement(r, &cfh)
|
err := readElement(r, &cfh)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
msg.AddCFHeader(&cfh)
|
msg.AddCFHash(&cfh)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -117,7 +117,7 @@ func (msg *MsgCFHeaders) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Limit to max committed headers per message.
|
// Limit to max committed headers per message.
|
||||||
count := len(msg.HeaderHashes)
|
count := len(msg.FilterHashes)
|
||||||
if count > MaxCFHeadersPerMsg {
|
if count > MaxCFHeadersPerMsg {
|
||||||
str := fmt.Sprintf("too many committed filter headers for "+
|
str := fmt.Sprintf("too many committed filter headers for "+
|
||||||
"message [count %v, max %v]", count,
|
"message [count %v, max %v]", count,
|
||||||
|
@ -130,7 +130,7 @@ func (msg *MsgCFHeaders) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, cfh := range msg.HeaderHashes {
|
for _, cfh := range msg.FilterHashes {
|
||||||
err := writeElement(w, cfh)
|
err := writeElement(w, cfh)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -175,6 +175,6 @@ func (msg *MsgCFHeaders) MaxPayloadLength(pver uint32) uint32 {
|
||||||
// the Message interface. See MsgCFHeaders for details.
|
// the Message interface. See MsgCFHeaders for details.
|
||||||
func NewMsgCFHeaders() *MsgCFHeaders {
|
func NewMsgCFHeaders() *MsgCFHeaders {
|
||||||
return &MsgCFHeaders{
|
return &MsgCFHeaders{
|
||||||
HeaderHashes: make([]*chainhash.Hash, 0, MaxCFHeadersPerMsg),
|
FilterHashes: make([]*chainhash.Hash, 0, MaxCFHeadersPerMsg),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue