From fa0a09441d2f3497705fc20b8133ee1e71ab8ca6 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Fri, 27 Mar 2026 14:12:03 +0100 Subject: [PATCH] refactor: Return std::optional from GetWalletNameFromJSONRPCRequest --- src/wallet/rpc/util.cpp | 19 ++++++++----------- src/wallet/rpc/util.h | 2 +- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/wallet/rpc/util.cpp b/src/wallet/rpc/util.cpp index 2b980149462..77a8745ced7 100644 --- a/src/wallet/rpc/util.cpp +++ b/src/wallet/rpc/util.cpp @@ -32,14 +32,13 @@ bool GetAvoidReuseFlag(const CWallet& wallet, const UniValue& param) { std::string EnsureUniqueWalletName(const JSONRPCRequest& request, std::optional wallet_name) { - std::string endpoint_wallet; - if (GetWalletNameFromJSONRPCRequest(request, endpoint_wallet)) { + if (auto endpoint_wallet{GetWalletNameFromJSONRPCRequest(request)}) { // wallet endpoint was used - if (wallet_name && *wallet_name != endpoint_wallet) { + if (wallet_name && *wallet_name != *endpoint_wallet) { throw JSONRPCError(RPC_INVALID_PARAMETER, "The RPC endpoint wallet and the wallet name parameter specify different wallets"); } - return endpoint_wallet; + return *endpoint_wallet; } // Not a wallet endpoint; parameter must be provided @@ -51,14 +50,13 @@ std::string EnsureUniqueWalletName(const JSONRPCRequest& request, std::optional< return std::string{*wallet_name}; } -bool GetWalletNameFromJSONRPCRequest(const JSONRPCRequest& request, std::string& wallet_name) +std::optional GetWalletNameFromJSONRPCRequest(const JSONRPCRequest& request) { if (request.URI.starts_with(WALLET_ENDPOINT_BASE)) { // wallet endpoint was used - wallet_name = UrlDecode(std::string_view{request.URI}.substr(WALLET_ENDPOINT_BASE.size())); - return true; + return UrlDecode(std::string_view{request.URI}.substr(WALLET_ENDPOINT_BASE.size())); } - return false; + return std::nullopt; } std::shared_ptr GetWalletForJSONRPCRequest(const JSONRPCRequest& request) @@ -66,9 +64,8 @@ std::shared_ptr GetWalletForJSONRPCRequest(const JSONRPCRequest& reques CHECK_NONFATAL(request.mode == JSONRPCRequest::EXECUTE); WalletContext& context = EnsureWalletContext(request.context); - std::string wallet_name; - if (GetWalletNameFromJSONRPCRequest(request, wallet_name)) { - std::shared_ptr pwallet = GetWallet(context, wallet_name); + if (auto wallet_name{GetWalletNameFromJSONRPCRequest(request)}) { + std::shared_ptr pwallet{GetWallet(context, *wallet_name)}; if (!pwallet) throw JSONRPCError(RPC_WALLET_NOT_FOUND, "Requested wallet does not exist or is not loaded"); return pwallet; } diff --git a/src/wallet/rpc/util.h b/src/wallet/rpc/util.h index 89729218d1a..88fdc6639f4 100644 --- a/src/wallet/rpc/util.h +++ b/src/wallet/rpc/util.h @@ -39,7 +39,7 @@ static const RPCResult RESULT_LAST_PROCESSED_BLOCK { RPCResult::Type::OBJ, "last * @return nullptr if no wallet should be used, or a pointer to the CWallet */ std::shared_ptr GetWalletForJSONRPCRequest(const JSONRPCRequest& request); -bool GetWalletNameFromJSONRPCRequest(const JSONRPCRequest& request, std::string& wallet_name); +std::optional GetWalletNameFromJSONRPCRequest(const JSONRPCRequest& request); /** * Ensures that a wallet name is specified across the endpoint and wallet_name. * Throws `RPC_INVALID_PARAMETER` if none or different wallet names are specified.