From 119a7fab578ee5b0a504251e4a461f5c03ae4a7e Mon Sep 17 00:00:00 2001 From: somerandomcryptoguy <139346562+somerandomcryptoguy@users.noreply.github.com> Date: Wed, 8 Oct 2025 20:29:10 +0100 Subject: [PATCH] added query_key wallet-RPC support for all Carrot keys (#69) Co-authored-by: Some Random Crypto Guy --- src/wallet/wallet_rpc_server.cpp | 49 ++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index d917207d9..091a51a9f 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -2355,6 +2355,55 @@ namespace tools epee::wipeable_string key = epee::to_hex::wipeable_string(m_wallet->get_account().get_keys().m_spend_secret_key); res.key = std::string(key.data(), key.size()); } + else if(req.key_type.compare("s_master") == 0) + { + if (m_wallet->watch_only()) + { + er.code = WALLET_RPC_ERROR_CODE_WATCH_ONLY; + er.message = "The wallet is watch-only. Cannot retrieve s_master key."; + return false; + } + CHECK_IF_BACKGROUND_SYNCING(); + epee::wipeable_string key = epee::to_hex::wipeable_string(m_wallet->get_account().get_keys().s_master); + res.key = std::string(key.data(), key.size()); + } + else if(req.key_type.compare("k_prove_spend") == 0) + { + if (m_wallet->watch_only()) + { + er.code = WALLET_RPC_ERROR_CODE_WATCH_ONLY; + er.message = "The wallet is watch-only. Cannot retrieve k_prove_spend key."; + return false; + } + CHECK_IF_BACKGROUND_SYNCING(); + epee::wipeable_string key = epee::to_hex::wipeable_string(m_wallet->get_account().get_keys().k_prove_spend); + res.key = std::string(key.data(), key.size()); + } + else if(req.key_type.compare("s_view_balance") == 0) + { + epee::wipeable_string key = epee::to_hex::wipeable_string(m_wallet->get_account().get_keys().s_view_balance); + res.key = std::string(key.data(), key.size()); + } + else if(req.key_type.compare("s_view_balance") == 0) + { + epee::wipeable_string key = epee::to_hex::wipeable_string(m_wallet->get_account().get_keys().s_view_balance); + res.key = std::string(key.data(), key.size()); + } + else if(req.key_type.compare("k_view_incoming") == 0) + { + epee::wipeable_string key = epee::to_hex::wipeable_string(m_wallet->get_account().get_keys().k_view_incoming); + res.key = std::string(key.data(), key.size()); + } + else if(req.key_type.compare("k_generate_image") == 0) + { + epee::wipeable_string key = epee::to_hex::wipeable_string(m_wallet->get_account().get_keys().k_generate_image); + res.key = std::string(key.data(), key.size()); + } + else if(req.key_type.compare("s_generate_address") == 0) + { + epee::wipeable_string key = epee::to_hex::wipeable_string(m_wallet->get_account().get_keys().s_generate_address); + res.key = std::string(key.data(), key.size()); + } else { er.message = "key_type " + req.key_type + " not found";