diff --git a/electrum/lnworker.py b/electrum/lnworker.py index da29f52fd..2c0611385 100644 --- a/electrum/lnworker.py +++ b/electrum/lnworker.py @@ -1274,25 +1274,32 @@ class LNWallet(LNWorker): raise PaymentFailure(failure_msg.code_name()) # trampoline if not self.channel_db: + def maybe_raise_trampoline_fee(htlc_log): + global trampoline_fee_level + if htlc_log.trampoline_fee_level == trampoline_fee_level: + trampoline_fee_level += 1 + self.logger.info(f'raising trampoline fee level {trampoline_fee_level}') + else: + self.logger.info(f'NOT raising trampoline fee level, already at {trampoline_fee_level}') # FIXME The trampoline nodes in the path are chosen randomly. # Some of the errors might depend on how we have chosen them. # Having more attempts is currently useful in part because of the randomness, # instead we should give feedback to create_routes_for_payment. - if code in (OnionFailureCode.TRAMPOLINE_FEE_INSUFFICIENT, - OnionFailureCode.TRAMPOLINE_EXPIRY_TOO_SOON): + if code in ( + OnionFailureCode.TRAMPOLINE_FEE_INSUFFICIENT, + OnionFailureCode.TRAMPOLINE_EXPIRY_TOO_SOON): # TODO: parse the node policy here (not returned by eclair yet) # TODO: erring node is always the first trampoline even if second # trampoline demands more fees, we can't influence this - if htlc_log.trampoline_fee_level == trampoline_fee_level: - trampoline_fee_level += 1 - self.logger.info(f'raising trampoline fee level {trampoline_fee_level}') - else: - self.logger.info(f'NOT raising trampoline fee level, already at {trampoline_fee_level}') + maybe_raise_trampoline_fee(htlc_log) continue elif use_two_trampolines: use_two_trampolines = False - elif code in (OnionFailureCode.UNKNOWN_NEXT_PEER, - OnionFailureCode.TEMPORARY_NODE_FAILURE): + elif code in ( + OnionFailureCode.UNKNOWN_NEXT_PEER, + OnionFailureCode.TEMPORARY_NODE_FAILURE, + OnionFailureCode.TEMPORARY_CHANNEL_FAILURE): + maybe_raise_trampoline_fee(htlc_log) continue else: raise PaymentFailure(failure_msg.code_name())