message: rpc: enable filtering getnodeaddresses by network
diff: @@ -852,6 +852,7 @@ static RPCHelpMan getnodeaddresses()
  "\nReturn known addresses, which can potentially be used to find new nodes in the network.\n",
  {
  {"count", RPCArg::Type::NUM, RPCArg::Default{1}, "The maximum number of addresses to return. Specify 0 to return all known addresses."},
  + {"network", RPCArg::Type::STR, RPCArg::DefaultHint{"all networks"}, "Return only addresses of the specified network. Can be one of: " + Join(GetNetworkNames(), ", ") + "."},
  },
  RPCResult{
  RPCResult::Type::ARR, "", "",
  @@ -868,7 +869,10 @@ static RPCHelpMan getnodeaddresses()
  },
  RPCExamples{
  HelpExampleCli("getnodeaddresses", "8")
  + + HelpExampleCli("getnodeaddresses", "4 \"i2p\"")
  + + HelpExampleCli("-named getnodeaddresses", "network=onion count=12")
  + HelpExampleRpc("getnodeaddresses", "8")
  + + HelpExampleRpc("getnodeaddresses", "4, \"i2p\"")
  },
  [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
  {
  @@ -878,8 +882,13 @@ static RPCHelpMan getnodeaddresses()
  const int count{request.params[0].isNull() ? 1 : request.params[0].get_int()};
  if (count < 0) throw JSONRPCError(RPC_INVALID_PARAMETER, "Address count out of range");
  + const std::optional<Network> network{request.params[1].isNull() ? std::nullopt : std::optional<Network>{ParseNetwork(request.params[1].get_str())}};
  + if (network == NET_UNROUTABLE) {
  + throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Network not recognized: %s", request.params[1].get_str()));
  + }
  +
  // returns a shuffled list of CAddress
  - const std::vector<CAddress> vAddr{connman.GetAddresses(count, /* max_pct */ 0, /* network */ std::nullopt)};
  + const std::vector<CAddress> vAddr{connman.GetAddresses(count, /* max_pct */ 0, network)};
  UniValue ret(UniValue::VARR);
  for (const CAddress& addr : vAddr) {
  