diff --git a/src/wallet/rpc/util.cpp b/src/wallet/rpc/util.cpp index 59683c5fd8c..f788d0d2d33 100644 --- a/src/wallet/rpc/util.cpp +++ b/src/wallet/rpc/util.cpp @@ -64,12 +64,11 @@ std::shared_ptr GetWalletForJSONRPCRequest(const JSONRPCRequest& reques return pwallet; } - std::vector> wallets = GetWallets(context); - if (wallets.size() == 1) { - return wallets[0]; - } + size_t count{0}; + auto wallet = GetDefaultWallet(context, count); + if (wallet) return wallet; - if (wallets.empty()) { + if (count == 0) { throw JSONRPCError( RPC_WALLET_NOT_FOUND, "No wallet is loaded. Load a wallet using loadwallet or create a new one with createwallet. (Note: A default wallet is no longer automatically created)"); } diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index be64b4cdbbc..96b9a69d455 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -151,6 +151,13 @@ std::vector> GetWallets(WalletContext& context) return context.wallets; } +std::shared_ptr GetDefaultWallet(WalletContext& context, size_t& count) +{ + LOCK(context.wallets_mutex); + count = context.wallets.size(); + return count == 1 ? context.wallets[0] : nullptr; +} + std::shared_ptr GetWallet(WalletContext& context, const std::string& name) { LOCK(context.wallets_mutex); diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 0490d321abe..686e1022940 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -62,6 +62,7 @@ bool AddWallet(WalletContext& context, const std::shared_ptr& wallet); bool RemoveWallet(WalletContext& context, const std::shared_ptr& wallet, std::optional load_on_start, std::vector& warnings); bool RemoveWallet(WalletContext& context, const std::shared_ptr& wallet, std::optional load_on_start); std::vector> GetWallets(WalletContext& context); +std::shared_ptr GetDefaultWallet(WalletContext& context, size_t& count); std::shared_ptr GetWallet(WalletContext& context, const std::string& name); std::shared_ptr LoadWallet(WalletContext& context, const std::string& name, std::optional load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector& warnings); std::shared_ptr CreateWallet(WalletContext& context, const std::string& name, std::optional load_on_start, DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector& warnings);