diff --git a/basicswap/interface/btc.py b/basicswap/interface/btc.py index db88b87..44cb8f6 100644 --- a/basicswap/interface/btc.py +++ b/basicswap/interface/btc.py @@ -394,29 +394,36 @@ class BTCInterface(Secp256k1Interface): except Exception as e: self._log.debug(f'Error loading wallet "{self._rpc_wallet}": {e}.') if "does not exist" in str(e) or "Path does not exist" in str(e): - self._log.info( - f'Creating wallet "{self._rpc_wallet}" for {self.coin_name()}.' - ) try: - self.rpc( - "createwallet", - [ - self._rpc_wallet, - False, - True, - "", - False, - self._use_descriptors, - ], + wallet_dirs = self.rpc("listwalletdir") + existing = [w["name"] for w in wallet_dirs.get("wallets", [])] + except Exception: + existing = [] + if len(existing) == 0: + self._log.info( + f'Creating wallet "{self._rpc_wallet}" for {self.coin_name()}.' ) - wallets = self.rpc("listwallets") - if self.getWalletSeedID() == "Not found": - self._log.info( - f"Initializing HD seed for {self.coin_name()}." + try: + # wallet_name, disable_private_keys, blank, passphrase, avoid_reuse, descriptors + self.rpc( + "createwallet", + [ + self._rpc_wallet, + False, + True, + "", + False, + self._use_descriptors, + ], ) - self._sc.initialiseWallet(self.coin_type()) - except Exception as create_e: - self._log.error(f"Error creating wallet: {create_e}") + wallets = self.rpc("listwallets") + if self.getWalletSeedID() == "Not found": + self._log.info( + f"Initializing HD seed for {self.coin_name()}." + ) + self._sc.initialiseWallet(self.coin_type()) + except Exception as create_e: + self._log.error(f"Error creating wallet: {create_e}") # Wallet name is "" for some LTC and PART installs on older cores if self._rpc_wallet not in wallets and len(wallets) > 0: @@ -3842,6 +3849,7 @@ class BTCInterface(Secp256k1Interface): def createWallet(self, wallet_name: str, password: str = "") -> None: if self._connection_type == "electrum": return + # wallet_name, disable_private_keys, blank, passphrase, avoid_reuse, descriptors self.rpc( "createwallet", [wallet_name, False, True, password, False, self._use_descriptors], @@ -4092,21 +4100,35 @@ class BTCInterface(Secp256k1Interface): # Required when encrypting an existing btc/ltc wallet, or switching from electrum to rpc mode. Workaround is to delete the btc/ltc wallet and recreate. wallets = self.rpc("listwallets") if self._rpc_wallet not in wallets: - self._log.info( - f'Creating wallet "{self._rpc_wallet}" for {self.coin_name()}.' - ) - # wallet_name, disable_private_keys, blank, passphrase, avoid_reuse, descriptors - self.rpc( - "createwallet", - [ - self._rpc_wallet, - False, - True, - password, - False, - self._use_descriptors, - ], - ) + try: + self.rpc("loadwallet", [self._rpc_wallet]) + except Exception as e: + if "does not exist" in str(e) or "Path does not exist" in str(e): + try: + wallet_dirs = self.rpc("listwalletdir") + existing = [ + w["name"] for w in wallet_dirs.get("wallets", []) + ] + except Exception: + existing = [] + if len(existing) == 0: + self._log.info( + f'Creating wallet "{self._rpc_wallet}" for {self.coin_name()}.' + ) + # wallet_name, disable_private_keys, blank, passphrase, avoid_reuse, descriptors + self.rpc( + "createwallet", + [ + self._rpc_wallet, + False, + True, + password, + False, + self._use_descriptors, + ], + ) + else: + raise try: seed_id = self.getWalletSeedID() diff --git a/basicswap/interface/ltc.py b/basicswap/interface/ltc.py index 897f69b..192ecba 100644 --- a/basicswap/interface/ltc.py +++ b/basicswap/interface/ltc.py @@ -50,29 +50,36 @@ class LTCInterface(BTCInterface): except Exception as e: self._log.debug(f'Error loading wallet "{self._rpc_wallet}": {e}.') if "does not exist" in str(e) or "Path does not exist" in str(e): - self._log.info( - f'Creating wallet "{self._rpc_wallet}" for {self.coin_name()}.' - ) try: - self.rpc( - "createwallet", - [ - self._rpc_wallet, - False, - True, - "", - False, - self._use_descriptors, - ], + wallet_dirs = self.rpc("listwalletdir") + existing = [w["name"] for w in wallet_dirs.get("wallets", [])] + except Exception: + existing = [] + if len(existing) == 0: + self._log.info( + f'Creating wallet "{self._rpc_wallet}" for {self.coin_name()}.' ) - wallets = self.rpc("listwallets") - if self.getWalletSeedID() == "Not found": - self._log.info( - f"Initializing HD seed for {self.coin_name()}." + try: + # wallet_name, disable_private_keys, blank, passphrase, avoid_reuse, descriptors + self.rpc( + "createwallet", + [ + self._rpc_wallet, + False, + True, + "", + False, + self._use_descriptors, + ], ) - self._sc.initialiseWallet(self.coin_type()) - except Exception as create_e: - self._log.error(f"Error creating wallet: {create_e}") + wallets = self.rpc("listwallets") + if self.getWalletSeedID() == "Not found": + self._log.info( + f"Initializing HD seed for {self.coin_name()}." + ) + self._sc.initialiseWallet(self.coin_type()) + except Exception as create_e: + self._log.error(f"Error creating wallet: {create_e}") if self._rpc_wallet not in wallets and len(wallets) > 0: self._log.warning(f"Changing {self.ticker()} wallet name.") @@ -192,20 +199,33 @@ class LTCInterface(BTCInterface): wallets = self.rpc("listwallets") if self._rpc_wallet not in wallets: - self._log.info( - f'Creating wallet "{self._rpc_wallet}" for {self.coin_name()}.' - ) - self.rpc( - "createwallet", - [ - self._rpc_wallet, - False, - True, - password, - False, - self._use_descriptors, - ], - ) + try: + self.rpc("loadwallet", [self._rpc_wallet]) + except Exception as e: + if "does not exist" in str(e) or "Path does not exist" in str(e): + try: + wallet_dirs = self.rpc("listwalletdir") + existing = [w["name"] for w in wallet_dirs.get("wallets", [])] + except Exception: + existing = [] + if len(existing) == 0: + self._log.info( + f'Creating wallet "{self._rpc_wallet}" for {self.coin_name()}.' + ) + # wallet_name, disable_private_keys, blank, passphrase, avoid_reuse, descriptors + self.rpc( + "createwallet", + [ + self._rpc_wallet, + False, + True, + password, + False, + self._use_descriptors, + ], + ) + else: + raise try: seed_id = self.getWalletSeedID() @@ -298,6 +318,7 @@ class LTCInterfaceMWEB(LTCInterface): self._log.info( f'Creating wallet "{self._rpc_wallet}" for {self.coin_name()}.' ) + # wallet_name, disable_private_keys, blank, passphrase, avoid_reuse, descriptors self.rpc( "createwallet", [