mirror of
https://github.com/aljazceru/lspd.git
synced 2025-12-19 14:54:22 +01:00
implement GetNodes on NodesService
This commit is contained in:
27
main.go
27
main.go
@@ -35,17 +35,17 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
n := os.Getenv("NODES")
|
n := os.Getenv("NODES")
|
||||||
var nodes []*config.NodeConfig
|
var nodeConfigs []*config.NodeConfig
|
||||||
err := json.Unmarshal([]byte(n), &nodes)
|
err := json.Unmarshal([]byte(n), &nodeConfigs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to unmarshal NODES env: %v", err)
|
log.Fatalf("failed to unmarshal NODES env: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(nodes) == 0 {
|
if len(nodeConfigs) == 0 {
|
||||||
log.Fatalf("need at least one node configured in NODES.")
|
log.Fatalf("need at least one node configured in NODES.")
|
||||||
}
|
}
|
||||||
|
|
||||||
nodesService, err := shared.NewNodesService(nodes)
|
nodesService, err := shared.NewNodesService(nodeConfigs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to create nodes service: %v", err)
|
log.Fatalf("failed to create nodes service: %v", err)
|
||||||
}
|
}
|
||||||
@@ -90,36 +90,37 @@ func main() {
|
|||||||
notificationService := notifications.NewNotificationService(notificationsStore)
|
notificationService := notifications.NewNotificationService(notificationsStore)
|
||||||
|
|
||||||
var interceptors []interceptor.HtlcInterceptor
|
var interceptors []interceptor.HtlcInterceptor
|
||||||
|
nodes := nodesService.GetNodes()
|
||||||
for _, node := range nodes {
|
for _, node := range nodes {
|
||||||
var htlcInterceptor interceptor.HtlcInterceptor
|
var htlcInterceptor interceptor.HtlcInterceptor
|
||||||
if node.Lnd != nil {
|
if node.NodeConfig.Lnd != nil {
|
||||||
client, err := lnd.NewLndClient(node.Lnd)
|
client, err := lnd.NewLndClient(node.NodeConfig.Lnd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to initialize LND client: %v", err)
|
log.Fatalf("failed to initialize LND client: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
client.StartListeners()
|
client.StartListeners()
|
||||||
fwsync := lnd.NewForwardingHistorySync(client, interceptStore, forwardingStore)
|
fwsync := lnd.NewForwardingHistorySync(client, interceptStore, forwardingStore)
|
||||||
interceptor := interceptor.NewInterceptor(client, node, interceptStore, feeEstimator, feeStrategy, notificationService)
|
interceptor := interceptor.NewInterceptor(client, node.NodeConfig, interceptStore, feeEstimator, feeStrategy, notificationService)
|
||||||
htlcInterceptor, err = lnd.NewLndHtlcInterceptor(node, client, fwsync, interceptor)
|
htlcInterceptor, err = lnd.NewLndHtlcInterceptor(node.NodeConfig, client, fwsync, interceptor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to initialize LND interceptor: %v", err)
|
log.Fatalf("failed to initialize LND interceptor: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if node.Cln != nil {
|
if node.NodeConfig.Cln != nil {
|
||||||
client, err := cln.NewClnClient(node.Cln.SocketPath)
|
client, err := cln.NewClnClient(node.NodeConfig.Cln.SocketPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to initialize CLN client: %v", err)
|
log.Fatalf("failed to initialize CLN client: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
interceptor := interceptor.NewInterceptor(client, node, interceptStore, feeEstimator, feeStrategy, notificationService)
|
interceptor := interceptor.NewInterceptor(client, node.NodeConfig, interceptStore, feeEstimator, feeStrategy, notificationService)
|
||||||
htlcInterceptor, err = cln.NewClnHtlcInterceptor(node, client, interceptor)
|
htlcInterceptor, err = cln.NewClnHtlcInterceptor(node.NodeConfig, client, interceptor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to initialize CLN interceptor: %v", err)
|
log.Fatalf("failed to initialize CLN interceptor: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
msgClient := cln.NewCustomMsgClient(node.Cln, client)
|
msgClient := cln.NewCustomMsgClient(node.NodeConfig.Cln, client)
|
||||||
go msgClient.Start()
|
go msgClient.Start()
|
||||||
msgServer := lsps0.NewServer()
|
msgServer := lsps0.NewServer()
|
||||||
protocolServer := lsps0.NewProtocolServer([]uint32{2})
|
protocolServer := lsps0.NewProtocolServer([]uint32{2})
|
||||||
|
|||||||
@@ -26,9 +26,11 @@ type Node struct {
|
|||||||
|
|
||||||
type NodesService interface {
|
type NodesService interface {
|
||||||
GetNode(token string) (*Node, error)
|
GetNode(token string) (*Node, error)
|
||||||
|
GetNodes() []*Node
|
||||||
}
|
}
|
||||||
type nodesService struct {
|
type nodesService struct {
|
||||||
nodes map[string]*Node
|
nodes []*Node
|
||||||
|
nodeLookup map[string]*Node
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNodesService(configs []*config.NodeConfig) (NodesService, error) {
|
func NewNodesService(configs []*config.NodeConfig) (NodesService, error) {
|
||||||
@@ -36,7 +38,8 @@ func NewNodesService(configs []*config.NodeConfig) (NodesService, error) {
|
|||||||
return nil, fmt.Errorf("no nodes supplied")
|
return nil, fmt.Errorf("no nodes supplied")
|
||||||
}
|
}
|
||||||
|
|
||||||
nodes := make(map[string]*Node)
|
nodes := []*Node{}
|
||||||
|
nodeLookup := make(map[string]*Node)
|
||||||
for _, config := range configs {
|
for _, config := range configs {
|
||||||
pk, err := hex.DecodeString(config.LspdPrivateKey)
|
pk, err := hex.DecodeString(config.LspdPrivateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -91,28 +94,34 @@ func NewNodesService(configs []*config.NodeConfig) (NodesService, error) {
|
|||||||
node.NodeConfig.NodePubkey = info.Pubkey
|
node.NodeConfig.NodePubkey = info.Pubkey
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nodes = append(nodes, node)
|
||||||
for _, token := range config.Tokens {
|
for _, token := range config.Tokens {
|
||||||
_, exists := nodes[token]
|
_, exists := nodeLookup[token]
|
||||||
if exists {
|
if exists {
|
||||||
return nil, fmt.Errorf("cannot have multiple nodes with the same token")
|
return nil, fmt.Errorf("cannot have multiple nodes with the same token")
|
||||||
}
|
}
|
||||||
|
|
||||||
nodes[token] = node
|
nodeLookup[token] = node
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &nodesService{
|
return &nodesService{
|
||||||
nodes: nodes,
|
nodes: nodes,
|
||||||
|
nodeLookup: nodeLookup,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var ErrNodeNotFound = errors.New("node not found")
|
var ErrNodeNotFound = errors.New("node not found")
|
||||||
|
|
||||||
func (s *nodesService) GetNode(token string) (*Node, error) {
|
func (s *nodesService) GetNode(token string) (*Node, error) {
|
||||||
node, ok := s.nodes[token]
|
node, ok := s.nodeLookup[token]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, ErrNodeNotFound
|
return nil, ErrNodeNotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
return node, nil
|
return node, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *nodesService) GetNodes() []*Node {
|
||||||
|
return s.nodes
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user