diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 40ad69f61..23900cbd6 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -226,10 +226,6 @@ static UniValue getrawchangeaddress(const JSONRPCRequest& request) throw JSONRPCError(RPC_WALLET_ERROR, "Error: This wallet has no available keys"); } - if (!pwallet->IsLocked()) { - pwallet->TopUpKeyPool(); - } - OutputType output_type = pwallet->m_default_change_type != OutputType::CHANGE_AUTO ? pwallet->m_default_change_type : pwallet->m_default_address_type; if (!request.params[0].isNull()) { if (!ParseOutputType(request.params[0].get_str(), output_type)) { @@ -237,12 +233,11 @@ static UniValue getrawchangeaddress(const JSONRPCRequest& request) } } - ReserveDestination reservedest(pwallet); CTxDestination dest; - if (!reservedest.GetReservedDestination(output_type, dest, true)) - throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Error: Keypool ran out, please call keypoolrefill first"); - - reservedest.KeepDestination(); + std::string error; + if (!pwallet->GetNewChangeDestination(output_type, dest, error)) { + throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, error); + } return EncodeDestination(dest); } diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 4f632266b..108f4d679 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3531,6 +3531,23 @@ bool CWallet::GetNewDestination(const OutputType type, const std::string label, return true; } +bool CWallet::GetNewChangeDestination(const OutputType type, CTxDestination& dest, std::string& error) +{ + error.clear(); + if (!IsLocked()) { + TopUpKeyPool(); + } + + ReserveDestination reservedest(this); + if (!reservedest.GetReservedDestination(type, dest, true)) { + error = "Error: Keypool ran out, please call keypoolrefill first"; + return false; + } + + reservedest.KeepDestination(); + return true; +} + static int64_t GetOldestKeyTimeInPool(const std::set& setKeyPool, WalletBatch& batch) { if (setKeyPool.empty()) { return GetTime(); diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index f1a3c760a..8a0665b19 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -1128,6 +1128,7 @@ public: std::set GetLabelAddresses(const std::string& label) const; bool GetNewDestination(const OutputType type, const std::string label, CTxDestination& dest, std::string& error); + bool GetNewChangeDestination(const OutputType type, CTxDestination& dest, std::string& error); isminetype IsMine(const CTxIn& txin) const; /**