2017-03-27 18:07:18 +03:00
|
|
|
package lnwire
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io"
|
|
|
|
|
|
|
|
"github.com/roasbeef/btcd/btcec"
|
|
|
|
)
|
|
|
|
|
|
|
|
// AnnounceSignatures this is a direct message between two endpoints of a
|
|
|
|
// channel and serves as an opt-in mechanism to allow the announcement of
|
|
|
|
// the channel to the rest of the network. It contains the necessary
|
|
|
|
// signatures by the sender to construct the channel announcement message.
|
|
|
|
type AnnounceSignatures struct {
|
|
|
|
// ChannelID is the unique description of the funding transaction.
|
|
|
|
// Channel id is better for users and debugging and short channel id is
|
|
|
|
// used for quick test on existence of the particular utxo inside the
|
|
|
|
// block chain, because it contains information about block.
|
2017-04-17 01:22:20 +03:00
|
|
|
ChannelID ChannelID
|
2017-03-27 18:07:18 +03:00
|
|
|
|
|
|
|
// ShortChannelID is the unique description of the funding
|
|
|
|
// transaction. It is constructed with the most significant 3 bytes
|
|
|
|
// as the block height, the next 3 bytes indicating the transaction
|
|
|
|
// index within the block, and the least significant two bytes
|
|
|
|
// indicating the output index which pays to the channel.
|
2017-03-27 18:22:37 +03:00
|
|
|
ShortChannelID ShortChannelID
|
2017-03-27 18:07:18 +03:00
|
|
|
|
|
|
|
// NodeSignature is the signature which contains the signed announce
|
|
|
|
// channel message, by this signature we proof that we posses of the
|
|
|
|
// node pub key and creating the reference node_key -> bitcoin_key.
|
|
|
|
NodeSignature *btcec.Signature
|
|
|
|
|
|
|
|
// BitcoinSignature is the signature which contains the signed node
|
|
|
|
// public key, by this signature we proof that we posses of the
|
|
|
|
// bitcoin key and and creating the reverse reference bitcoin_key ->
|
|
|
|
// node_key.
|
|
|
|
BitcoinSignature *btcec.Signature
|
|
|
|
}
|
|
|
|
|
|
|
|
// A compile time check to ensure AnnounceSignatures implements the
|
|
|
|
// lnwire.Message interface.
|
|
|
|
var _ Message = (*AnnounceSignatures)(nil)
|
|
|
|
|
|
|
|
// Decode deserializes a serialized AnnounceSignatures stored in the passed
|
|
|
|
// io.Reader observing the specified protocol version.
|
|
|
|
//
|
|
|
|
// This is part of the lnwire.Message interface.
|
|
|
|
func (a *AnnounceSignatures) Decode(r io.Reader, pver uint32) error {
|
|
|
|
return readElements(r,
|
|
|
|
&a.ChannelID,
|
|
|
|
&a.ShortChannelID,
|
|
|
|
&a.NodeSignature,
|
|
|
|
&a.BitcoinSignature,
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Encode serializes the target AnnounceSignatures into the passed io.Writer
|
|
|
|
// observing the protocol version specified.
|
|
|
|
//
|
|
|
|
// This is part of the lnwire.Message interface.
|
|
|
|
func (a *AnnounceSignatures) Encode(w io.Writer, pver uint32) error {
|
|
|
|
return writeElements(w,
|
|
|
|
a.ChannelID,
|
|
|
|
a.ShortChannelID,
|
|
|
|
a.NodeSignature,
|
|
|
|
a.BitcoinSignature,
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2017-04-20 01:57:43 +03:00
|
|
|
// MsgType returns the integer uniquely identifying this message type on the
|
2017-03-27 18:07:18 +03:00
|
|
|
// wire.
|
|
|
|
//
|
|
|
|
// This is part of the lnwire.Message interface.
|
2017-04-20 01:57:43 +03:00
|
|
|
func (a *AnnounceSignatures) MsgType() MessageType {
|
|
|
|
return MsgAnnounceSignatures
|
2017-03-27 18:07:18 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// 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 *AnnounceSignatures) MaxPayloadLength(pver uint32) uint32 {
|
|
|
|
var length uint32
|
|
|
|
|
|
|
|
// ChannelID - 36 bytes
|
|
|
|
length += 36
|
|
|
|
|
|
|
|
// ShortChannelID - 8 bytes
|
|
|
|
length += 8
|
|
|
|
|
|
|
|
// NodeSignatures - 64 bytes
|
|
|
|
length += 64
|
|
|
|
|
|
|
|
// BitcoinSignatures - 64 bytes
|
|
|
|
length += 64
|
|
|
|
|
|
|
|
return length
|
|
|
|
}
|