From 56d0d8c31388aa845281eadbceb9df9c8a32c14f Mon Sep 17 00:00:00 2001 From: stratospher <44024636+stratospher@users.noreply.github.com> Date: Sun, 29 Jan 2023 22:19:00 +0530 Subject: [PATCH 1/2] cli: modify -addrinfo to use getaddrmaninfo RPC endpoint --- src/bitcoin-cli.cpp | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp index 7fcb4409314..f39506b79e9 100644 --- a/src/bitcoin-cli.cpp +++ b/src/bitcoin-cli.cpp @@ -88,7 +88,7 @@ static void SetupCliArgs(ArgsManager& argsman) "RPC generatetoaddress nblocks and maxtries arguments. Example: bitcoin-cli -generate 4 1000", DEFAULT_NBLOCKS, DEFAULT_MAX_TRIES), ArgsManager::ALLOW_ANY, OptionsCategory::CLI_COMMANDS); - argsman.AddArg("-addrinfo", "Get the number of addresses known to the node, per network and total, after filtering for quality and recency. The total number of addresses known to the node may be higher.", ArgsManager::ALLOW_ANY, OptionsCategory::CLI_COMMANDS); + argsman.AddArg("-addrinfo", "Get the number of addresses known to the node, per network and total.", ArgsManager::ALLOW_ANY, OptionsCategory::CLI_COMMANDS); argsman.AddArg("-getinfo", "Get general information from the remote server. Note that unlike server-side RPC calls, the output of -getinfo is the result of multiple non-atomic requests. Some entries in the output may represent results from different states (e.g. wallet balance may be as of a different block from the chain state reported)", ArgsManager::ALLOW_ANY, OptionsCategory::CLI_COMMANDS); argsman.AddArg("-netinfo", "Get network peer connection information from the remote server. An optional integer argument from 0 to 4 can be passed for different peers listings (default: 0). Pass \"help\" for detailed help documentation.", ArgsManager::ALLOW_ANY, OptionsCategory::CLI_COMMANDS); @@ -259,46 +259,31 @@ public: /** Process addrinfo requests */ class AddrinfoRequestHandler : public BaseRequestHandler { -private: - int8_t NetworkStringToId(const std::string& str) const - { - for (size_t i = 0; i < NETWORKS.size(); ++i) { - if (str == NETWORKS[i]) return i; - } - return UNKNOWN_NETWORK; - } - public: UniValue PrepareRequest(const std::string& method, const std::vector& args) override { if (!args.empty()) { throw std::runtime_error("-addrinfo takes no arguments"); } - UniValue params{RPCConvertValues("getnodeaddresses", std::vector{{"0"}})}; - return JSONRPCRequestObj("getnodeaddresses", params, 1); + return JSONRPCRequestObj("getaddrmaninfo", NullUniValue, 1); } UniValue ProcessReply(const UniValue& reply) override { if (!reply["error"].isNull()) return reply; - const std::vector& nodes{reply["result"].getValues()}; - if (!nodes.empty() && nodes.at(0)["network"].isNull()) { - throw std::runtime_error("-addrinfo requires bitcoind server to be running v22.0 and up"); - } - // Count the number of peers known to our node, by network. - std::array counts{{}}; - for (const UniValue& node : nodes) { - std::string network_name{node["network"].get_str()}; - const int8_t network_id{NetworkStringToId(network_name)}; - if (network_id == UNKNOWN_NETWORK) continue; - ++counts.at(network_id); + const std::vector& network_types{reply["result"].getKeys()}; + const std::vector& addrman_counts{reply["result"].getValues()}; + if (network_types.empty()) { + throw std::runtime_error("-addrinfo requires bitcoind server to be running v26.0 and up. if using an earlier bitcoind server (v22.0 - v25.0), use the appropriate binary"); } + // Prepare result to return to user. UniValue result{UniValue::VOBJ}, addresses{UniValue::VOBJ}; uint64_t total{0}; // Total address count - for (size_t i = 1; i < NETWORKS.size() - 1; ++i) { - addresses.pushKV(NETWORKS[i], counts.at(i)); - total += counts.at(i); + for (size_t i = 0; i < network_types.size() - 1; ++i) { + uint64_t addr_count = addrman_counts[i]["total"].getInt(); + addresses.pushKV(network_types[i], addr_count); + total += addr_count; } addresses.pushKV("total", total); result.pushKV("addresses_known", std::move(addresses)); From 4114a523c204e846e55f2a7cc9b0c1b81bdc98ef Mon Sep 17 00:00:00 2001 From: stratospher <44024636+stratospher@users.noreply.github.com> Date: Mon, 13 Mar 2023 13:14:54 +0530 Subject: [PATCH 2/2] doc: add release notes for #26988 --- doc/release-notes-26988.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 doc/release-notes-26988.md diff --git a/doc/release-notes-26988.md b/doc/release-notes-26988.md new file mode 100644 index 00000000000..f64c6e5fe1f --- /dev/null +++ b/doc/release-notes-26988.md @@ -0,0 +1,5 @@ +Tools and Utilities +-------- + +- CLI -addrinfo previously (v22 - v28) returned addresses known to the node after filtering for quality and recency. + It now returns all the addresses known to the node. (#26988) \ No newline at end of file