diff options
author | Andrew Chow <achow101-github@achow101.com> | 2019-06-18 15:49:02 -0400 |
---|---|---|
committer | Andrew Chow <achow101-github@achow101.com> | 2019-07-09 16:43:10 -0400 |
commit | 8e7f930828a9f8f9be1c90ff45e3fdfef1980eaf (patch) | |
tree | 2bb460aa84c7d489e68364fa16776a9785ebb383 /src | |
parent | 33d13edd2bda0af90660e275ea4fa96ca9896f2a (diff) |
Add GetNewChangeDestination for getting new change Destinations
Adds a GetNewChangeDestination that has the same objective as GetNewDestination
Diffstat (limited to 'src')
-rw-r--r-- | src/wallet/rpcwallet.cpp | 13 | ||||
-rw-r--r-- | src/wallet/wallet.cpp | 17 | ||||
-rw-r--r-- | src/wallet/wallet.h | 1 |
3 files changed, 22 insertions, 9 deletions
diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 40ad69f61c..23900cbd67 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 4f632266b3..108f4d6795 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<int64_t>& setKeyPool, WalletBatch& batch) { if (setKeyPool.empty()) { return GetTime(); diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index f1a3c760a9..8a0665b196 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -1128,6 +1128,7 @@ public: std::set<CTxDestination> 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; /** |