Merge #16787: rpc: Human readable network services
66740f460a
doc: add a release note for the new field in 'getpeerinfo' and 'getnetworkinfo' (darosior)6564f58c87
rpc/net: decode the services flags in a new entry (darosior) Pull request description: This is a reopen of https://github.com/bitcoin/bitcoin/pull/15511#issuecomment-527087370 since there have been concept ACKs from sdaftuar and Sjors. This adds a new entry to `getpeerinfo` and `getnetworkinfo` which decodes the network services flags. Here is a truncated output of `getpeerinfo`: ``` "services": "000000000000040d", "servicesnames": "NODE_NETWORK | NODE_BLOOM | NODE_WITNESS | NODE_NETWORK_LIMITED", "relaytxes": true, ``` And one of `getnetworkinfo`: ``` "localservices": "0000000000000409", "localservicesnames": "NODE_NETWORK | NODE_WITNESS | NODE_NETWORK_LIMITED", "localrelay": true, ``` Fixes #16780. ACKs for top commit: MarcoFalke: unsigned ACK66740f460a
laanwj: ACK66740f460a
Tree-SHA512: 0acc37134b283f56004a41243903d7790cb01591ddf0342489bd05f3a2c780563075373ba5fd55180fa15632e8968ffa11a979b8afece75a6a2e891342601440
This commit is contained in:
commit
33c466a642
4 changed files with 39 additions and 2 deletions
3
doc/release-notes-16787.md
Normal file
3
doc/release-notes-16787.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
RPC changes
|
||||
-----------
|
||||
The `getnetworkinfo` and `getpeerinfo` commands now contain a new field with decoded network service flags.
|
|
@ -82,6 +82,10 @@ static UniValue getpeerinfo(const JSONRPCRequest& request)
|
|||
" \"addrbind\":\"ip:port\", (string) Bind address of the connection to the peer\n"
|
||||
" \"addrlocal\":\"ip:port\", (string) Local address as reported by the peer\n"
|
||||
" \"services\":\"xxxxxxxxxxxxxxxx\", (string) The services offered\n"
|
||||
" \"servicesnames\":[ (array) the services offered, in human-readable form\n"
|
||||
" \"SERVICE_NAME\", (string) the service name if it is recognised\n"
|
||||
" ...\n"
|
||||
" ],\n"
|
||||
" \"relaytxes\":true|false, (boolean) Whether peer has asked us to relay transactions to it\n"
|
||||
" \"lastsend\": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) of the last send\n"
|
||||
" \"lastrecv\": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) of the last receive\n"
|
||||
|
@ -147,6 +151,7 @@ static UniValue getpeerinfo(const JSONRPCRequest& request)
|
|||
if (stats.addrBind.IsValid())
|
||||
obj.pushKV("addrbind", stats.addrBind.ToString());
|
||||
obj.pushKV("services", strprintf("%016x", stats.nServices));
|
||||
obj.pushKV("servicesnames", GetServicesNames(stats.nServices));
|
||||
obj.pushKV("relaytxes", stats.fRelayTxes);
|
||||
obj.pushKV("lastsend", stats.nLastSend);
|
||||
obj.pushKV("lastrecv", stats.nLastRecv);
|
||||
|
@ -446,6 +451,10 @@ static UniValue getnetworkinfo(const JSONRPCRequest& request)
|
|||
" \"subversion\": \"/Satoshi:x.x.x/\", (string) the server subversion string\n"
|
||||
" \"protocolversion\": xxxxx, (numeric) the protocol version\n"
|
||||
" \"localservices\": \"xxxxxxxxxxxxxxxx\", (string) the services we offer to the network\n"
|
||||
" \"localservicesnames\": [ (array) the services we offer to the network, in human-readable form\n"
|
||||
" \"SERVICE_NAME\", (string) the service name\n"
|
||||
" ...\n"
|
||||
" ],\n"
|
||||
" \"localrelay\": true|false, (bool) true if transaction relay is requested from peers\n"
|
||||
" \"timeoffset\": xxxxx, (numeric) the time offset\n"
|
||||
" \"connections\": xxxxx, (numeric) the number of connections\n"
|
||||
|
@ -484,8 +493,11 @@ static UniValue getnetworkinfo(const JSONRPCRequest& request)
|
|||
obj.pushKV("version", CLIENT_VERSION);
|
||||
obj.pushKV("subversion", strSubVersion);
|
||||
obj.pushKV("protocolversion",PROTOCOL_VERSION);
|
||||
if(g_connman)
|
||||
obj.pushKV("localservices", strprintf("%016x", g_connman->GetLocalServices()));
|
||||
if (g_connman) {
|
||||
ServiceFlags services = g_connman->GetLocalServices();
|
||||
obj.pushKV("localservices", strprintf("%016x", services));
|
||||
obj.pushKV("localservicesnames", GetServicesNames(services));
|
||||
}
|
||||
obj.pushKV("localrelay", g_relay_txes);
|
||||
obj.pushKV("timeoffset", GetTimeOffset());
|
||||
if (g_connman) {
|
||||
|
|
|
@ -733,3 +733,21 @@ std::vector<CScript> EvalDescriptorStringOrObject(const UniValue& scanobject, Fl
|
|||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
UniValue GetServicesNames(ServiceFlags services)
|
||||
{
|
||||
UniValue servicesNames(UniValue::VARR);
|
||||
|
||||
if (services & NODE_NETWORK)
|
||||
servicesNames.push_back("NETWORK");
|
||||
if (services & NODE_GETUTXO)
|
||||
servicesNames.push_back("GETUTXO");
|
||||
if (services & NODE_BLOOM)
|
||||
servicesNames.push_back("BLOOM");
|
||||
if (services & NODE_WITNESS)
|
||||
servicesNames.push_back("WITNESS");
|
||||
if (services & NODE_NETWORK_LIMITED)
|
||||
servicesNames.push_back("NETWORK_LIMITED");
|
||||
|
||||
return servicesNames;
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <node/transaction.h>
|
||||
#include <outputtype.h>
|
||||
#include <pubkey.h>
|
||||
#include <protocol.h>
|
||||
#include <rpc/protocol.h>
|
||||
#include <rpc/request.h>
|
||||
#include <script/script.h>
|
||||
|
@ -90,6 +91,9 @@ std::pair<int64_t, int64_t> ParseDescriptorRange(const UniValue& value);
|
|||
/** Evaluate a descriptor given as a string, or as a {"desc":...,"range":...} object, with default range of 1000. */
|
||||
std::vector<CScript> EvalDescriptorStringOrObject(const UniValue& scanobject, FlatSigningProvider& provider);
|
||||
|
||||
/** Returns, given services flags, a list of humanly readable (known) network services */
|
||||
UniValue GetServicesNames(ServiceFlags services);
|
||||
|
||||
struct RPCArg {
|
||||
enum class Type {
|
||||
OBJ,
|
||||
|
|
Loading…
Add table
Reference in a new issue