From f04fa54622df7c5a852758005e821820218fe724 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 11 Jul 2024 19:48:47 -0700 Subject: [PATCH] routing: skip amtInRange for custom HTLCs We might be trying to send an invoice amount that's greater than the size of the channel, but once you factor in the custom channel logic, an actual HTLC can be sent over the channel to pay that larger payment. As a result, we'll skip over this check if a have a custom HTLC. --- routing/unified_edges.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/routing/unified_edges.go b/routing/unified_edges.go index a0300eea4..6c44372e9 100644 --- a/routing/unified_edges.go +++ b/routing/unified_edges.go @@ -247,8 +247,13 @@ func (u *edgeUnifier) getEdgeLocal(netAmtReceived lnwire.MilliSatoshi, // local channel. amt := netAmtReceived + lnwire.MilliSatoshi(inboundFee) - // Check valid amount range for the channel. - if !edge.amtInRange(amt) { + // Check valid amount range for the channel. We skip this test + // for payments with custom HTLC data, as the amount sent on + // the BTC layer may differ from the amount that is actually + // forwarded in custom channels. + if bandwidthHints.firstHopCustomBlob().IsNone() && + !edge.amtInRange(amt) { + log.Debugf("Amount %v not in range for edge %v", netAmtReceived, edge.policy.ChannelID)