tlnpeer.htlc_switch: (bugfix) don't fulfill htlc until add is irrevocable - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 2b0f156ce84a991f76f5b00d9d8d708122071623 DIR parent e8a2fa5596a496c172fe8a428651c04c51afd4f7 HTML Author: SomberNight <somber.night@protonmail.com> Date: Thu, 28 Jan 2021 20:03:30 +0100 lnpeer.htlc_switch: (bugfix) don't fulfill htlc until add is irrevocable This makes the test added in prev commit pass. Diffstat: M electrum/lnchannel.py | 1 + M electrum/lnpeer.py | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) --- DIR diff --git a/electrum/lnchannel.py b/electrum/lnchannel.py t@@ -858,6 +858,7 @@ class Channel(AbstractChannel): local_ctn = self.get_latest_ctn(LOCAL) remote_ctn = self.get_latest_ctn(REMOTE) if onion_packet: + # TODO neither local_ctn nor remote_ctn are used anymore... no point storing them. self.hm.log['unfulfilled_htlcs'][htlc.htlc_id] = local_ctn, remote_ctn, onion_packet.hex(), False self.logger.info("receive_htlc") DIR diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py t@@ -1666,10 +1666,7 @@ class Peer(Logger): done = set() unfulfilled = chan.hm.log.get('unfulfilled_htlcs', {}) for htlc_id, (local_ctn, remote_ctn, onion_packet_hex, forwarding_info) in unfulfilled.items(): - # FIXME this test is not sufficient: - if chan.get_oldest_unrevoked_ctn(LOCAL) <= local_ctn: - continue - if chan.get_oldest_unrevoked_ctn(REMOTE) <= remote_ctn: + if not chan.hm.is_add_htlc_irrevocably_committed_yet(htlc_proposer=REMOTE, htlc_id=htlc_id): continue chan.logger.info(f'found unfulfilled htlc: {htlc_id}') htlc = chan.hm.get_htlc_by_id(REMOTE, htlc_id)