discovery/gossiper: move zombie handling to helper
This commit is contained in:
parent
60250f0a04
commit
4baee9537b
@ -1881,44 +1881,13 @@ func (d *AuthenticatedGossiper) processNetworkAnnouncement(
|
||||
break
|
||||
|
||||
case channeldb.ErrZombieEdge:
|
||||
// Since we've deemed the update as not stale above,
|
||||
// before marking it live, we'll make sure it has been
|
||||
// signed by the correct party. The least-significant
|
||||
// bit in the flag on the channel update tells us which
|
||||
// edge is being updated.
|
||||
var pubKey *btcec.PublicKey
|
||||
switch {
|
||||
case msg.ChannelFlags&lnwire.ChanUpdateDirection == 0:
|
||||
pubKey, _ = chanInfo.NodeKey1()
|
||||
case msg.ChannelFlags&lnwire.ChanUpdateDirection == 1:
|
||||
pubKey, _ = chanInfo.NodeKey2()
|
||||
}
|
||||
|
||||
err := routing.VerifyChannelUpdateSignature(msg, pubKey)
|
||||
err = d.processZombieUpdate(chanInfo, msg)
|
||||
if err != nil {
|
||||
err := fmt.Errorf("unable to verify channel "+
|
||||
"update signature: %v", err)
|
||||
log.Error(err)
|
||||
log.Warn(err)
|
||||
nMsg.err <- err
|
||||
return nil, false
|
||||
}
|
||||
|
||||
// With the signature valid, we'll proceed to mark the
|
||||
// edge as live and wait for the channel announcement to
|
||||
// come through again.
|
||||
err = d.cfg.Router.MarkEdgeLive(msg.ShortChannelID)
|
||||
if err != nil {
|
||||
err := fmt.Errorf("unable to remove edge with "+
|
||||
"chan_id=%v from zombie index: %v",
|
||||
msg.ShortChannelID, err)
|
||||
log.Error(err)
|
||||
nMsg.err <- err
|
||||
return nil, false
|
||||
}
|
||||
|
||||
log.Debugf("Removed edge with chan_id=%v from zombie "+
|
||||
"index", msg.ShortChannelID)
|
||||
|
||||
// We'll fallthrough to ensure we stash the update until
|
||||
// we receive its corresponding ChannelAnnouncement.
|
||||
// This is needed to ensure the edge exists in the graph
|
||||
@ -2447,6 +2416,45 @@ func (d *AuthenticatedGossiper) processNetworkAnnouncement(
|
||||
}
|
||||
}
|
||||
|
||||
// processZombieUpdate determines whether the provided channel update should
|
||||
// resurrect a given zombie edge.
|
||||
func (d *AuthenticatedGossiper) processZombieUpdate(
|
||||
chanInfo *channeldb.ChannelEdgeInfo, msg *lnwire.ChannelUpdate) error {
|
||||
|
||||
// Since we've deemed the update as not stale above, before marking it
|
||||
// live, we'll make sure it has been signed by the correct party. The
|
||||
// least-significant bit in the flag on the channel update tells us
|
||||
// which edge is being updated.
|
||||
var pubKey *btcec.PublicKey
|
||||
switch {
|
||||
case msg.ChannelFlags&lnwire.ChanUpdateDirection == 0:
|
||||
pubKey, _ = chanInfo.NodeKey1()
|
||||
case msg.ChannelFlags&lnwire.ChanUpdateDirection == 1:
|
||||
pubKey, _ = chanInfo.NodeKey2()
|
||||
}
|
||||
|
||||
err := routing.VerifyChannelUpdateSignature(msg, pubKey)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to verify channel "+
|
||||
"update signature: %v", err)
|
||||
}
|
||||
|
||||
// With the signature valid, we'll proceed to mark the
|
||||
// edge as live and wait for the channel announcement to
|
||||
// come through again.
|
||||
err = d.cfg.Router.MarkEdgeLive(msg.ShortChannelID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to remove edge with "+
|
||||
"chan_id=%v from zombie index: %v",
|
||||
msg.ShortChannelID, err)
|
||||
}
|
||||
|
||||
log.Debugf("Removed edge with chan_id=%v from zombie "+
|
||||
"index", msg.ShortChannelID)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// fetchNodeAnn fetches the latest signed node announcement from our point of
|
||||
// view for the node with the given public key.
|
||||
func (d *AuthenticatedGossiper) fetchNodeAnn(
|
||||
|
Loading…
Reference in New Issue
Block a user