From f1900e493d53b3f40499b8c8b4e98525715aa300 Mon Sep 17 00:00:00 2001 From: f321x Date: Fri, 11 Apr 2025 12:42:54 +0200 Subject: [PATCH] Fix assertion error in ln payments when using same seed in multiple wallets. Make path calculation check if channel is not in our sending channels but still uses our nodeID as starting node of the path. I noticed an assertion error when trying to pay an invoice from a seed i have opened channels with in different wallet instances (same seed, different wallet). Because the channel seemed suitable for sending the payment path finding included the channel for sending in the first position of the route but then in pay_to_route the channel for route[0] could not be found as it is not included in our channel list, causing the assert and payment to fail. --- electrum/lnrouter.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/electrum/lnrouter.py b/electrum/lnrouter.py index 94dbe341a..21021a9f9 100644 --- a/electrum/lnrouter.py +++ b/electrum/lnrouter.py @@ -526,7 +526,7 @@ class LNPathFinder(Logger): def get_shortest_path_hops( self, *, - nodeA: bytes, + nodeA: bytes, # nodeA is expected to be our node id if channels are passed in my_sending_channels nodeB: bytes, invoice_amount_msat: int, my_sending_channels: Dict[ShortChannelID, 'Channel'] = None, @@ -589,10 +589,11 @@ class LNPathFinder(Logger): if not node_filter(edge_startnode, node_info): continue is_mine = edge_channel_id in my_sending_channels - if is_mine: - if edge_startnode == nodeA: # payment outgoing, on our channel - if not my_sending_channels[edge_channel_id].can_pay(amount_msat, check_frozen=True): - continue + if edge_startnode == nodeA and my_sending_channels: # payment outgoing, on our channel + if edge_channel_id not in my_sending_channels: + continue + if not my_sending_channels[edge_channel_id].can_pay(amount_msat, check_frozen=True): + continue edge_cost, fee_for_edge_msat = self._edge_cost( short_channel_id=edge_channel_id, start_node=edge_startnode,