From 2929e74c78fea52af8a155c18cb903a75d817d2e Mon Sep 17 00:00:00 2001 From: tecnovert <tecnovert@tecnovert.net> Date: Tue, 7 Jan 2025 19:47:28 +0200 Subject: [PATCH] checkWalletSeed sets expected seed id if missing. --- basicswap/basicswap.py | 52 +++++++++++++++++++++++-------------- tests/basicswap/test_run.py | 1 + 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/basicswap/basicswap.py b/basicswap/basicswap.py index ab7cf48..5adb446 100644 --- a/basicswap/basicswap.py +++ b/basicswap/basicswap.py @@ -979,13 +979,11 @@ class BasicSwap(BaseApp): core_version = ci.getDaemonVersion() self.log.info("%s Core version %d", ci.coin_name(), core_version) self.coin_clients[c]["core_version"] = core_version - # thread_func = threadPollXMRChainState if c in (Coins.XMR, Coins.WOW) else threadPollChainState - if c == Coins.XMR: - thread_func = threadPollXMRChainState - elif c == Coins.WOW: - thread_func = threadPollWOWChainState - else: - thread_func = threadPollChainState + + thread_func = { + Coins.XMR: threadPollXMRChainState, + Coins.WOW: threadPollWOWChainState, + }.get(c, threadPollChainState) # default case t = threading.Thread(target=thread_func, args=(self, c)) self.threads.append(t) @@ -1290,6 +1288,20 @@ class BasicSwap(BaseApp): finally: self._read_zmq_queue = True + def storeSeedIDForCoin(self, root_key, coin_type, cursor=None) -> None: + ci = self.ci(coin_type) + db_key_coin_name = ci.coin_name().lower() + seed_id = ci.getSeedHash(root_key) + + key_str = "main_wallet_seedid_" + db_key_coin_name + self.setStringKV(key_str, seed_id.hex(), cursor) + + if coin_type == Coins.DCR: + # TODO: How to force getmasterpubkey to always return the new slip44 (42) key + key_str = "main_wallet_seedid_alt_" + db_key_coin_name + legacy_root_hash = ci.getSeedHash(root_key, 20) + self.setStringKV(key_str, legacy_root_hash.hex(), cursor) + def initialiseWallet(self, coin_type, raise_errors: bool = False) -> None: if coin_type == Coins.PART: return @@ -1308,7 +1320,6 @@ class BasicSwap(BaseApp): return root_key = self.getWalletKey(coin_type, 1) - root_hash = ci.getSeedHash(root_key) try: ci.initialiseWallet(root_key) except Exception as e: @@ -1320,18 +1331,9 @@ class BasicSwap(BaseApp): self.log.error(traceback.format_exc()) return - legacy_root_hash = None - if coin_type == Coins.DCR: - legacy_root_hash = ci.getSeedHash(root_key, 20) try: cursor = self.openDB() - key_str = "main_wallet_seedid_" + db_key_coin_name - self.setStringKV(key_str, root_hash.hex(), cursor) - - if coin_type == Coins.DCR: - # TODO: How to force getmasterpubkey to always return the new slip44 (42) key - key_str = "main_wallet_seedid_alt_" + db_key_coin_name - self.setStringKV(key_str, legacy_root_hash.hex(), cursor) + self.storeSeedIDForCoin(root_key, coin_type, cursor) # Clear any saved addresses self.clearStringKV("receive_addr_" + db_key_coin_name, cursor) @@ -2606,9 +2608,19 @@ class BasicSwap(BaseApp): expect_seedid = self.getStringKV("main_wallet_seedid_" + ci.coin_name().lower()) if expect_seedid is None: self.log.warning( - "Can't find expected wallet seed id for coin {}".format(ci.coin_name()) + "Can't find expected wallet seed id for coin {}.".format(ci.coin_name()) ) - return False + _, is_locked = self.getLockedState() + if is_locked is False: + self.log.warning( + "Setting seed id for coin {} from master key.".format(ci.coin_name()) + ) + root_key = self.getWalletKey(c, 1) + self.storeSeedIDForCoin(root_key, c) + else: + self.log.warning("Node is locked.") + return False + if c == Coins.BTC and len(ci.rpc("listwallets")) < 1: self.log.warning("Missing wallet for coin {}".format(ci.coin_name())) return False diff --git a/tests/basicswap/test_run.py b/tests/basicswap/test_run.py index 89aac3b..c09f2b5 100644 --- a/tests/basicswap/test_run.py +++ b/tests/basicswap/test_run.py @@ -179,6 +179,7 @@ class Test(BaseTest): == "8e54a313e6df8918df6d758fafdbf127a115175fdd2238d0e908dd8093c9ac3b" ) assert rv["seed_id"] == "3da5c0af91879e8ce97d9a843874601c08688078" + assert (rv["seed_id"] == rv["expected_seed_id"]) rv = read_json_api( 1800,