From e80310eb3284dcbf29fa82f53f8c2a0e490b9b18 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 31 Aug 2023 05:55:28 +0200 Subject: [PATCH] lnpeer: trampoline forwarding failures may be indexed by outer or inner onion payment secret --- electrum/lnpeer.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py index c8dbd8bfd..83fa38e6d 100644 --- a/electrum/lnpeer.py +++ b/electrum/lnpeer.py @@ -2445,13 +2445,16 @@ class Peer(Logger): return None, fw_info, None else: # trampoline- HTLC we are supposed to forward, and have already forwarded - payment_key = bytes.fromhex(forwarding_info) + payment_key_outer_onion = bytes.fromhex(forwarding_info) preimage = self.lnworker.get_preimage(payment_hash) - # get (and not pop) failure because the incoming payment might be multi-part - error_reason = self.lnworker.final_onion_forwarding_failures.get(payment_key) - if error_reason: - self.logger.info(f'trampoline forwarding failure: {error_reason.code_name()}') - raise error_reason + payment_secret_inner_onion = self.lnworker.get_payment_secret(payment_hash) + payment_key_inner_onion = payment_hash + payment_secret_inner_onion + for payment_key in [payment_key_inner_onion, payment_key_outer_onion]: + # get (and not pop) failure because the incoming payment might be multi-part + error_reason = self.lnworker.final_onion_forwarding_failures.get(payment_key) + if error_reason: + self.logger.info(f'trampoline forwarding failure: {error_reason.code_name()}') + raise error_reason elif not forwarding_info: # HTLC we are supposed to forward, but haven't forwarded yet