From af27d5b95ec7a6b449e306c5c5f79c4a6397b734 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Wed, 6 Sep 2023 08:56:02 +0200 Subject: [PATCH] Payment bundles: use lists of payment keys. That way we don't need to special case trampoline outer onions --- electrum/lnworker.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/electrum/lnworker.py b/electrum/lnworker.py index b1b4837ae..851e8c197 100644 --- a/electrum/lnworker.py +++ b/electrum/lnworker.py @@ -2039,12 +2039,13 @@ class LNWallet(LNWorker): return payment_hash def bundle_payments(self, hash_list): - self.payment_bundles.append(hash_list) + payment_keys = [self._get_payment_key(x) for x in hash_list] + self.payment_bundles.append(payment_keys) - def get_payment_bundle(self, payment_hash): - for hash_list in self.payment_bundles: - if payment_hash in hash_list: - return hash_list + def get_payment_bundle(self, payment_key): + for key_list in self.payment_bundles: + if payment_key in key_list: + return key_list def save_preimage(self, payment_hash: bytes, preimage: bytes, *, write_to_disk: bool = True): assert sha256(preimage) == payment_hash @@ -2093,13 +2094,9 @@ class LNWallet(LNWorker): payment_key=payment_key, scid=short_channel_id, htlc=htlc, expected_msat=expected_msat) mpp_resolution = self.received_mpp_htlcs[payment_key].resolution if mpp_resolution == RecvMPPResolution.WAITING: - bundle = self.get_payment_bundle(payment_hash) + bundle = self.get_payment_bundle(payment_key) if bundle: - payment_keys = [self._get_payment_key(h) for h in bundle] - if payment_key not in payment_keys: - # outer trampoline onion secret differs from inner onion - # the latter, not the former, might be part of a bundle - payment_keys = [payment_key] + payment_keys = bundle else: payment_keys = [payment_key] first_timestamp = min([self.get_first_timestamp_of_mpp(pkey) for pkey in payment_keys])