mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 18:10:34 +01:00
4226232881
In this commit, we export the ReadElements and WriteElements functions. We do this as exporting these functions makes it possible for outside packages to define serializations which use the BOLT 1.0 wire format.
81 lines
2.5 KiB
Go
81 lines
2.5 KiB
Go
package lnwire
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
|
)
|
|
|
|
// GossipTimestampRange is a message that allows the sender to restrict the set
|
|
// of future gossip announcements sent by the receiver. Nodes should send this
|
|
// if they have the gossip-queries feature bit active. Nodes are able to send
|
|
// new GossipTimestampRange messages to replace the prior window.
|
|
type GossipTimestampRange struct {
|
|
// ChainHash denotes the chain that the sender wishes to restrict the
|
|
// set of received announcements of.
|
|
ChainHash chainhash.Hash
|
|
|
|
// FirstTimestamp is the timestamp of the earliest announcement message
|
|
// that should be sent by the receiver.
|
|
FirstTimestamp uint32
|
|
|
|
// TimestampRange is the horizon beyond the FirstTimestamp that any
|
|
// announcement messages should be sent for. The receiving node MUST
|
|
// NOT send any announcements that have a timestamp greater than
|
|
// FirstTimestamp + TimestampRange.
|
|
TimestampRange uint32
|
|
}
|
|
|
|
// NewGossipTimestampRange creates a new empty GossipTimestampRange message.
|
|
func NewGossipTimestampRange() *GossipTimestampRange {
|
|
return &GossipTimestampRange{}
|
|
}
|
|
|
|
// A compile time check to ensure GossipTimestampRange implements the
|
|
// lnwire.Message interface.
|
|
var _ Message = (*GossipTimestampRange)(nil)
|
|
|
|
// Decode deserializes a serialized GossipTimestampRange message stored in the
|
|
// passed io.Reader observing the specified protocol version.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (g *GossipTimestampRange) Decode(r io.Reader, pver uint32) error {
|
|
return ReadElements(r,
|
|
g.ChainHash[:],
|
|
&g.FirstTimestamp,
|
|
&g.TimestampRange,
|
|
)
|
|
}
|
|
|
|
// Encode serializes the target GossipTimestampRange into the passed io.Writer
|
|
// observing the protocol version specified.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (g *GossipTimestampRange) Encode(w io.Writer, pver uint32) error {
|
|
return WriteElements(w,
|
|
g.ChainHash[:],
|
|
g.FirstTimestamp,
|
|
g.TimestampRange,
|
|
)
|
|
}
|
|
|
|
// MsgType returns the integer uniquely identifying this message type on the
|
|
// wire.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (g *GossipTimestampRange) MsgType() MessageType {
|
|
return MsgGossipTimestampRange
|
|
}
|
|
|
|
// MaxPayloadLength returns the maximum allowed payload size for a
|
|
// GossipTimestampRange complete message observing the specified protocol
|
|
// version.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (g *GossipTimestampRange) MaxPayloadLength(uint32) uint32 {
|
|
// 32 + 4 + 4
|
|
//
|
|
// TODO(roasbeef): update to 8 byte timestmaps?
|
|
return 40
|
|
}
|