URI: 
       ttrampoline: do not add node in trampoline hints if it already is the last trampoline of the route - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 83993768e5309c504ae6c419d40986d5e374b9d2
   DIR parent 5663e598637d5cf8aba6b2be8c2b3ccc609fd692
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Sat,  6 Mar 2021 00:26:55 +0100
       
       ttrampoline: do not add node in trampoline hints if it already is
       tthe last trampoline of the route
       
       Diffstat:
         M electrum/tests/test_lnpeer.py       |       2 +-
         M electrum/trampoline.py              |      17 ++++++++++++-----
       
       2 files changed, 13 insertions(+), 6 deletions(-)
       ---
   DIR diff --git a/electrum/tests/test_lnpeer.py b/electrum/tests/test_lnpeer.py
       t@@ -763,7 +763,7 @@ class TestPeer(ElectrumTestCase):
                graph.w_a.network.channel_db.stop()
                graph.w_a.network.channel_db = None
                # Note: first attempt will fail with insufficient trampoline fee
       -        self._test_multipart_payment(graph, attempts=2)
       +        self._test_multipart_payment(graph, attempts=3)
        
            @needs_test_with_all_chacha20_implementations
            def test_close(self):
   DIR diff --git a/electrum/trampoline.py b/electrum/trampoline.py
       t@@ -102,12 +102,11 @@ def create_trampoline_route(
                is_legacy = False
                if len(r_tags) > 0 and len(r_tags[0]) == 1:
                    pubkey, scid, feebase, feerate, cltv = r_tags[0][0]
       -            t_tag = pubkey, feebase, feerate, cltv
       +            t_tags = [pubkey, feebase, feerate, cltv]
                else:
       -            t_tag = None
       +            t_tags = None
            elif len(t_tags) > 0:
                is_legacy = False
       -        t_tag = t_tags[0]
            else:
                is_legacy = True
        
       t@@ -154,8 +153,14 @@ def create_trampoline_route(
                route[-1].invoice_features = invoice_features
                route[-1].outgoing_node_id = invoice_pubkey
            else:
       -        if t_tag:
       +        last_trampoline = route[-1].end_node
       +        for t_tag in t_tags:
                    pubkey, feebase, feerate, cltv = t_tag
       +            if pubkey == trampoline_node_id:
       +                break
       +        else:
       +            random.shuffle(t_tags)
       +            pubkey, feebase, feerate, cltv = t_tags[0]
                    if route[-1].node_id != pubkey:
                        route.append(
                            TrampolineEdge(
       t@@ -165,6 +170,7 @@ def create_trampoline_route(
                                fee_proportional_millionths=feerate,
                                cltv_expiry_delta=cltv,
                                node_features=trampoline_features))
       +
            # Final edge (not part of the route if payment is legacy, but eclair requires an encrypted blob)
            route.append(
                TrampolineEdge(
       t@@ -266,4 +272,5 @@ def create_trampoline_route_and_onion(
            bucket_cltv_delta += trampoline_route[0].cltv_expiry_delta
            # trampoline fee for this very trampoline
            trampoline_fee = trampoline_route[0].fee_for_edge(amount_with_fees)
       -    return trampoline_onion, trampoline_fee, amount_with_fees, bucket_cltv_delta
       +    amount_with_fees += trampoline_fee
       +    return trampoline_onion, amount_with_fees, bucket_cltv_delta