From 4ce3f4a26565e9851af950728cda7bcc2242d0c2 Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Sat, 3 Jan 2026 19:08:20 +0100 Subject: [PATCH] rpc, net: deprecate `startingheight` field of `getpeerinfo` RPC The reported starting height of a peer in the VERSION message is untrusted, and it doesn't seem to be useful anymore (after #20624), so deprecating the corresponding "startingheight" field seems reasonable. After that, it can be removed, along with the `m_starting_height` field of the Peer / CNodeStats structs, as it is sufficient to show the reported height only once at connection in the debug log. --- doc/release-notes-34197.md | 7 +++++++ src/net_processing.cpp | 1 + src/rpc/net.cpp | 6 ++++-- test/functional/rpc_net.py | 5 ++++- 4 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 doc/release-notes-34197.md diff --git a/doc/release-notes-34197.md b/doc/release-notes-34197.md new file mode 100644 index 00000000000..377ca9cc43a --- /dev/null +++ b/doc/release-notes-34197.md @@ -0,0 +1,7 @@ +Updated RPCs +------------ + +- The `getpeerinfo` RPC no longer returns the `startingheight` field unless + the configuration option `-deprecatedrpc=startingheight` is used. The + `startingheight` field will be fully removed in the next major release. + (#34197) diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 6ec55256094..3b926c6c45e 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -268,6 +268,7 @@ struct Peer { bool m_outbound_version_message_sent GUARDED_BY(NetEventsInterface::g_msgproc_mutex){false}; /** This peer's reported block height when we connected */ + // TODO: remove in v32.0, only show reported height once in "receive version message: ..." debug log std::atomic m_starting_height{-1}; /** The pong reply we're expecting, or 0 if no pong expected. */ diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 826686f9037..b07555e97a0 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -160,7 +160,7 @@ static RPCHelpMan getpeerinfo() {RPCResult::Type::BOOL, "inbound", "Inbound (true) or Outbound (false)"}, {RPCResult::Type::BOOL, "bip152_hb_to", "Whether we selected peer as (compact blocks) high-bandwidth peer"}, {RPCResult::Type::BOOL, "bip152_hb_from", "Whether peer selected us as (compact blocks) high-bandwidth peer"}, - {RPCResult::Type::NUM, "startingheight", "The starting height (block) of the peer"}, + {RPCResult::Type::NUM, "startingheight", /*optional=*/true, "(DEPRECATED, returned only if config option -deprecatedrpc=startingheight is passed) The starting height (block) of the peer"}, {RPCResult::Type::NUM, "presynced_headers", "The current height of header pre-synchronization with this peer, or -1 if no low-work sync is in progress"}, {RPCResult::Type::NUM, "synced_headers", "The last header we have in common with this peer"}, {RPCResult::Type::NUM, "synced_blocks", "The last block we have in common with this peer"}, @@ -267,7 +267,9 @@ static RPCHelpMan getpeerinfo() obj.pushKV("inbound", stats.fInbound); obj.pushKV("bip152_hb_to", stats.m_bip152_highbandwidth_to); obj.pushKV("bip152_hb_from", stats.m_bip152_highbandwidth_from); - obj.pushKV("startingheight", statestats.m_starting_height); + if (IsDeprecatedRPCEnabled("startingheight")) { + obj.pushKV("startingheight", statestats.m_starting_height); + } obj.pushKV("presynced_headers", statestats.presync_height); obj.pushKV("synced_headers", statestats.nSyncHeight); obj.pushKV("synced_blocks", statestats.nCommonHeight); diff --git a/test/functional/rpc_net.py b/test/functional/rpc_net.py index 77d036c2386..6438cabefc4 100755 --- a/test/functional/rpc_net.py +++ b/test/functional/rpc_net.py @@ -62,7 +62,10 @@ def seed_addrman(node): class NetTest(BitcoinTestFramework): def set_test_params(self): self.num_nodes = 2 - self.extra_args = [["-minrelaytxfee=0.00001000"], ["-minrelaytxfee=0.00000500"]] + self.extra_args = [ + ["-minrelaytxfee=0.00001000", "-deprecatedrpc=startingheight"], + ["-minrelaytxfee=0.00000500"], + ] # Specify a non-working proxy to make sure no actual connections to public IPs are attempted for args in self.extra_args: args.append("-proxy=127.0.0.1:1")