From fea71308358d9032d249439edacd12f5c9017431 Mon Sep 17 00:00:00 2001 From: tecnovert Date: Tue, 29 Jul 2025 21:53:24 +0200 Subject: [PATCH] zmq: Use persistent client keypair. --- basicswap/basicswap.py | 2 +- basicswap/bin/prepare.py | 9 ++++++--- basicswap/network/bsx_network.py | 14 ++++++++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/basicswap/basicswap.py b/basicswap/basicswap.py index 7c71c43..c2043d8 100644 --- a/basicswap/basicswap.py +++ b/basicswap/basicswap.py @@ -10556,7 +10556,7 @@ class BasicSwap(BaseApp, BSXNetwork, UIApp): ) def update(self) -> None: - if self._zmq_queue_enabled: + if self._zmq_queue_enabled and self.zmqSubscriber: try: if self._read_zmq_queue: topic, message, seq = self.zmqSubscriber.recv_multipart( diff --git a/basicswap/bin/prepare.py b/basicswap/bin/prepare.py index beb38d1..fd596f3 100755 --- a/basicswap/bin/prepare.py +++ b/basicswap/bin/prepare.py @@ -3220,8 +3220,9 @@ def main(): for c in with_coins: withchainclients[c] = chainclients[c] - zmq_public_key, zmq_secret_key = zmq.curve_keypair() - extra_opts["zmqsecret"] = base64.b64encode(zmq_secret_key).decode("utf-8") + zmq_server_pubkey, zmq_server_key = zmq.curve_keypair() + zmq_client_pubkey, zmq_client_key = zmq.curve_keypair() + extra_opts["zmqsecret"] = base64.b64encode(zmq_server_key).decode("utf-8") settings = { "debug": True, @@ -3238,7 +3239,9 @@ def main(): "check_watched_seconds": 60, "check_expired_seconds": 60, "wallet_update_timeout": 10, # Seconds to wait for wallet page update - "zmq_server_key": base64.b64encode(zmq_public_key).decode("utf-8"), + "zmq_client_key": base64.b64encode(zmq_client_key).decode("utf-8"), + "zmq_client_pubkey": base64.b64encode(zmq_client_pubkey).decode("utf-8"), + "zmq_server_pubkey": base64.b64encode(zmq_server_pubkey).decode("utf-8"), } wshost: str = extra_opts.get("wshost", htmlhost) diff --git a/basicswap/network/bsx_network.py b/basicswap/network/bsx_network.py index ea160df..abb1aa6 100644 --- a/basicswap/network/bsx_network.py +++ b/basicswap/network/bsx_network.py @@ -90,7 +90,7 @@ class BSXNetwork: self._poll_smsg = self.settings.get("poll_smsg", False) self.zmqContext = None self.zmqSubscriber = None - self.zmq_server_key = self.settings.get("zmq_server_key", None) + self.zmq_server_key = self.settings.get("zmq_server_pubkey", None) self.SMSG_SECONDS_IN_HOUR = ( 60 * 60 @@ -149,9 +149,15 @@ class BSXNetwork: self.zmqSubscriber = self.zmqContext.socket(zmq.SUB) if self.zmq_server_key is not None: zmq_server_key = base64.b64decode(self.zmq_server_key) - public_key, secret_key = zmq.curve_keypair() - self.zmqSubscriber.setsockopt(zmq.CURVE_PUBLICKEY, public_key) - self.zmqSubscriber.setsockopt(zmq.CURVE_SECRETKEY, secret_key) + zmq_client_key = base64.b64decode(self.settings["zmq_client_key"]) + zmq_client_pubkey = base64.b64decode( + self.settings["zmq_client_pubkey"] + ) + + self.zmqSubscriber.setsockopt( + zmq.CURVE_PUBLICKEY, zmq_client_pubkey + ) + self.zmqSubscriber.setsockopt(zmq.CURVE_SECRETKEY, zmq_client_key) self.zmqSubscriber.setsockopt(zmq.CURVE_SERVERKEY, zmq_server_key) self.zmqSubscriber.setsockopt_string(zmq.SUBSCRIBE, "smsg") self.zmqSubscriber.setsockopt_string(zmq.SUBSCRIBE, "hashwtx")