From 008d265cdbda2342d6121ad50b30dddd05f494d1 Mon Sep 17 00:00:00 2001 From: ffranr Date: Tue, 23 Apr 2024 14:48:42 +0100 Subject: [PATCH] invoicesrpc: add HTLC modifier to invoices RPC server This commit integrates the HTLC modifier service into the invoices RPC server. --- lnd.go | 1 + lnrpc/invoicesrpc/config_active.go | 5 +++++ rpcserver.go | 5 +++-- subrpcserver_config.go | 6 +++++- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lnd.go b/lnd.go index da7747e91..b69383a89 100644 --- a/lnd.go +++ b/lnd.go @@ -638,6 +638,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg, err = rpcServer.addDeps( server, interceptorChain.MacaroonService(), cfg.SubRPCServers, atplManager, server.invoices, tower, multiAcceptor, + server.invoiceHtlcModifier, ) if err != nil { return mkErr("unable to add deps to RPC server: %v", err) diff --git a/lnrpc/invoicesrpc/config_active.go b/lnrpc/invoicesrpc/config_active.go index a5b29c32a..b781be875 100644 --- a/lnrpc/invoicesrpc/config_active.go +++ b/lnrpc/invoicesrpc/config_active.go @@ -30,6 +30,11 @@ type Config struct { // created by the daemon. InvoiceRegistry *invoices.InvoiceRegistry + // HtlcModifier is a service which intercepts invoice HTLCs during the + // settlement phase, enabling a subscribed client to modify certain + // aspects of those HTLCs. + HtlcModifier invoices.HtlcModifier + // IsChannelActive is used to generate valid hop hints. IsChannelActive func(chanID lnwire.ChannelID) bool diff --git a/rpcserver.go b/rpcserver.go index 3b8a9ea00..9417d87f6 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -684,7 +684,8 @@ func newRPCServer(cfg *Config, interceptorChain *rpcperms.InterceptorChain, func (r *rpcServer) addDeps(s *server, macService *macaroons.Service, subServerCgs *subRPCServerConfigs, atpl *autopilot.Manager, invoiceRegistry *invoices.InvoiceRegistry, tower *watchtower.Standalone, - chanPredicate chanacceptor.MultiplexAcceptor) error { + chanPredicate chanacceptor.MultiplexAcceptor, + invoiceHtlcModifier *invoices.HtlcModificationInterceptor) error { // Set up router rpc backend. selfNode, err := s.graphDB.SourceNode() @@ -787,7 +788,7 @@ func (r *rpcServer) addDeps(s *server, macService *macaroons.Service, s.sweeper, tower, s.towerClientMgr, r.cfg.net.ResolveTCPAddr, genInvoiceFeatures, genAmpInvoiceFeatures, s.getNodeAnnouncement, s.updateAndBrodcastSelfNode, parseAddr, - rpcsLog, s.aliasMgr, + rpcsLog, s.aliasMgr, invoiceHtlcModifier, ) if err != nil { return err diff --git a/subrpcserver_config.go b/subrpcserver_config.go index d72a492f1..52c170c34 100644 --- a/subrpcserver_config.go +++ b/subrpcserver_config.go @@ -122,7 +122,8 @@ func (s *subRPCServerConfigs) PopulateDependencies(cfg *Config, updateNodeAnnouncement func(features *lnwire.RawFeatureVector, modifiers ...netann.NodeAnnModifier) error, parseAddr func(addr string) (net.Addr, error), - rpcLogger btclog.Logger, aliasMgr *aliasmgr.Manager) error { + rpcLogger btclog.Logger, aliasMgr *aliasmgr.Manager, + invoiceHtlcModifier *invoices.HtlcModificationInterceptor) error { // First, we'll use reflect to obtain a version of the config struct // that allows us to programmatically inspect its fields. @@ -241,6 +242,9 @@ func (s *subRPCServerConfigs) PopulateDependencies(cfg *Config, subCfgValue.FieldByName("InvoiceRegistry").Set( reflect.ValueOf(invoiceRegistry), ) + subCfgValue.FieldByName("HtlcModifier").Set( + reflect.ValueOf(invoiceHtlcModifier), + ) subCfgValue.FieldByName("IsChannelActive").Set( reflect.ValueOf(htlcSwitch.HasActiveLink), )