mirror of
https://github.com/aljazceru/lspd.git
synced 2026-01-16 12:34:19 +01:00
create client in interceptor startup
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -3,4 +3,5 @@ package main
|
||||
type HtlcInterceptor interface {
|
||||
Start() error
|
||||
Stop() error
|
||||
WaitStarted() LightningClient
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
31
main.go
31
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 {
|
||||
|
||||
Reference in New Issue
Block a user