mirror of
https://github.com/btcsuite/btcd.git
synced 2025-02-24 06:47:59 +01:00
wire/msgcfcheckpt: optimize serialization by reusing small buffers
This commit is contained in:
parent
1990555eee
commit
f37f4750dc
1 changed files with 22 additions and 12 deletions
|
@ -52,23 +52,28 @@ func (msg *MsgCFCheckpt) AddCFHeader(header *chainhash.Hash) error {
|
||||||
// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.
|
// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.
|
||||||
// This is part of the Message interface implementation.
|
// This is part of the Message interface implementation.
|
||||||
func (msg *MsgCFCheckpt) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error {
|
func (msg *MsgCFCheckpt) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error {
|
||||||
|
buf := binarySerializer.Borrow()
|
||||||
|
|
||||||
// Read filter type
|
// Read filter type
|
||||||
err := readElement(r, &msg.FilterType)
|
if _, err := io.ReadFull(r, buf[:1]); err != nil {
|
||||||
if err != nil {
|
binarySerializer.Return(buf)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
msg.FilterType = FilterType(buf[0])
|
||||||
|
|
||||||
// Read stop hash
|
// Read stop hash
|
||||||
err = readElement(r, &msg.StopHash)
|
if _, err := io.ReadFull(r, msg.StopHash[:]); err != nil {
|
||||||
if err != nil {
|
binarySerializer.Return(buf)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read number of filter headers
|
// Read number of filter headers
|
||||||
count, err := ReadVarInt(r, pver)
|
count, err := ReadVarIntBuf(r, pver, buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
binarySerializer.Return(buf)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
binarySerializer.Return(buf)
|
||||||
|
|
||||||
// Refuse to decode an insane number of cfheaders.
|
// Refuse to decode an insane number of cfheaders.
|
||||||
if count > maxCFHeadersLen {
|
if count > maxCFHeadersLen {
|
||||||
|
@ -80,7 +85,7 @@ func (msg *MsgCFCheckpt) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding)
|
||||||
msg.FilterHeaders = make([]*chainhash.Hash, count)
|
msg.FilterHeaders = make([]*chainhash.Hash, 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 := io.ReadFull(r, cfh[:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -93,27 +98,32 @@ func (msg *MsgCFCheckpt) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding)
|
||||||
// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.
|
// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.
|
||||||
// This is part of the Message interface implementation.
|
// This is part of the Message interface implementation.
|
||||||
func (msg *MsgCFCheckpt) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error {
|
func (msg *MsgCFCheckpt) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error {
|
||||||
|
buf := binarySerializer.Borrow()
|
||||||
|
|
||||||
// Write filter type
|
// Write filter type
|
||||||
err := writeElement(w, msg.FilterType)
|
buf[0] = byte(msg.FilterType)
|
||||||
if err != nil {
|
if _, err := w.Write(buf[:1]); err != nil {
|
||||||
|
binarySerializer.Return(buf)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write stop hash
|
// Write stop hash
|
||||||
err = writeElement(w, msg.StopHash)
|
if _, err := w.Write(msg.StopHash[:]); err != nil {
|
||||||
if err != nil {
|
binarySerializer.Return(buf)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write length of FilterHeaders slice
|
// Write length of FilterHeaders slice
|
||||||
count := len(msg.FilterHeaders)
|
count := len(msg.FilterHeaders)
|
||||||
err = WriteVarInt(w, pver, uint64(count))
|
err := WriteVarIntBuf(w, pver, uint64(count), buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
binarySerializer.Return(buf)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
binarySerializer.Return(buf)
|
||||||
|
|
||||||
for _, cfh := range msg.FilterHeaders {
|
for _, cfh := range msg.FilterHeaders {
|
||||||
err := writeElement(w, cfh)
|
_, err := w.Write(cfh[:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue