lnd.xprv/lnwire/channel_reestablish.go
Andrey Samokhvalov f29b4f60e4 lnwire: add BOLT#2 channel reestablish message
In this commit the reestablish message have been added, which serves as
channel state synchronization message. Before exchanging the messages
for particular channel peers have to send it to each other as the
first message in order to be sure that non of the updates have been
lost because of the previous disconnect.
2017-11-09 16:38:56 -08:00

74 lines
2.1 KiB
Go

package lnwire
import "io"
// ChannelReestablish is sent during node reconnection for every channel
// established in order to synchronize the states on both sides.
type ChannelReestablish struct {
// ChanID serves to identify to which channel this message belongs.
ChanID ChannelID
// NextLocalCommitmentNumber is the commitment number of the next
// commitment signed message it expects to receive.
NextLocalCommitmentNumber uint64
// NextRemoteRevocationNumber is the commitment number of the next
// revoke and ack message it expects to receive.
NextRemoteRevocationNumber uint64
}
// A compile time check to ensure ChannelReestablish implements the
// lnwire.Message interface.
var _ Message = (*ChannelReestablish)(nil)
// Decode deserializes a serialized ChannelReestablish stored in the passed
// io.Reader observing the specified protocol version.
//
// This is part of the lnwire.Message interface.
func (a *ChannelReestablish) Decode(r io.Reader, pver uint32) error {
return readElements(r,
&a.ChanID,
&a.NextLocalCommitmentNumber,
&a.NextRemoteRevocationNumber,
)
}
// Encode serializes the target ChannelReestablish into the passed io.Writer
// observing the protocol version specified.
//
// This is part of the lnwire.Message interface.
func (a *ChannelReestablish) Encode(w io.Writer, pver uint32) error {
return writeElements(w,
a.ChanID,
a.NextLocalCommitmentNumber,
a.NextRemoteRevocationNumber,
)
}
// MsgType returns the integer uniquely identifying this message type on the
// wire.
//
// This is part of the lnwire.Message interface.
func (a *ChannelReestablish) MsgType() MessageType {
return MsgChannelReestablish
}
// MaxPayloadLength returns the maximum allowed payload size for this message
// observing the specified protocol version.
//
// This is part of the lnwire.Message interface.
func (a *ChannelReestablish) MaxPayloadLength(pver uint32) uint32 {
var length uint32
// ChanID - 32 bytes
length += 32
// NextLocalCommitmentNumber - 8 bytes
length += 8
// NextRemoteRevocationNumber - 8 bytes
length += 8
return length
}