Merge pull request #4822 from bhandras/add_globalfeatures

routing: add missing features to NetworkNodeUpdate (and also depreacte GlobalFeatures)
This commit is contained in:
András Bánki-Horváth 2020-12-08 10:16:50 +01:00 committed by GitHub
commit 669663bfc2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 832 additions and 789 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2694,9 +2694,15 @@ message GraphTopologyUpdate {
message NodeUpdate {
repeated string addresses = 1;
string identity_key = 2;
bytes global_features = 3;
bytes global_features = 3 [deprecated = true];
string alias = 4;
string color = 5;
/*
Features that the node has advertised in the init message, node
announcements and invoices.
*/
map<uint32, Feature> features = 6;
}
message ChannelEdgeUpdate {
/*

View File

@ -4550,6 +4550,13 @@
},
"color": {
"type": "string"
},
"features": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/lnrpcFeature"
},
"description": "Features that the node has advertised in the init message, node\nannouncements and invoices."
}
}
},

View File

@ -238,15 +238,14 @@ type NetworkNodeUpdate struct {
// updates.
IdentityKey *btcec.PublicKey
// GlobalFeatures is a set of opaque bytes that describe the set of
// features supported by the node.
GlobalFeatures []byte
// Alias is the alias or nick name of the node.
Alias string
// Color is the node's color in hex code format.
Color string
// Features holds the set of features the node supports.
Features *lnwire.FeatureVector
}
// ChannelEdgeUpdate is an update for a new channel within the ChannelGraph.
@ -318,11 +317,13 @@ func addToTopologyChange(graph *channeldb.ChannelGraph, update *TopologyChange,
if err != nil {
return err
}
nodeUpdate := &NetworkNodeUpdate{
Addresses: m.Addresses,
IdentityKey: pubKey,
Alias: m.Alias,
Color: EncodeHexColor(m.Color),
Features: m.Features.Clone(),
}
nodeUpdate.IdentityKey.Curve = nil

View File

@ -1,6 +1,7 @@
package routing
import (
"bytes"
"fmt"
"image/color"
"net"
@ -21,6 +22,7 @@ import (
"github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/routing/chainview"
"github.com/lightningnetwork/lnd/routing/route"
"github.com/stretchr/testify/require"
)
var (
@ -572,6 +574,9 @@ func TestNodeUpdateNotification(t *testing.T) {
t.Fatalf("unable to create test node: %v", err)
}
testFeaturesBuf := new(bytes.Buffer)
require.NoError(t, testFeatures.Encode(testFeaturesBuf))
edge := &channeldb.ChannelEdgeInfo{
ChannelID: chanID.ToUint64(),
NodeKey1Bytes: node1.PubKeyBytes,
@ -623,6 +628,14 @@ func TestNodeUpdateNotification(t *testing.T) {
"got %x", nodeKey.SerializeCompressed(),
nodeUpdate.IdentityKey.SerializeCompressed())
}
featuresBuf := new(bytes.Buffer)
require.NoError(t, nodeUpdate.Features.Encode(featuresBuf))
require.Equal(
t, testFeaturesBuf.Bytes(), featuresBuf.Bytes(),
)
if nodeUpdate.Alias != ann.Alias {
t.Fatalf("node alias doesn't match: expected %v, got %v",
ann.Alias, nodeUpdate.Alias)

View File

@ -5509,11 +5509,13 @@ func marshallTopologyChange(topChange *routing.TopologyChange) *lnrpc.GraphTopol
}
nodeUpdates[i] = &lnrpc.NodeUpdate{
Addresses: addrs,
IdentityKey: encodeKey(nodeUpdate.IdentityKey),
GlobalFeatures: nodeUpdate.GlobalFeatures,
Alias: nodeUpdate.Alias,
Color: nodeUpdate.Color,
Addresses: addrs,
IdentityKey: encodeKey(nodeUpdate.IdentityKey),
Alias: nodeUpdate.Alias,
Color: nodeUpdate.Color,
Features: invoicesrpc.CreateRPCFeatures(
nodeUpdate.Features,
),
}
}