diff --git a/interceptor/intercept_handler.go b/interceptor/intercept_handler.go index d9ef467..3b20542 100644 --- a/interceptor/intercept_handler.go +++ b/interceptor/intercept_handler.go @@ -24,7 +24,7 @@ type Interceptor struct { client lightning.Client config *config.NodeConfig store InterceptStore - openingStore shared.OpeningStore + openingService shared.OpeningService feeEstimator chain.FeeEstimator feeStrategy chain.FeeStrategy payHashGroup singleflight.Group @@ -35,7 +35,7 @@ func NewInterceptHandler( client lightning.Client, config *config.NodeConfig, store InterceptStore, - openingStore shared.OpeningStore, + openingService shared.OpeningService, feeEstimator chain.FeeEstimator, feeStrategy chain.FeeStrategy, notificationService *notifications.NotificationService, @@ -44,7 +44,7 @@ func NewInterceptHandler( client: client, config: config, store: store, - openingStore: openingStore, + openingService: openingService, feeEstimator: feeEstimator, feeStrategy: feeStrategy, notificationService: notificationService, @@ -190,7 +190,7 @@ func (i *Interceptor) Intercept(req shared.InterceptRequest) shared.InterceptRes // Make sure the opening_fee_params are not expired. // If they are expired, but the current chain fee is fine, open channel anyway. if time.Now().UTC().After(validUntil) { - if !i.isCurrentChainFeeCheaper(token, params) { + if !i.openingService.IsCurrentChainFeeCheaper(token, params) { log.Printf("Intercepted expired payment registration. Failing payment. payment hash: %x, valid until: %s", paymentHash, params.ValidUntil) return shared.InterceptResult{ Action: shared.INTERCEPT_FAIL_HTLC_WITH_CODE, @@ -340,22 +340,6 @@ func (i *Interceptor) notify(reqPaymentHashStr string, nextHop []byte, isRegiste return nil } -func (i *Interceptor) isCurrentChainFeeCheaper(token string, params *shared.OpeningFeeParams) bool { - settings, err := i.openingStore.GetFeeParamsSettings(token) - if err != nil { - log.Printf("Failed to get fee params settings: %v", err) - return false - } - - for _, setting := range settings { - if setting.Params.MinFeeMsat <= params.MinFeeMsat { - return true - } - } - - return false -} - func (i *Interceptor) openChannel(paymentHash, destination []byte, incomingAmountMsat int64, tag *string) (*wire.OutPoint, error) { capacity := incomingAmountMsat/1000 + i.config.AdditionalChannelCapacity if capacity == i.config.PublicChannelAmount { diff --git a/lsps2/mocks.go b/lsps2/mocks.go index 05c039d..acdac21 100644 --- a/lsps2/mocks.go +++ b/lsps2/mocks.go @@ -29,9 +29,10 @@ func (m *mockNodesService) GetNodes() []*shared.Node { } type mockOpeningService struct { - menu []*shared.OpeningFeeParams - err error - invalid bool + menu []*shared.OpeningFeeParams + err error + invalid bool + isCurrentChainFeeCheaper bool } func (m *mockOpeningService) GetFeeParamsMenu( @@ -48,6 +49,13 @@ func (m *mockOpeningService) ValidateOpeningFeeParams( return !m.invalid } +func (m *mockOpeningService) IsCurrentChainFeeCheaper( + token string, + params *shared.OpeningFeeParams, +) bool { + return m.isCurrentChainFeeCheaper +} + type mockLsps2Store struct { err error req *RegisterBuy diff --git a/main.go b/main.go index d846751..aa35028 100644 --- a/main.go +++ b/main.go @@ -110,7 +110,7 @@ func main() { client.StartListeners() fwsync := lnd.NewForwardingHistorySync(client, interceptStore, forwardingStore) - interceptor := interceptor.NewInterceptHandler(client, node.NodeConfig, interceptStore, openingStore, feeEstimator, feeStrategy, notificationService) + interceptor := interceptor.NewInterceptHandler(client, node.NodeConfig, interceptStore, openingService, feeEstimator, feeStrategy, notificationService) htlcInterceptor, err = lnd.NewLndHtlcInterceptor(node.NodeConfig, client, fwsync, interceptor) if err != nil { log.Fatalf("failed to initialize LND interceptor: %v", err) @@ -123,7 +123,7 @@ func main() { log.Fatalf("failed to initialize CLN client: %v", err) } - interceptor := interceptor.NewInterceptHandler(client, node.NodeConfig, interceptStore, openingStore, feeEstimator, feeStrategy, notificationService) + interceptor := interceptor.NewInterceptHandler(client, node.NodeConfig, interceptStore, openingService, feeEstimator, feeStrategy, notificationService) if err != nil { log.Fatalf("failed to initialize CLN interceptor: %v", err) } diff --git a/shared/opening_service.go b/shared/opening_service.go index 0cc942b..26ed601 100644 --- a/shared/opening_service.go +++ b/shared/opening_service.go @@ -17,6 +17,7 @@ import ( type OpeningService interface { GetFeeParamsMenu(token string, privateKey *btcec.PrivateKey) ([]*OpeningFeeParams, error) ValidateOpeningFeeParams(params *OpeningFeeParams, publicKey *btcec.PublicKey) bool + IsCurrentChainFeeCheaper(token string, params *OpeningFeeParams) bool } type openingService struct { @@ -100,6 +101,22 @@ func (s *openingService) ValidateOpeningFeeParams(params *OpeningFeeParams, publ return true } +func (s *openingService) IsCurrentChainFeeCheaper(token string, params *OpeningFeeParams) bool { + settings, err := s.store.GetFeeParamsSettings(token) + if err != nil { + log.Printf("Failed to get fee params settings: %v", err) + return false + } + + for _, setting := range settings { + if setting.Params.MinFeeMsat <= params.MinFeeMsat { + return true + } + } + + return false +} + func createPromise(lspPrivateKey *btcec.PrivateKey, params *OpeningFeeParams) (*string, error) { hash, err := paramsHash(params) if err != nil {