You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.5 KiB
80 lines
2.5 KiB
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 |
|
}
|
|
|