pay_to_node: raise failure_msg if we received a trampoline error from the next onion.
that way, the error is sent back to the payer
This commit is contained in:
@@ -1523,8 +1523,6 @@ class LNWallet(LNWorker):
|
|||||||
self.network.path_finder.update_inflight_htlcs(htlc_log.route, add_htlcs=False)
|
self.network.path_finder.update_inflight_htlcs(htlc_log.route, add_htlcs=False)
|
||||||
return
|
return
|
||||||
# htlc failed
|
# htlc failed
|
||||||
if (attempts is not None and len(log) >= attempts) or (attempts is None and time.time() - paysession.start_time > self.PAYMENT_TIMEOUT):
|
|
||||||
raise PaymentFailure('Giving up after %d attempts'%len(log))
|
|
||||||
# if we get a tmp channel failure, it might work to split the amount and try more routes
|
# if we get a tmp channel failure, it might work to split the amount and try more routes
|
||||||
# if we get a channel update, we might retry the same route and amount
|
# if we get a channel update, we might retry the same route and amount
|
||||||
route = htlc_log.route
|
route = htlc_log.route
|
||||||
@@ -1537,6 +1535,11 @@ class LNWallet(LNWorker):
|
|||||||
self.logger.info(f"error reported by {erring_node_id.hex()}")
|
self.logger.info(f"error reported by {erring_node_id.hex()}")
|
||||||
if code == OnionFailureCode.MPP_TIMEOUT:
|
if code == OnionFailureCode.MPP_TIMEOUT:
|
||||||
raise PaymentFailure(failure_msg.code_name())
|
raise PaymentFailure(failure_msg.code_name())
|
||||||
|
# errors returned by the next trampoline.
|
||||||
|
if fwd_trampoline_onion and code in [
|
||||||
|
OnionFailureCode.TRAMPOLINE_FEE_INSUFFICIENT,
|
||||||
|
OnionFailureCode.TRAMPOLINE_EXPIRY_TOO_SOON]:
|
||||||
|
raise failure_msg
|
||||||
# trampoline
|
# trampoline
|
||||||
if self.uses_trampoline():
|
if self.uses_trampoline():
|
||||||
paysession.handle_failed_trampoline_htlc(
|
paysession.handle_failed_trampoline_htlc(
|
||||||
@@ -1544,6 +1547,9 @@ class LNWallet(LNWorker):
|
|||||||
else:
|
else:
|
||||||
self.handle_error_code_from_failed_htlc(
|
self.handle_error_code_from_failed_htlc(
|
||||||
route=route, sender_idx=sender_idx, failure_msg=failure_msg, amount=htlc_log.amount_msat)
|
route=route, sender_idx=sender_idx, failure_msg=failure_msg, amount=htlc_log.amount_msat)
|
||||||
|
# max attempts or timeout
|
||||||
|
if (attempts is not None and len(log) >= attempts) or (attempts is None and time.time() - paysession.start_time > self.PAYMENT_TIMEOUT):
|
||||||
|
raise PaymentFailure('Giving up after %d attempts'%len(log))
|
||||||
finally:
|
finally:
|
||||||
paysession.is_active = False
|
paysession.is_active = False
|
||||||
if paysession.can_be_deleted():
|
if paysession.can_be_deleted():
|
||||||
|
|||||||
Reference in New Issue
Block a user