discovery: ignore any incoming channel ann's for an unknown chain
This commit fixes an existing bug in the announcement processing of the authenticated gossiper. We will now only examine an incoming announcement for validity if it targets the chain that we’re currently active on.
This commit is contained in:
1 file changed
+28
@@ -15,6 +15,7 @@ import (
|
|||||||
"github.com/lightningnetwork/lnd/lnwire"
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
"github.com/lightningnetwork/lnd/routing"
|
"github.com/lightningnetwork/lnd/routing"
|
||||||
"github.com/roasbeef/btcd/btcec"
|
"github.com/roasbeef/btcd/btcec"
|
||||||
|
"github.com/roasbeef/btcd/chaincfg/chainhash"
|
||||||
"github.com/roasbeef/btcd/wire"
|
"github.com/roasbeef/btcd/wire"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -49,6 +50,15 @@ type feeUpdateRequest struct {
|
|||||||
// Config defines the configuration for the service. ALL elements within the
|
// Config defines the configuration for the service. ALL elements within the
|
||||||
// configuration MUST be non-nil for the service to carry out its duties.
|
// configuration MUST be non-nil for the service to carry out its duties.
|
||||||
type Config struct {
|
type Config struct {
|
||||||
|
// ChainHash is a hash that indicates which resident chain of the
|
||||||
|
// AuthenticatedGossiper. Any announcements that don't match this
|
||||||
|
// chain hash will be ignored.
|
||||||
|
//
|
||||||
|
// TODO(roasbeef): eventually make into map so can de-multiplex
|
||||||
|
// incoming announcements
|
||||||
|
// * also need to do same for Notifier
|
||||||
|
ChainHash chainhash.Hash
|
||||||
|
|
||||||
// Router is the subsystem which is responsible for managing the
|
// Router is the subsystem which is responsible for managing the
|
||||||
// topology of lightning network. After incoming channel, node, channel
|
// topology of lightning network. After incoming channel, node, channel
|
||||||
// updates announcements are validated they are sent to the router in
|
// updates announcements are validated they are sent to the router in
|
||||||
@@ -678,6 +688,15 @@ func (d *AuthenticatedGossiper) processNetworkAnnouncement(nMsg *networkMsg) []l
|
|||||||
// the existence of a channel and not yet the routing policies in
|
// the existence of a channel and not yet the routing policies in
|
||||||
// either direction of the channel.
|
// either direction of the channel.
|
||||||
case *lnwire.ChannelAnnouncement:
|
case *lnwire.ChannelAnnouncement:
|
||||||
|
// We'll ignore any channel announcements that target any chain
|
||||||
|
// other than the set of chains we know of.
|
||||||
|
if !bytes.Equal(msg.ChainHash[:], d.cfg.ChainHash[:]) {
|
||||||
|
log.Error("Ignoring ChannelAnnouncement from "+
|
||||||
|
"chain=%v, gossiper on chain=%v", msg.ChainHash,
|
||||||
|
d.cfg.ChainHash)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// If the advertised inclusionary block is beyond our knowledge
|
// If the advertised inclusionary block is beyond our knowledge
|
||||||
// of the chain tip, then we'll put the announcement in limbo
|
// of the chain tip, then we'll put the announcement in limbo
|
||||||
// to be fully verified once we advance forward in the chain.
|
// to be fully verified once we advance forward in the chain.
|
||||||
@@ -771,6 +790,15 @@ func (d *AuthenticatedGossiper) processNetworkAnnouncement(nMsg *networkMsg) []l
|
|||||||
// that the directional information for an already known channel has
|
// that the directional information for an already known channel has
|
||||||
// been updated.
|
// been updated.
|
||||||
case *lnwire.ChannelUpdate:
|
case *lnwire.ChannelUpdate:
|
||||||
|
// We'll ignore any channel announcements that target any chain
|
||||||
|
// other than the set of chains we know of.
|
||||||
|
if !bytes.Equal(msg.ChainHash[:], d.cfg.ChainHash[:]) {
|
||||||
|
log.Error("Ignoring ChannelUpdate from "+
|
||||||
|
"chain=%v, gossiper on chain=%v", msg.ChainHash,
|
||||||
|
d.cfg.ChainHash)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
blockHeight := msg.ShortChannelID.BlockHeight
|
blockHeight := msg.ShortChannelID.BlockHeight
|
||||||
shortChanID := msg.ShortChannelID.ToUint64()
|
shortChanID := msg.ShortChannelID.ToUint64()
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user