URI: 
       t_calc_routing_hints_for_invoice: incl max 15 chans to avoid qr overflow - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 06ea06f7d37a02d7d242d84eca89da3d85191c1b
   DIR parent 6f894b9f8885f03203fa4ddf50da795c0c5c6fd1
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Mon,  1 Mar 2021 21:55:41 +0100
       
       _calc_routing_hints_for_invoice: incl max 15 chans to avoid qr overflow
       
       Prioritise channels that are likely to be able to receive the payment.
       
       Diffstat:
         M electrum/lnworker.py                |      14 ++++++++------
       
       1 file changed, 8 insertions(+), 6 deletions(-)
       ---
   DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py
       t@@ -1797,15 +1797,17 @@ class LNWallet(LNWorker):
                """calculate routing hints (BOLT-11 'r' field)"""
                routing_hints = []
                channels = list(self.channels.values())
       -        random.shuffle(channels)  # not sure this has any benefit but let's not leak channel order
       +        # do minimal filtering of channels.
       +        # we include channels that cannot *right now* receive (e.g. peer disconnected or balance insufficient)
       +        channels = [chan for chan in channels
       +                    if (chan.is_open() and not chan.is_frozen_for_receiving())]
       +        # cap max channels to include to keep QR code reasonably scannable
       +        channels = sorted(channels, key=lambda chan: (not chan.is_active(), -chan.available_to_spend(REMOTE)))
       +        channels = channels[:15]
       +        random.shuffle(channels)  # let's not leak channel order
                scid_to_my_channels = {chan.short_channel_id: chan for chan in channels
                                       if chan.short_channel_id is not None}
       -        # note: currently we add *all* our channels; but this might be a privacy leak?
                for chan in channels:
       -            # do minimal filtering of channels.
       -            # we include channels that cannot *right now* receive (e.g. peer disconnected or balance insufficient)
       -            if not (chan.is_open() and not chan.is_frozen_for_receiving()):
       -                continue
                    chan_id = chan.short_channel_id
                    assert isinstance(chan_id, bytes), chan_id
                    channel_info = get_mychannel_info(chan_id, scid_to_my_channels)