diff --git a/electrum/lnworker.py b/electrum/lnworker.py index d58a15fab..fb088b62a 100644 --- a/electrum/lnworker.py +++ b/electrum/lnworker.py @@ -1051,7 +1051,7 @@ class LNWallet(LNWorker): trampoline_fee_level = 0 # only used for trampoline payments use_two_trampolines = True # only used for pay to legacy - amount_inflight = 0 # what we sent in htlcs + amount_inflight = 0 # what we sent in htlcs (that receiver gets, without fees) while True: amount_to_send = amount_to_pay - amount_inflight if amount_to_send > 0: @@ -1075,6 +1075,9 @@ class LNWallet(LNWorker): fwd_trampoline_onion=fwd_trampoline_onion)) # 2. send htlcs for route, amount_msat, total_msat, amount_receiver_msat, cltv_delta, bucket_payment_secret, trampoline_onion in routes: + amount_inflight += amount_receiver_msat + if amount_inflight > amount_to_pay: # safety belts + raise Exception(f"amount_inflight={amount_inflight} > amount_to_pay={amount_to_pay}") await self.pay_to_route( route=route, amount_msat=amount_msat, @@ -1084,14 +1087,13 @@ class LNWallet(LNWorker): payment_secret=bucket_payment_secret, min_cltv_expiry=cltv_delta, trampoline_onion=trampoline_onion) - amount_inflight += amount_receiver_msat - assert amount_inflight <= amount_to_pay, f"amount_inflight {amount_inflight} > amount_to_pay {amount_to_pay}" util.trigger_callback('invoice_status', self.wallet, payment_hash.hex()) # 3. await a queue self.logger.info(f"amount inflight {amount_inflight}") htlc_log = await self.sent_htlcs[payment_hash].get() amount_inflight -= htlc_log.amount_msat - assert amount_inflight >= 0, f"amount_inflight={amount_inflight} < 0" + if amount_inflight < 0: + raise Exception(f"amount_inflight={amount_inflight} < 0") log.append(htlc_log) if htlc_log.success: return