From 79b064a6cce054a48b9a68c94ccc5716d3c70153 Mon Sep 17 00:00:00 2001 From: Alleysira <56925051+Alleysira@users.noreply.github.com> Date: Thu, 5 Jun 2025 01:55:01 +0800 Subject: [PATCH] fix missing meta in resp of getPeers (#15371) Co-authored-by: james-prysm <90280386+james-prysm@users.noreply.github.com> --- api/server/structs/endpoints_node.go | 6 ++++++ beacon-chain/rpc/eth/node/handlers_peers.go | 14 ++++++++++++-- beacon-chain/rpc/eth/node/handlers_peers_test.go | 2 ++ changelog/Alleysira-fix-meta-in-getPeers-resp.md | 3 +++ 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 changelog/Alleysira-fix-meta-in-getPeers-resp.md diff --git a/api/server/structs/endpoints_node.go b/api/server/structs/endpoints_node.go index f5fe856e64..0d1b9f1e74 100644 --- a/api/server/structs/endpoints_node.go +++ b/api/server/structs/endpoints_node.go @@ -33,8 +33,14 @@ type GetPeerResponse struct { Data *Peer `json:"data"` } +// Added Meta to align with beacon-api: https://ethereum.github.io/beacon-APIs/#/Node/getPeers +type Meta struct { + Count int `json:"count"` +} + type GetPeersResponse struct { Data []*Peer `json:"data"` + Meta Meta `json:"meta"` } type Peer struct { diff --git a/beacon-chain/rpc/eth/node/handlers_peers.go b/beacon-chain/rpc/eth/node/handlers_peers.go index 32ebb5d978..e36d2bd693 100644 --- a/beacon-chain/rpc/eth/node/handlers_peers.go +++ b/beacon-chain/rpc/eth/node/handlers_peers.go @@ -112,7 +112,12 @@ func (s *Server) GetPeers(w http.ResponseWriter, r *http.Request) { } allPeers = append(allPeers, p) } - resp := &structs.GetPeersResponse{Data: allPeers} + resp := &structs.GetPeersResponse{ + Data: allPeers, + Meta: structs.Meta{ + Count: len(allPeers), + }, + } httputil.WriteJson(w, resp) return } @@ -177,7 +182,12 @@ func (s *Server) GetPeers(w http.ResponseWriter, r *http.Request) { filteredPeers = append(filteredPeers, p) } - resp := &structs.GetPeersResponse{Data: filteredPeers} + resp := &structs.GetPeersResponse{ + Data: filteredPeers, + Meta: structs.Meta{ + Count: len(filteredPeers), + }, + } httputil.WriteJson(w, resp) } diff --git a/beacon-chain/rpc/eth/node/handlers_peers_test.go b/beacon-chain/rpc/eth/node/handlers_peers_test.go index abd4a3267a..e6e3e50ff0 100644 --- a/beacon-chain/rpc/eth/node/handlers_peers_test.go +++ b/beacon-chain/rpc/eth/node/handlers_peers_test.go @@ -145,6 +145,7 @@ func TestGetPeers(t *testing.T) { resp := &structs.GetPeersResponse{} require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp)) require.Equal(t, 1, len(resp.Data)) + assert.Equal(t, 1, resp.Meta.Count) returnedPeer := resp.Data[0] assert.Equal(t, expectedId.String(), returnedPeer.PeerId) expectedEnr, err := peerStatus.ENR(expectedId) @@ -229,6 +230,7 @@ func TestGetPeers(t *testing.T) { resp := &structs.GetPeersResponse{} require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp)) assert.Equal(t, len(tt.wantIds), len(resp.Data), "Wrong number of peers returned") + assert.Equal(t, len(tt.wantIds), resp.Meta.Count, "meta.count does not match number of returned peers") for _, id := range tt.wantIds { expectedId := id.String() found := false diff --git a/changelog/Alleysira-fix-meta-in-getPeers-resp.md b/changelog/Alleysira-fix-meta-in-getPeers-resp.md new file mode 100644 index 0000000000..fe2cba98b9 --- /dev/null +++ b/changelog/Alleysira-fix-meta-in-getPeers-resp.md @@ -0,0 +1,3 @@ +### Fixed + +- Added missing `meta` field to the response of the endpoint `/eth/v1/node/peers` to align with the Beacon API spec (#15370) \ No newline at end of file