mirror of
https://github.com/aljazceru/lspd.git
synced 2025-12-19 06:44:23 +01:00
103 lines
1.9 KiB
Go
103 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"sync"
|
|
"syscall"
|
|
|
|
"github.com/btcsuite/btcd/btcec/v2"
|
|
)
|
|
|
|
func main() {
|
|
if len(os.Args) > 1 && os.Args[1] == "genkey" {
|
|
p, err := btcec.NewPrivateKey()
|
|
if err != nil {
|
|
log.Fatalf("btcec.NewPrivateKey() error: %v", err)
|
|
}
|
|
fmt.Printf("LSPD_PRIVATE_KEY=\"%x\"\n", p.Serialize())
|
|
return
|
|
}
|
|
|
|
err := pgConnect()
|
|
if err != nil {
|
|
log.Fatalf("pgConnect() error: %v", err)
|
|
}
|
|
|
|
runCln := os.Getenv("RUN_CLN") == "true"
|
|
runLnd := os.Getenv("RUN_LND") == "true"
|
|
|
|
if runCln && runLnd {
|
|
log.Fatalf("One of RUN_CLN or RUN_LND must be true, not both.")
|
|
}
|
|
|
|
if !runCln && !runLnd {
|
|
log.Fatalf("Either RUN_CLN or RUN_LND must be true.")
|
|
}
|
|
|
|
var interceptor HtlcInterceptor
|
|
if runCln {
|
|
interceptor = NewClnHtlcInterceptor()
|
|
}
|
|
|
|
if runLnd {
|
|
interceptor = NewLndHtlcInterceptor()
|
|
}
|
|
|
|
s := NewGrpcServer()
|
|
|
|
var wg sync.WaitGroup
|
|
wg.Add(2)
|
|
|
|
go func() {
|
|
err := interceptor.Start()
|
|
if err == nil {
|
|
log.Printf("Interceptor stopped.")
|
|
} else {
|
|
log.Printf("FATAL. Interceptor stopped with error: %v", err)
|
|
}
|
|
s.Stop()
|
|
wg.Done()
|
|
}()
|
|
|
|
client = interceptor.WaitStarted()
|
|
info, err := client.GetInfo()
|
|
if err != nil {
|
|
log.Fatalf("client.GetInfo() error: %v", err)
|
|
}
|
|
log.Printf("Connected to node '%s', alias '%s'", info.Pubkey, info.Alias)
|
|
|
|
if nodeName == "" {
|
|
nodeName = info.Alias
|
|
}
|
|
if nodePubkey == "" {
|
|
nodePubkey = info.Pubkey
|
|
}
|
|
|
|
go func() {
|
|
err := s.Start()
|
|
if err == nil {
|
|
log.Printf("GRPC server stopped.")
|
|
} else {
|
|
log.Printf("FATAL. GRPC server stopped with error: %v", err)
|
|
}
|
|
|
|
interceptor.Stop()
|
|
wg.Done()
|
|
}()
|
|
|
|
c := make(chan os.Signal, 1)
|
|
signal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
|
|
go func() {
|
|
sig := <-c
|
|
log.Printf("Received stop signal %v. Stopping.", sig)
|
|
s.Stop()
|
|
interceptor.Stop()
|
|
}()
|
|
|
|
wg.Wait()
|
|
log.Printf("lspd exited")
|
|
}
|