From 2e3d5deb92f517ec16a770b17019eaeb265e2224 Mon Sep 17 00:00:00 2001 From: Bart <11445373+bthomee@users.noreply.github.com> Date: Tue, 21 Jul 2026 09:43:08 -0400 Subject: [PATCH] Optimize downconversion from protocol version 2.3 to 2.2 when relaying --- src/xrpld/overlay/detail/PeerImp.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/xrpld/overlay/detail/PeerImp.cpp b/src/xrpld/overlay/detail/PeerImp.cpp index 095bec689f..cede8713f9 100644 --- a/src/xrpld/overlay/detail/PeerImp.cpp +++ b/src/xrpld/overlay/detail/PeerImp.cpp @@ -1719,8 +1719,16 @@ PeerImp::onMessage(std::shared_ptr const& m) for (int i = 0; i < m->nodes_size(); ++i) { auto* ledgerNode = m->mutable_nodes(i); - if (ledgerNode->reference_case() != ledgerNode->REFERENCE_NOT_SET) + if (ledgerNode->has_id()) { + // We can directly copy the `id` field, because it uses the wire format as + // the legacy `nodeid` field. + ledgerNode->set_nodeid(ledgerNode->id()); + ledgerNode->clear_id(); + } + else if (ledgerNode->has_depth()) + { + // We need to regenerate the node ID from the node data and depth. auto treeNode = getTreeNode(ledgerNode->nodedata()); if (!treeNode) { @@ -1742,7 +1750,6 @@ PeerImp::onMessage(std::shared_ptr const& m) } ledgerNode->set_nodeid(nodeID->getRawString()); - ledgerNode->clear_id(); ledgerNode->clear_depth(); } }