peer+server: make fetchLastChanUpdate _always_ fetch our own update
This commit fixes a bug that would cause us to fetch our peer's ChannelUpdate in some cases, where we really wanted to fetch our own. The reason this happened was that we passed the peer's pubkey to fetchLastChanUpdate, making us match on their policy. This would lead to ChannelUpdates being sent during routing which would have no effect on the attempted path. We fix this by always use our own pubkey in fetchLastChanUpdate, and also uses the common methods within the server to be able to extract the update even when only one policy is known.
This commit is contained in:
2 files changed
+30
-47
No files matched your search
@@ -336,7 +336,7 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB, cc *chainControl,
|
||||
FwdingLog: chanDB.ForwardingLog(),
|
||||
SwitchPackager: channeldb.NewSwitchPackager(),
|
||||
ExtractErrorEncrypter: s.sphinx.ExtractErrorEncrypter,
|
||||
FetchLastChannelUpdate: fetchLastChanUpdate(s, serializedPubKey),
|
||||
FetchLastChannelUpdate: s.fetchLastChanUpdate(),
|
||||
Notifier: s.cc.chainNotifier,
|
||||
FwdEventTicker: ticker.New(
|
||||
htlcswitch.DefaultFwdEventInterval),
|
||||
@@ -2957,6 +2957,21 @@ func (s *server) fetchLastChanUpdateByOutPoint(op wire.OutPoint) (
|
||||
return extractChannelUpdate(pubKey, info, edge1, edge2)
|
||||
}
|
||||
|
||||
// fetchLastChanUpdate returns a function which is able to retrieve our latest
|
||||
// channel update for a target channel.
|
||||
func (s *server) fetchLastChanUpdate() func(lnwire.ShortChannelID) (
|
||||
*lnwire.ChannelUpdate, error) {
|
||||
|
||||
ourPubKey := s.identityPriv.PubKey().SerializeCompressed()
|
||||
return func(cid lnwire.ShortChannelID) (*lnwire.ChannelUpdate, error) {
|
||||
info, edge1, edge2, err := s.chanRouter.GetChannelByID(cid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return extractChannelUpdate(ourPubKey[:], info, edge1, edge2)
|
||||
}
|
||||
}
|
||||
|
||||
// extractChannelUpdate attempts to retrieve a lnwire.ChannelUpdate message
|
||||
// from an edge's info and a set of routing policies.
|
||||
// NOTE: the passed policies can be nil.
|
||||
|
||||
Reference in new issue
Block a user