From dd41e87295f00fea0daf394cf3f3e0b91904a4cc Mon Sep 17 00:00:00 2001 From: f321x Date: Fri, 18 Jul 2025 09:53:35 +0200 Subject: [PATCH] fix: NostrTransport.update_relays() KeyError `NostrTransport.update_relays()` raises a `KeyError` when the offer of the configured swapserver (`config.SWAPSERVER_NPUB`) is not in `self._offers` even though `sm.pairs_updated` gets triggered. This happens because `NostrTransport.get_pairs()` called `sm.update_pairs()` before adding the received offer to `self._offers`. --- electrum/submarine_swaps.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/electrum/submarine_swaps.py b/electrum/submarine_swaps.py index e4f223642..c65f74734 100644 --- a/electrum/submarine_swaps.py +++ b/electrum/submarine_swaps.py @@ -1658,9 +1658,9 @@ class NostrTransport(SwapServerTransport): server_pubkey=pubkey, pow_bits=pow_bits, ) + self._offers[offer.server_npub] = offer if self.config.SWAPSERVER_NPUB == offer.server_npub: self.sm.update_pairs(pairs) - self._offers[offer.server_npub] = offer trigger_callback('swap_offers_changed', self.get_recent_offers()) # mirror event to other relays await self.taskgroup.spawn(self.rebroadcast_event(event, server_relays)) @@ -1673,7 +1673,13 @@ class NostrTransport(SwapServerTransport): while True: previous_relays = self._last_swapserver_relays await self.sm.pairs_updated.wait() - latest_known_relays = self._offers[self.config.SWAPSERVER_NPUB].relays + if (conf_swapserver_offer := self._offers.get(self.config.SWAPSERVER_NPUB)) is None: + self.logger.debug( + f"pairs updated but no pair for {self.config.SWAPSERVER_NPUB=} available? {self._offers=}", + stack_info=True, + ) + continue + latest_known_relays = conf_swapserver_offer.relays if latest_known_relays != previous_relays: self.logger.debug(f"swapserver relays changed, updating relay list.") # store the latest known relays to a file