mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-10-10 11:33:46 +02:00
Merge bitcoin/bitcoin#21843: p2p, rpc: enable GetAddr, GetAddresses, and getnodeaddresses by network
ce6bca88e8
doc: release note for getnodeaddresses by network (Jon Atack)3f89c0e990
test: improve getnodeaddresses coverage, test by network (Jon Atack)6c98c09991
rpc: enable filtering getnodeaddresses by network (Jon Atack)80ba294854
p2p: allow CConnman::GetAddresses() by network, add doxygen (Jon Atack)a49f3ddbba
p2p: allow CAddrMan::GetAddr() by network, add doxygen (Jon Atack)c38981e748
p2p: pull time call out of loop in CAddrMan::GetAddr_() (João Barbosa)d35ddca91e
p2p: enable CAddrMan::GetAddr_() by network, add doxygen (Jon Atack) Pull request description: This patch allows passing a network argument to CAddrMan::GetAddr(), CConnman::GetAddresses(), and rpc getnodeaddresses to return only addresses of that network. It also contains a performance optimisation by promag. ACKs for top commit: laanwj: Code review and lightly tested ACKce6bca88e8
vasild: ACKce6bca88e8
Tree-SHA512: 40e700d97091248429c73cbc0639a1f03ab7288e636a7b9026ad253e9708253c6b2ec98e7d9fb2d56136c0f762313dd648915ac98d723ee330d713813a43f99d
This commit is contained in:
@@ -28,6 +28,8 @@
|
||||
#include <version.h>
|
||||
#include <warnings.h>
|
||||
|
||||
#include <optional>
|
||||
|
||||
#include <univalue.h>
|
||||
|
||||
const std::vector<std::string> CONNECTION_TYPE_DOC{
|
||||
@@ -851,6 +853,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, "", "",
|
||||
@@ -867,7 +870,10 @@ static RPCHelpMan getnodeaddresses()
|
||||
},
|
||||
RPCExamples{
|
||||
HelpExampleCli("getnodeaddresses", "8")
|
||||
+ HelpExampleRpc("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
|
||||
{
|
||||
@@ -877,8 +883,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)};
|
||||
const std::vector<CAddress> vAddr{connman.GetAddresses(count, /* max_pct */ 0, network)};
|
||||
UniValue ret(UniValue::VARR);
|
||||
|
||||
for (const CAddress& addr : vAddr) {
|
||||
|
Reference in New Issue
Block a user