aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfurszy <matiasfurszyfer@protonmail.com>2022-06-11 11:46:14 -0300
committerfurszy <matiasfurszyfer@protonmail.com>2022-06-22 12:51:30 -0300
commitfa9f2ab8fd53075d2a3ec93ddac4908e73525c46 (patch)
tree17b573fa0510976141536af72b9675d8829eaa0f
parent83e42c4b94e376a19d3eb0a2379769b8b8ac5fc8 (diff)
downloadbitcoin-fa9f2ab8fd53075d2a3ec93ddac4908e73525c46.tar.xz
refactor: RPC 'listlabels', encapsulate 'CWallet::ListAddrBookLabels' functionality
Mainly to not access 'm_address_book' externally.
-rw-r--r--src/wallet/rpc/addresses.cpp8
-rw-r--r--src/wallet/wallet.cpp14
-rw-r--r--src/wallet/wallet.h5
3 files changed, 20 insertions, 7 deletions
diff --git a/src/wallet/rpc/addresses.cpp b/src/wallet/rpc/addresses.cpp
index 55dd2f935c..da4cc44ee6 100644
--- a/src/wallet/rpc/addresses.cpp
+++ b/src/wallet/rpc/addresses.cpp
@@ -733,13 +733,7 @@ RPCHelpMan listlabels()
}
// Add to a set to sort by label name, then insert into Univalue array
- std::set<std::string> label_set;
- for (const std::pair<const CTxDestination, CAddressBookData>& entry : pwallet->m_address_book) {
- if (entry.second.IsChange()) continue;
- if (purpose.empty() || entry.second.purpose == purpose) {
- label_set.insert(entry.second.GetLabel());
- }
- }
+ std::set<std::string> label_set = pwallet->ListAddrBookLabels(purpose);
UniValue ret(UniValue::VARR);
for (const std::string& name : label_set) {
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index f7eb0bbc03..3c211fb348 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -2373,6 +2373,20 @@ std::vector<CTxDestination> CWallet::ListAddrBookAddresses(const std::optional<A
return result;
}
+std::set<std::string> CWallet::ListAddrBookLabels(const std::string& purpose) const
+{
+ AssertLockHeld(cs_wallet);
+ std::set<std::string> label_set;
+ ForEachAddrBookEntry([&](const CTxDestination& _dest, const std::string& _label,
+ const std::string& _purpose, bool _is_change) {
+ if (_is_change) return;
+ if (purpose.empty() || _purpose == purpose) {
+ label_set.insert(_label);
+ }
+ });
+ return label_set;
+}
+
bool ReserveDestination::GetReservedDestination(CTxDestination& dest, bool internal, bilingual_str& error)
{
m_spk_man = pwallet->GetScriptPubKeyMan(type, internal);
diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h
index 3775f325ba..8bc1189bec 100644
--- a/src/wallet/wallet.h
+++ b/src/wallet/wallet.h
@@ -649,6 +649,11 @@ public:
std::vector<CTxDestination> ListAddrBookAddresses(const std::optional<AddrBookFilter>& filter) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
/**
+ * Retrieve all the known labels in the address book
+ */
+ std::set<std::string> ListAddrBookLabels(const std::string& purpose) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
+
+ /**
* Walk-through the address book entries.
* Stops when the provided 'ListAddrBookFunc' returns false.
*/