Files
lspd/main.go
2023-01-05 13:18:43 +01:00

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")
}