From 8b255f72158b2c756d4480bf10c2cd08f87a1e16 Mon Sep 17 00:00:00 2001 From: Elle Mouton Date: Thu, 26 Oct 2023 12:19:23 +0200 Subject: [PATCH] lnwire: add a ChannelAnnouncement interface Add a new ChannelAnnouncement interface and ensure that ChannelAnnouncement1 implements it. --- lnwire/channel_announcement.go | 37 ++++++++++++++++++++++++++++++++++ lnwire/interfaces.go | 26 ++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/lnwire/channel_announcement.go b/lnwire/channel_announcement.go index 386f26551..2396035fe 100644 --- a/lnwire/channel_announcement.go +++ b/lnwire/channel_announcement.go @@ -190,6 +190,8 @@ func (a *ChannelAnnouncement1) DataToSign() ([]byte, error) { // Validate validates the channel announcement message and checks that node // signatures covers the announcement message, and that the bitcoin signatures // covers the node keys. +// +// NOTE: This is part of the ChannelAnnouncement interface. func (a *ChannelAnnouncement1) Validate(_ func(id *ShortChannelID) ( []byte, error)) error { @@ -260,3 +262,38 @@ func (a *ChannelAnnouncement1) Validate(_ func(id *ShortChannelID) ( return nil } + +// Node1KeyBytes returns the bytes representing the public key of node 1 in the +// channel. +// +// NOTE: This is part of the ChannelAnnouncement interface. +func (a *ChannelAnnouncement1) Node1KeyBytes() [33]byte { + return a.NodeID1 +} + +// Node2KeyBytes returns the bytes representing the public key of node 2 in the +// channel. +// +// NOTE: This is part of the ChannelAnnouncement interface. +func (a *ChannelAnnouncement1) Node2KeyBytes() [33]byte { + return a.NodeID2 +} + +// GetChainHash returns the hash of the chain which this channel's funding +// transaction is confirmed in. +// +// NOTE: This is part of the ChannelAnnouncement interface. +func (a *ChannelAnnouncement1) GetChainHash() chainhash.Hash { + return a.ChainHash +} + +// SCID returns the short channel ID of the channel. +// +// NOTE: This is part of the ChannelAnnouncement interface. +func (a *ChannelAnnouncement1) SCID() ShortChannelID { + return a.ShortChannelID +} + +// A compile-time check to ensure that ChannelAnnouncement1 implements the +// ChannelAnnouncement interface. +var _ ChannelAnnouncement = (*ChannelAnnouncement1)(nil) diff --git a/lnwire/interfaces.go b/lnwire/interfaces.go index f8e4373c3..db3ffac9e 100644 --- a/lnwire/interfaces.go +++ b/lnwire/interfaces.go @@ -1,5 +1,7 @@ package lnwire +import "github.com/btcsuite/btcd/chaincfg/chainhash" + // AnnounceSignatures is an interface that represents a message used to // exchange signatures of a ChannelAnnouncment message during the funding flow. type AnnounceSignatures interface { @@ -11,3 +13,27 @@ type AnnounceSignatures interface { Message } + +// ChannelAnnouncement is an interface that must be satisfied by any message +// used to announce and prove the existence of a channel. +type ChannelAnnouncement interface { + // SCID returns the short channel ID of the channel. + SCID() ShortChannelID + + // GetChainHash returns the hash of the chain which this channel's + // funding transaction is confirmed in. + GetChainHash() chainhash.Hash + + // Node1KeyBytes returns the bytes representing the public key of node + // 1 in the channel. + Node1KeyBytes() [33]byte + + // Node2KeyBytes returns the bytes representing the public key of node + // 2 in the channel. + Node2KeyBytes() [33]byte + + // Validate checks the various signatures of the announcement. + Validate(fetchPKScript func(id *ShortChannelID) ([]byte, error)) error + + Message +}