diff --git a/lnrpc/routerrpc/router_backend.go b/lnrpc/routerrpc/router_backend.go index 9a10f062..23cd32e0 100644 --- a/lnrpc/routerrpc/router_backend.go +++ b/lnrpc/routerrpc/router_backend.go @@ -46,7 +46,7 @@ type RouterBackend struct { amt lnwire.MilliSatoshi, restrictions *routing.RestrictParams, destCustomRecords record.CustomSet, routeHints map[route.Vertex][]*channeldb.ChannelEdgePolicy, - finalExpiry ...uint16) (*route.Route, error) + finalExpiry uint16) (*route.Route, error) MissionControl MissionControl @@ -63,6 +63,10 @@ type RouterBackend struct { // MaxTotalTimelock is the maximum total time lock a route is allowed to // have. MaxTotalTimelock uint32 + + // DefaultFinalCltvDelta is the default value used as final cltv delta + // when an RPC caller doesn't specify a value. + DefaultFinalCltvDelta uint16 } // MissionControl defines the mission control dependencies of routerrpc. @@ -194,7 +198,7 @@ func (r *RouterBackend) QueryRoutes(ctx context.Context, // We need to subtract the final delta before passing it into path // finding. The optimal path is independent of the final cltv delta and // the path finding algorithm is unaware of this value. - finalCLTVDelta := uint16(zpay32.DefaultFinalCLTVDelta) + finalCLTVDelta := r.DefaultFinalCltvDelta if in.FinalCltvDelta != 0 { finalCLTVDelta = uint16(in.FinalCltvDelta) } @@ -657,7 +661,7 @@ func (r *RouterBackend) extractIntentFromSendRequest( payIntent.FinalCLTVDelta = uint16(rpcPayReq.FinalCltvDelta) } else { - payIntent.FinalCLTVDelta = zpay32.DefaultFinalCLTVDelta + payIntent.FinalCLTVDelta = r.DefaultFinalCltvDelta } // Amount. diff --git a/lnrpc/routerrpc/router_backend_test.go b/lnrpc/routerrpc/router_backend_test.go index 7e0e0df1..33a0ccfb 100644 --- a/lnrpc/routerrpc/router_backend_test.go +++ b/lnrpc/routerrpc/router_backend_test.go @@ -121,7 +121,7 @@ func testQueryRoutes(t *testing.T, useMissionControl bool, useMsat bool) { amt lnwire.MilliSatoshi, restrictions *routing.RestrictParams, _ record.CustomSet, routeHints map[route.Vertex][]*channeldb.ChannelEdgePolicy, - finalExpiry ...uint16) (*route.Route, error) { + finalExpiry uint16) (*route.Route, error) { if int64(amt) != amtSat*1000 { t.Fatal("unexpected amount") diff --git a/lnrpc/routerrpc/router_server.go b/lnrpc/routerrpc/router_server.go index 251a5e87..0a42e9fc 100644 --- a/lnrpc/routerrpc/router_server.go +++ b/lnrpc/routerrpc/router_server.go @@ -260,7 +260,7 @@ func (s *Server) EstimateRouteFee(ctx context.Context, &routing.RestrictParams{ FeeLimit: feeLimit, CltvLimit: s.cfg.RouterBackend.MaxTotalTimelock, - }, nil, nil, + }, nil, nil, s.cfg.RouterBackend.DefaultFinalCltvDelta, ) if err != nil { return nil, err diff --git a/routing/pathfind_test.go b/routing/pathfind_test.go index 75812b83..68662119 100644 --- a/routing/pathfind_test.go +++ b/routing/pathfind_test.go @@ -2110,6 +2110,7 @@ func TestPathFindSpecExample(t *testing.T) { const amt lnwire.MilliSatoshi = 4999999 route, err := ctx.router.FindRoute( bobNode.PubKeyBytes, carol, amt, noRestrictions, nil, nil, + zpay32.DefaultFinalCLTVDelta, ) if err != nil { t.Fatalf("unable to find route: %v", err) @@ -2165,6 +2166,7 @@ func TestPathFindSpecExample(t *testing.T) { // We'll now request a route from A -> B -> C. route, err = ctx.router.FindRoute( source.PubKeyBytes, carol, amt, noRestrictions, nil, nil, + zpay32.DefaultFinalCLTVDelta, ) if err != nil { t.Fatalf("unable to find routes: %v", err) diff --git a/routing/router.go b/routing/router.go index 52413c9d..463dfaca 100644 --- a/routing/router.go +++ b/routing/router.go @@ -1403,14 +1403,7 @@ func (r *ChannelRouter) FindRoute(source, target route.Vertex, amt lnwire.MilliSatoshi, restrictions *RestrictParams, destCustomRecords record.CustomSet, routeHints map[route.Vertex][]*channeldb.ChannelEdgePolicy, - finalExpiry ...uint16) (*route.Route, error) { - - var finalCLTVDelta uint16 - if len(finalExpiry) == 0 { - finalCLTVDelta = zpay32.DefaultFinalCLTVDelta - } else { - finalCLTVDelta = finalExpiry[0] - } + finalExpiry uint16) (*route.Route, error) { log.Debugf("Searching for path to %v, sending %v", target, amt) @@ -1441,7 +1434,7 @@ func (r *ChannelRouter) FindRoute(source, target route.Vertex, // Now that we know the destination is reachable within the graph, we'll // execute our path finding algorithm. - finalHtlcExpiry := currentHeight + int32(finalCLTVDelta) + finalHtlcExpiry := currentHeight + int32(finalExpiry) path, err := findPath( &graphParams{ @@ -1461,7 +1454,7 @@ func (r *ChannelRouter) FindRoute(source, target route.Vertex, source, path, uint32(currentHeight), finalHopParams{ amt: amt, - cltvDelta: finalCLTVDelta, + cltvDelta: finalExpiry, records: destCustomRecords, }, ) diff --git a/rpcserver.go b/rpcserver.go index 2f2142d2..11227fe6 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -562,11 +562,12 @@ func newRPCServer(s *server, macService *macaroons.Service, return info.NodeKey1Bytes, info.NodeKey2Bytes, nil }, - FindRoute: s.chanRouter.FindRoute, - MissionControl: s.missionControl, - ActiveNetParams: activeNetParams.Params, - Tower: s.controlTower, - MaxTotalTimelock: cfg.MaxOutgoingCltvExpiry, + FindRoute: s.chanRouter.FindRoute, + MissionControl: s.missionControl, + ActiveNetParams: activeNetParams.Params, + Tower: s.controlTower, + MaxTotalTimelock: cfg.MaxOutgoingCltvExpiry, + DefaultFinalCltvDelta: uint16(cfg.Bitcoin.TimeLockDelta), } genInvoiceFeatures := func() *lnwire.FeatureVector {