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.
78 lines
2.5 KiB
78 lines
2.5 KiB
package lnwire |
|
|
|
import ( |
|
"io" |
|
|
|
"github.com/btcsuite/btcutil" |
|
) |
|
|
|
// ClosingSigned is sent by both parties to a channel once the channel is clear |
|
// of HTLCs, and is primarily concerned with negotiating fees for the close |
|
// transaction. Each party provides a signature for a transaction with a fee |
|
// that they believe is fair. The process terminates when both sides agree on |
|
// the same fee, or when one side force closes the channel. |
|
// |
|
// NOTE: The responder is able to send a signature without any additional |
|
// messages as all transactions are assembled observing BIP 69 which defines a |
|
// canonical ordering for input/outputs. Therefore, both sides are able to |
|
// arrive at an identical closure transaction as they know the order of the |
|
// inputs/outputs. |
|
type ClosingSigned struct { |
|
// ChannelID serves to identify which channel is to be closed. |
|
ChannelID ChannelID |
|
|
|
// FeeSatoshis is the total fee in satoshis that the party to the |
|
// channel would like to propose for the close transaction. |
|
FeeSatoshis btcutil.Amount |
|
|
|
// Signature is for the proposed channel close transaction. |
|
Signature Sig |
|
|
|
// 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 |
|
} |
|
|
|
// NewClosingSigned creates a new empty ClosingSigned message. |
|
func NewClosingSigned(cid ChannelID, fs btcutil.Amount, |
|
sig Sig) *ClosingSigned { |
|
|
|
return &ClosingSigned{ |
|
ChannelID: cid, |
|
FeeSatoshis: fs, |
|
Signature: sig, |
|
} |
|
} |
|
|
|
// A compile time check to ensure ClosingSigned implements the lnwire.Message |
|
// interface. |
|
var _ Message = (*ClosingSigned)(nil) |
|
|
|
// Decode deserializes a serialized ClosingSigned message stored in the passed |
|
// io.Reader observing the specified protocol version. |
|
// |
|
// This is part of the lnwire.Message interface. |
|
func (c *ClosingSigned) Decode(r io.Reader, pver uint32) error { |
|
return ReadElements( |
|
r, &c.ChannelID, &c.FeeSatoshis, &c.Signature, &c.ExtraData, |
|
) |
|
} |
|
|
|
// Encode serializes the target ClosingSigned into the passed io.Writer |
|
// observing the protocol version specified. |
|
// |
|
// This is part of the lnwire.Message interface. |
|
func (c *ClosingSigned) Encode(w io.Writer, pver uint32) error { |
|
return WriteElements( |
|
w, c.ChannelID, c.FeeSatoshis, c.Signature, c.ExtraData, |
|
) |
|
} |
|
|
|
// MsgType returns the integer uniquely identifying this message type on the |
|
// wire. |
|
// |
|
// This is part of the lnwire.Message interface. |
|
func (c *ClosingSigned) MsgType() MessageType { |
|
return MsgClosingSigned |
|
}
|
|
|