mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-11-18 18:17:39 +01:00
lnd+graph: add GraphBootstrapper to the GraphSource interface
So that LND can use a different GraphSource for network bootstrapping and does not need to rely on its local graph db.
This commit is contained in:
@@ -8,6 +8,8 @@ import (
|
|||||||
|
|
||||||
"github.com/btcsuite/btcd/btcec/v2"
|
"github.com/btcsuite/btcd/btcec/v2"
|
||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
|
"github.com/lightningnetwork/lnd/autopilot"
|
||||||
|
"github.com/lightningnetwork/lnd/discovery"
|
||||||
graphdb "github.com/lightningnetwork/lnd/graph/db"
|
graphdb "github.com/lightningnetwork/lnd/graph/db"
|
||||||
"github.com/lightningnetwork/lnd/graph/db/models"
|
"github.com/lightningnetwork/lnd/graph/db/models"
|
||||||
"github.com/lightningnetwork/lnd/graph/session"
|
"github.com/lightningnetwork/lnd/graph/session"
|
||||||
@@ -217,6 +219,18 @@ func (s *DBSource) FetchLightningNode(_ context.Context,
|
|||||||
return s.db.FetchLightningNode(nodePub)
|
return s.db.FetchLightningNode(nodePub)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GraphBootstrapper returns a NetworkPeerBootstrapper instance backed by the
|
||||||
|
// ChannelGraph instance.
|
||||||
|
//
|
||||||
|
// NOTE: this is part of the GraphSource interface.
|
||||||
|
func (s *DBSource) GraphBootstrapper(_ context.Context) (
|
||||||
|
discovery.NetworkPeerBootstrapper, error) {
|
||||||
|
|
||||||
|
chanGraph := autopilot.ChannelGraphFromDatabase(s.db)
|
||||||
|
|
||||||
|
return discovery.NewGraphBootstrapper(chanGraph)
|
||||||
|
}
|
||||||
|
|
||||||
// kvdbRTx is an implementation of graphdb.RTx backed by a KVDB database read
|
// kvdbRTx is an implementation of graphdb.RTx backed by a KVDB database read
|
||||||
// transaction.
|
// transaction.
|
||||||
type kvdbRTx struct {
|
type kvdbRTx struct {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
|
|
||||||
"github.com/btcsuite/btcd/btcec/v2"
|
"github.com/btcsuite/btcd/btcec/v2"
|
||||||
"github.com/lightningnetwork/lnd/channeldb"
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
|
"github.com/lightningnetwork/lnd/discovery"
|
||||||
"github.com/lightningnetwork/lnd/graph/db/models"
|
"github.com/lightningnetwork/lnd/graph/db/models"
|
||||||
"github.com/lightningnetwork/lnd/graph/session"
|
"github.com/lightningnetwork/lnd/graph/session"
|
||||||
"github.com/lightningnetwork/lnd/lnrpc/invoicesrpc"
|
"github.com/lightningnetwork/lnd/lnrpc/invoicesrpc"
|
||||||
@@ -68,4 +69,9 @@ type GraphSource interface {
|
|||||||
// graphdb.ErrGraphNodeNotFound is returned.
|
// graphdb.ErrGraphNodeNotFound is returned.
|
||||||
FetchLightningNode(ctx context.Context, nodePub route.Vertex) (
|
FetchLightningNode(ctx context.Context, nodePub route.Vertex) (
|
||||||
*models.LightningNode, error)
|
*models.LightningNode, error)
|
||||||
|
|
||||||
|
// GraphBootstrapper returns a network peer bootstrapper that can be
|
||||||
|
// used to discover new peers to connect to.
|
||||||
|
GraphBootstrapper(ctx context.Context) (
|
||||||
|
discovery.NetworkPeerBootstrapper, error)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2817,6 +2817,7 @@ out:
|
|||||||
// based on the server, and currently active bootstrap mechanisms as defined
|
// based on the server, and currently active bootstrap mechanisms as defined
|
||||||
// within the current configuration.
|
// within the current configuration.
|
||||||
func initNetworkBootstrappers(s *server) ([]discovery.NetworkPeerBootstrapper, error) {
|
func initNetworkBootstrappers(s *server) ([]discovery.NetworkPeerBootstrapper, error) {
|
||||||
|
ctx := context.TODO()
|
||||||
srvrLog.Infof("Initializing peer network bootstrappers!")
|
srvrLog.Infof("Initializing peer network bootstrappers!")
|
||||||
|
|
||||||
var bootStrappers []discovery.NetworkPeerBootstrapper
|
var bootStrappers []discovery.NetworkPeerBootstrapper
|
||||||
@@ -2824,8 +2825,7 @@ func initNetworkBootstrappers(s *server) ([]discovery.NetworkPeerBootstrapper, e
|
|||||||
// First, we'll create an instance of the ChannelGraphBootstrapper as
|
// First, we'll create an instance of the ChannelGraphBootstrapper as
|
||||||
// this can be used by default if we've already partially seeded the
|
// this can be used by default if we've already partially seeded the
|
||||||
// network.
|
// network.
|
||||||
chanGraph := autopilot.ChannelGraphFromDatabase(s.graphDB)
|
graphBootstrapper, err := s.graphSource.GraphBootstrapper(ctx)
|
||||||
graphBootstrapper, err := discovery.NewGraphBootstrapper(chanGraph)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user