mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 01:43:16 +01:00
82 lines
2.2 KiB
Go
82 lines
2.2 KiB
Go
package lnwire
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
)
|
|
|
|
// Stfu is a message that is sent to lock the channel state prior to some other
|
|
// interactive protocol where channel updates need to be paused.
|
|
type Stfu struct {
|
|
// ChanID identifies which channel needs to be frozen.
|
|
ChanID ChannelID
|
|
|
|
// Initiator is a byte that identifies whether we are the initiator of
|
|
// this process.
|
|
Initiator bool
|
|
|
|
// ExtraData is the set of data that was appended to this message to
|
|
// fill out the full maximum transport message size. These fields can
|
|
// be used to specify optional data such as custom TLV fields.
|
|
ExtraData ExtraOpaqueData
|
|
}
|
|
|
|
// A compile time check to ensure Stfu implements the lnwire.Message interface.
|
|
var _ Message = (*Stfu)(nil)
|
|
|
|
// Encode serializes the target Stfu into the passed io.Writer.
|
|
// Serialization will observe the rules defined by the passed protocol version.
|
|
//
|
|
// This is a part of the lnwire.Message interface.
|
|
func (s *Stfu) Encode(w *bytes.Buffer, _ uint32) error {
|
|
if err := WriteChannelID(w, s.ChanID); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := WriteBool(w, s.Initiator); err != nil {
|
|
return err
|
|
}
|
|
|
|
return WriteBytes(w, s.ExtraData)
|
|
}
|
|
|
|
// Decode deserializes the serialized Stfu stored in the passed io.Reader
|
|
// into the target Stfu using the deserialization rules defined by the
|
|
// passed protocol version.
|
|
//
|
|
// This is a part of the lnwire.Message interface.
|
|
func (s *Stfu) Decode(r io.Reader, _ uint32) error {
|
|
if err := ReadElements(
|
|
r, &s.ChanID, &s.Initiator, &s.ExtraData,
|
|
); err != nil {
|
|
return err
|
|
}
|
|
|
|
// This is required to pass the fuzz test round trip equality check.
|
|
if len(s.ExtraData) == 0 {
|
|
s.ExtraData = nil
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MsgType returns the MessageType code which uniquely identifies this message
|
|
// as a Stfu on the wire.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (s *Stfu) MsgType() MessageType {
|
|
return MsgStfu
|
|
}
|
|
|
|
// A compile time check to ensure Stfu implements the
|
|
// lnwire.LinkUpdater interface.
|
|
var _ LinkUpdater = (*Stfu)(nil)
|
|
|
|
// TargetChanID returns the channel id of the link for which this message is
|
|
// intended.
|
|
//
|
|
// NOTE: Part of peer.LinkUpdater interface.
|
|
func (s *Stfu) TargetChanID() ChannelID {
|
|
return s.ChanID
|
|
}
|