From 68d7741d3a76fd359a07045fa5712ac9165922e7 Mon Sep 17 00:00:00 2001 From: Jesse de Wit Date: Mon, 21 Nov 2022 14:23:33 +0100 Subject: [PATCH] create client in interceptor startup --- cln_interceptor.go | 35 ++++++++++++++++++++++++++++------- htlc_interceptor.go | 1 + lnd_interceptor.go | 18 +++++++++++++++--- main.go | 31 ++++++++++++++----------------- 4 files changed, 58 insertions(+), 27 deletions(-) diff --git a/cln_interceptor.go b/cln_interceptor.go index 6414d56..a64e727 100644 --- a/cln_interceptor.go +++ b/cln_interceptor.go @@ -7,6 +7,7 @@ import ( "io" "log" "os" + "sync" "time" sphinx "github.com/lightningnetwork/lightning-onion" @@ -18,17 +19,19 @@ import ( type ClnHtlcInterceptor struct { client *ClnClient plugin *glightning.Plugin + initWg sync.WaitGroup } -func NewClnHtlcInterceptor(client *ClnClient) *ClnHtlcInterceptor { - return &ClnHtlcInterceptor{ - client: client, - } +func NewClnHtlcInterceptor() *ClnHtlcInterceptor { + i := &ClnHtlcInterceptor{} + + i.initWg.Add(1) + return i } func (i *ClnHtlcInterceptor) Start() error { //c-lightning plugin initiate - plugin := glightning.NewPlugin(onInit) + plugin := glightning.NewPlugin(i.onInit) i.plugin = plugin plugin.RegisterHooks(&glightning.Hooks{ HtlcAccepted: i.OnHtlcAccepted, @@ -52,8 +55,25 @@ func (i *ClnHtlcInterceptor) Stop() error { return nil } -func onInit(plugin *glightning.Plugin, options map[string]glightning.Option, config *glightning.Config) { +func (i *ClnHtlcInterceptor) WaitStarted() LightningClient { + i.initWg.Wait() + return i.client +} + +func (i *ClnHtlcInterceptor) onInit(plugin *glightning.Plugin, options map[string]glightning.Option, config *glightning.Config) { log.Printf("successfully init'd! %v\n", config.RpcFile) + + //lightning server + clientcln := glightning.NewLightning() + clientcln.SetTimeout(60) + clientcln.StartUp(config.RpcFile, config.LightningDir) + + i.client = &ClnClient{ + client: clientcln, + } + + log.Printf("successfull clientcln.StartUp") + i.initWg.Done() } func (i *ClnHtlcInterceptor) OnHtlcAccepted(event *glightning.HtlcAcceptedEvent) (*glightning.HtlcAcceptedResponse, error) { @@ -143,7 +163,8 @@ func (i *ClnHtlcInterceptor) resumeOrCancel(event *glightning.HtlcAcceptedEvent, func encodePayloadWithNextHop(payloadHex string, channelId uint64) (string, error) { payload, err := hex.DecodeString(payloadHex) if err != nil { - log.Fatalf("failed to decode types %v", err) + log.Printf("failed to decode types. error: %v", err) + return "", err } bufReader := bytes.NewBuffer(payload) var b [8]byte diff --git a/htlc_interceptor.go b/htlc_interceptor.go index bb487df..356463b 100644 --- a/htlc_interceptor.go +++ b/htlc_interceptor.go @@ -3,4 +3,5 @@ package main type HtlcInterceptor interface { Start() error Stop() error + WaitStarted() LightningClient } diff --git a/lnd_interceptor.go b/lnd_interceptor.go index 2683f8b..b7481e7 100644 --- a/lnd_interceptor.go +++ b/lnd_interceptor.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "os" + "sync" "time" "github.com/lightningnetwork/lnd/lnrpc" @@ -17,17 +18,23 @@ import ( type LndHtlcInterceptor struct { client *LndClient stopRequested bool + initWg sync.WaitGroup } -func NewLndHtlcInterceptor(client *LndClient) *LndHtlcInterceptor { - return &LndHtlcInterceptor{ - client: client, +func NewLndHtlcInterceptor() *LndHtlcInterceptor { + i := &LndHtlcInterceptor{ + client: NewLndClient(), } + + i.initWg.Add(1) + + return i } func (i *LndHtlcInterceptor) Start() error { go forwardingHistorySynchronize(i.client) go channelsSynchronize(i.client) + i.initWg.Done() return i.intercept() } @@ -36,6 +43,11 @@ func (i *LndHtlcInterceptor) Stop() error { return nil } +func (i *LndHtlcInterceptor) WaitStarted() LightningClient { + i.initWg.Wait() + return i.client +} + func (i *LndHtlcInterceptor) intercept() error { for { if i.stopRequested { diff --git a/main.go b/main.go index 4a2160e..a181e51 100644 --- a/main.go +++ b/main.go @@ -37,30 +37,15 @@ func main() { var interceptor HtlcInterceptor if runCln { - c := NewClnClient("lightningrpc", ".") - client = c - interceptor = NewClnHtlcInterceptor(c) + interceptor = NewClnHtlcInterceptor() } if runLnd { - c := NewLndClient() - client = c - interceptor = NewLndHtlcInterceptor(c) + interceptor = NewLndHtlcInterceptor() } s := NewGrpcServer() - info, err := client.GetInfo() - if err != nil { - log.Fatalf("client.GetInfo() error: %v", err) - } - if nodeName == "" { - nodeName = info.Alias - } - if nodePubkey == "" { - nodePubkey = info.Pubkey - } - var wg sync.WaitGroup wg.Add(2) @@ -75,6 +60,18 @@ func main() { wg.Done() }() + client = interceptor.WaitStarted() + info, err := client.GetInfo() + if err != nil { + log.Fatalf("client.GetInfo() error: %v", err) + } + if nodeName == "" { + nodeName = info.Alias + } + if nodePubkey == "" { + nodePubkey = info.Pubkey + } + go func() { err := s.Start() if err == nil {