tMerge pull request #7065 from SomberNight/20210224_mpp_recv_amt_sum - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 61e7f7e75ec491a7d05d15fe9aa0ff6bf736862f DIR parent 5dc7b5bffe0925737499ab618746f672f0902e53 HTML Author: ThomasV <thomasv@electrum.org> Date: Thu, 25 Feb 2021 10:27:55 +0100 Merge pull request #7065 from SomberNight/20210224_mpp_recv_amt_sum lnpeer: MPP recv: only fulfill htlc if amt sum exact-matches total_msat Diffstat: M electrum/lnchannel.py | 4 +++- M electrum/lnpeer.py | 9 +++------ M electrum/lnworker.py | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) --- DIR diff --git a/electrum/lnchannel.py b/electrum/lnchannel.py t@@ -1051,7 +1051,9 @@ class Channel(AbstractChannel): if is_sent: self.lnworker.htlc_fulfilled(self, payment_hash, htlc.htlc_id, htlc.amount_msat) else: - self.lnworker.htlc_received(self, payment_hash) + # FIXME + #self.lnworker.htlc_received(self, payment_hash) + pass def balance(self, whose: HTLCOwner, *, ctx_owner=HTLCOwner.LOCAL, ctn: int = None) -> int: assert type(whose) is HTLCOwner DIR diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py t@@ -1566,13 +1566,10 @@ class Peer(Logger): else: if payment_secret_from_onion != derive_payment_secret_from_payment_preimage(preimage): raise OnionRoutingFailure(code=OnionFailureCode.INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS, data=b'') - expected_received_msat = info.amount_msat - if expected_received_msat is None: - return preimage - - if not (expected_received_msat <= total_msat <= 2 * expected_received_msat): + invoice_msat = info.amount_msat + if not (invoice_msat is None or invoice_msat <= total_msat <= 2 * invoice_msat): raise OnionRoutingFailure(code=OnionFailureCode.INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS, data=b'') - accepted, expired = self.lnworker.htlc_received(chan.short_channel_id, htlc, expected_received_msat) + accepted, expired = self.lnworker.htlc_received(chan.short_channel_id, htlc, total_msat) if accepted: return preimage elif expired: DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py t@@ -1692,7 +1692,7 @@ class LNWallet(LNWorker): total = sum([htlc.amount_msat for scid, htlc in s]) first_timestamp = min([htlc.timestamp for scid, htlc in s]) expired = time.time() - first_timestamp > MPP_EXPIRY - if total >= expected_msat and not expired: + if total == expected_msat and not expired: # status must be persisted self.set_payment_status(htlc.payment_hash, PR_PAID) util.trigger_callback('request_status', self.wallet, htlc.payment_hash.hex(), PR_PAID)