From 0f565e072fe32170903ca62bf667d73a77f2ffeb Mon Sep 17 00:00:00 2001 From: Willian Paixao Date: Sat, 29 Nov 2025 04:08:45 +0100 Subject: [PATCH 1/2] Add Swagger 2.0 documentation for Prysm API endpoints This commit implements API documentation for all custom Prysm endpoints using swaggo/swag, addressing GitHub issue #12794. Changes: - Added Swagger annotations endpoint handlers - Generated swagger.yaml, swagger.json, and docs.go in /docs directory Swagger generation command: swag init --parseDependency --parseInternal --generalInfo doc.go \ --dir ./beacon-chain/rpc/prysm,./api/server/structs,./network/httputil,./consensus-types/primitives \ --output ./docs Technical notes: - All annotations use simple package names - No handler logic changes, only doc comments added Closes: #12794 Signed-off-by: Willian Paixao --- beacon-chain/rpc/prysm/beacon/handlers.go | 41 + beacon-chain/rpc/prysm/beacon/ssz_query.go | 28 +- .../rpc/prysm/beacon/validator_count.go | 13 + beacon-chain/rpc/prysm/doc.go | 18 + beacon-chain/rpc/prysm/node/handlers.go | 26 + beacon-chain/rpc/prysm/validator/handlers.go | 22 + .../prysm/validator/validator_performance.go | 11 + changelog/willianpaixao_swagger.md | 3 + docs/docs.go | 1181 +++++++++++++++++ docs/swagger.json | 1161 ++++++++++++++++ docs/swagger.yaml | 795 +++++++++++ go.mod | 31 +- go.sum | 89 +- 13 files changed, 3391 insertions(+), 28 deletions(-) create mode 100644 beacon-chain/rpc/prysm/doc.go create mode 100644 changelog/willianpaixao_swagger.md create mode 100644 docs/docs.go create mode 100644 docs/swagger.json create mode 100644 docs/swagger.yaml diff --git a/beacon-chain/rpc/prysm/beacon/handlers.go b/beacon-chain/rpc/prysm/beacon/handlers.go index 3a873d7e5423..b55938a1e9bc 100644 --- a/beacon-chain/rpc/prysm/beacon/handlers.go +++ b/beacon-chain/rpc/prysm/beacon/handlers.go @@ -26,6 +26,15 @@ import ( // GetWeakSubjectivity computes the starting epoch of the current weak subjectivity period, and then also // determines the best block root and state root to use for a Checkpoint Sync starting from that point. +// +// @Summary Get weak subjectivity checkpoint +// @Description Computes the weak subjectivity checkpoint for safe checkpoint sync initialization +// @Tags Prysm Beacon +// @Produce json +// @Success 200 {object} structs.GetWeakSubjectivityResponse +// @Failure 500 {object} httputil.DefaultJsonError +// @Failure 503 {object} httputil.DefaultJsonError "Beacon node is currently syncing" +// @Router /prysm/v1/beacon/weak_subjectivity [get] func (s *Server) GetWeakSubjectivity(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "beacon.GetWeakSubjectivity") defer span.End() @@ -79,6 +88,17 @@ func (s *Server) GetWeakSubjectivity(w http.ResponseWriter, r *http.Request) { } // GetIndividualVotes returns a list of validators individual vote status of a given epoch. +// +// @Summary Get individual validator votes +// @Description Returns detailed voting information for specified validators in a given epoch +// @Tags Prysm Beacon +// @Accept json +// @Produce json +// @Param request body structs.GetIndividualVotesRequest true "Validator indices/public keys and epoch" +// @Success 200 {object} structs.GetIndividualVotesResponse +// @Failure 400 {object} httputil.DefaultJsonError +// @Failure 500 {object} httputil.DefaultJsonError +// @Router /prysm/v1/beacon/individual_votes [post] func (s *Server) GetIndividualVotes(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "validator.GetIndividualVotes") defer span.End() @@ -159,6 +179,14 @@ func (s *Server) GetIndividualVotes(w http.ResponseWriter, r *http.Request) { // GetChainHead retrieves information about the head of the beacon chain from // the view of the beacon chain node. +// +// @Summary Get chain head information +// @Description Returns detailed information about the current head, finalized, and justified checkpoints of the beacon chain +// @Tags Prysm Beacon +// @Produce json +// @Success 200 {object} structs.ChainHead +// @Failure 500 {object} httputil.DefaultJsonError +// @Router /prysm/v1/beacon/chain_head [get] func (s *Server) GetChainHead(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "beacon.GetChainHead") defer span.End() @@ -186,7 +214,20 @@ func (s *Server) GetChainHead(w http.ResponseWriter, r *http.Request) { httputil.WriteJson(w, response) } +// PublishBlobs publishes blob sidecars to the network. // Warning: no longer supported post Fulu blobs +// +// @Summary Publish blob sidecars (DEPRECATED post-Fulu) +// @Description Publishes blob sidecars to the beacon network. Only supported for Deneb through Fulu epochs. +// @Tags Prysm Beacon +// @Accept json +// @Param request body structs.PublishBlobsRequest true "Blob sidecars to publish" +// @Success 200 "Blobs successfully published" +// @Failure 400 {object} httputil.DefaultJsonError +// @Failure 500 {object} httputil.DefaultJsonError +// @Failure 503 {object} httputil.DefaultJsonError "Beacon node is currently syncing" +// @Deprecated +// @Router /prysm/v1/beacon/blobs [post] func (s *Server) PublishBlobs(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "beacon.PublishBlobs") defer span.End() diff --git a/beacon-chain/rpc/prysm/beacon/ssz_query.go b/beacon-chain/rpc/prysm/beacon/ssz_query.go index 30fbfdf16bdd..05af97a540ac 100644 --- a/beacon-chain/rpc/prysm/beacon/ssz_query.go +++ b/beacon-chain/rpc/prysm/beacon/ssz_query.go @@ -19,6 +19,19 @@ import ( // QueryBeaconState handles SSZ Query request for BeaconState. // Returns as bytes serialized SSZQueryResponse. +// +// @Summary Query beacon state with SSZ path +// @Description Executes an SSZ query on a beacon state and returns the result as SSZ-encoded bytes. Allows efficient extraction of specific fields from large state objects. +// @Tags Prysm Beacon +// @Accept json +// @Produce application/octet-stream +// @Param state_id path string true "State identifier (head, genesis, finalized, justified, slot number, or hex root)" +// @Param request body structs.SSZQueryRequest true "SSZ query path (e.g., 'validators[0].pubkey')" +// @Success 200 {string} binary "SSZ-encoded SSZQueryResponse containing root and result" +// @Failure 400 {object} httputil.DefaultJsonError +// @Failure 404 {object} httputil.DefaultJsonError +// @Failure 500 {object} httputil.DefaultJsonError +// @Router /prysm/v1/beacon/states/{state_id}/query [post] func (s *Server) QueryBeaconState(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "beacon.QueryBeaconState") defer span.End() @@ -110,8 +123,21 @@ func (s *Server) QueryBeaconState(w http.ResponseWriter, r *http.Request) { httputil.WriteSsz(w, responseSsz) } -// QueryBeaconState handles SSZ Query request for BeaconState. +// QueryBeaconBlock handles SSZ Query request for BeaconBlock. // Returns as bytes serialized SSZQueryResponse. +// +// @Summary Query beacon block with SSZ path +// @Description Executes an SSZ query on a beacon block and returns the result as SSZ-encoded bytes. Allows efficient extraction of specific fields from block objects. +// @Tags Prysm Beacon +// @Accept json +// @Produce application/octet-stream +// @Param block_id path string true "Block identifier (head, genesis, finalized, slot number, or hex root)" +// @Param request body structs.SSZQueryRequest true "SSZ query path (e.g., 'body.attestations[0]')" +// @Success 200 {string} binary "SSZ-encoded SSZQueryResponse containing root and result" +// @Failure 400 {object} httputil.DefaultJsonError +// @Failure 404 {object} httputil.DefaultJsonError +// @Failure 500 {object} httputil.DefaultJsonError +// @Router /prysm/v1/beacon/blocks/{block_id}/query [post] func (s *Server) QueryBeaconBlock(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "beacon.QueryBeaconBlock") defer span.End() diff --git a/beacon-chain/rpc/prysm/beacon/validator_count.go b/beacon-chain/rpc/prysm/beacon/validator_count.go index 1735aae99426..a3c87de90e74 100644 --- a/beacon-chain/rpc/prysm/beacon/validator_count.go +++ b/beacon-chain/rpc/prysm/beacon/validator_count.go @@ -48,6 +48,19 @@ import ( // } // ] // } +// +// @Summary Get validator count by status +// @Description Returns the total number of validators grouped by their status (active, pending, exited, withdrawal, etc.) for a given state +// @Tags Prysm Beacon +// @Produce json +// @Param state_id path string true "State identifier (head, genesis, finalized, justified, slot number, or hex root)" +// @Param status query []string false "Validator status filter (can be repeated). If omitted, returns counts for all statuses. Valid values: pending_initialized, pending_queued, active_ongoing, active_exiting, active_slashed, exited_unslashed, exited_slashed, withdrawal_possible, withdrawal_done, active, pending, exited, withdrawal" +// @Success 200 {object} structs.GetValidatorCountResponse +// @Failure 400 {object} httputil.DefaultJsonError +// @Failure 404 {object} httputil.DefaultJsonError +// @Failure 500 {object} httputil.DefaultJsonError +// @Router /prysm/v1/beacon/states/{state_id}/validator_count [get] +// @Router /eth/v1/beacon/states/{state_id}/validator_count [get] func (s *Server) GetValidatorCount(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "beacon.GetValidatorCount") defer span.End() diff --git a/beacon-chain/rpc/prysm/doc.go b/beacon-chain/rpc/prysm/doc.go new file mode 100644 index 000000000000..ac2062ba099f --- /dev/null +++ b/beacon-chain/rpc/prysm/doc.go @@ -0,0 +1,18 @@ +// Package prysm provides custom Prysm beacon node API endpoints. +// +// @title Prysm Beacon Node Custom API +// @version 1.0 +// @description Custom Prysm endpoints for beacon node operations, validator metrics, and extended functionality. +// @description These endpoints extend the standard Ethereum Beacon Node API with Prysm-specific features. +// +// @contact.name Prysm Team +// @contact.url https://github.com/OffchainLabs/prysm +// +// @license.name GPL-3.0 +// @license.url https://github.com/OffchainLabs/prysm/blob/develop/LICENSE.md +// +// @host localhost:3500 +// @BasePath / +// +// @schemes http https +package prysm diff --git a/beacon-chain/rpc/prysm/node/handlers.go b/beacon-chain/rpc/prysm/node/handlers.go index 0eaea34be587..8de9c8d93752 100644 --- a/beacon-chain/rpc/prysm/node/handlers.go +++ b/beacon-chain/rpc/prysm/node/handlers.go @@ -19,6 +19,14 @@ import ( ) // ListTrustedPeer retrieves data about the node's trusted peers. +// +// @Summary List trusted peers +// @Description Returns a list of all trusted peers configured on this beacon node, including their connection state, direction, ENR, and last seen address +// @Tags Prysm Node +// @Produce json +// @Success 200 {object} structs.PeersResponse +// @Failure 500 {object} httputil.DefaultJsonError +// @Router /prysm/node/trusted_peers [get] func (s *Server) ListTrustedPeer(w http.ResponseWriter, r *http.Request) { _, span := trace.StartSpan(r.Context(), "node.ListTrustedPeer") defer span.End() @@ -53,6 +61,16 @@ func (s *Server) ListTrustedPeer(w http.ResponseWriter, r *http.Request) { } // AddTrustedPeer adds a new peer into node's trusted peer set by Multiaddr +// +// @Summary Add a trusted peer +// @Description Adds a peer to the beacon node's trusted peer set using its multiaddress. Trusted peers are given priority in peer connections. +// @Tags Prysm Node +// @Accept json +// @Param request body structs.AddrRequest true "Peer multiaddress (e.g., /ip4/127.0.0.1/tcp/13000/p2p/16Uiu2...)" +// @Success 200 "Peer successfully added to trusted set" +// @Failure 400 {object} httputil.DefaultJsonError +// @Failure 500 {object} httputil.DefaultJsonError +// @Router /prysm/node/trusted_peers [post] func (s *Server) AddTrustedPeer(w http.ResponseWriter, r *http.Request) { _, span := trace.StartSpan(r.Context(), "node.AddTrustedPeer") defer span.End() @@ -101,6 +119,14 @@ func (s *Server) AddTrustedPeer(w http.ResponseWriter, r *http.Request) { } // RemoveTrustedPeer removes peer from our trusted peer set but does not close connection. +// +// @Summary Remove a trusted peer +// @Description Removes a peer from the beacon node's trusted peer set by peer ID. Does not disconnect the peer if already connected. +// @Tags Prysm Node +// @Param peer_id path string true "Peer ID to remove from trusted set" +// @Success 200 "Peer successfully removed from trusted set" +// @Failure 400 {object} httputil.DefaultJsonError +// @Router /prysm/node/trusted_peers/{peer_id} [delete] func (s *Server) RemoveTrustedPeer(w http.ResponseWriter, r *http.Request) { _, span := trace.StartSpan(r.Context(), "node.RemoveTrustedPeer") defer span.End() diff --git a/beacon-chain/rpc/prysm/validator/handlers.go b/beacon-chain/rpc/prysm/validator/handlers.go index 6b60b89f2a32..0cc24460bc9a 100644 --- a/beacon-chain/rpc/prysm/validator/handlers.go +++ b/beacon-chain/rpc/prysm/validator/handlers.go @@ -17,6 +17,17 @@ import ( // GetParticipation retrieves the validator participation information for a given epoch, // it returns the information about validator's participation rate in voting on the proof of stake // rules based on their balance compared to the total active validator balance. +// +// @Summary Get validator participation for an epoch +// @Description Returns participation rate information for validators at a given state, including voting statistics and balance information for current and previous epochs +// @Tags Prysm Validator +// @Produce json +// @Param state_id path string true "State identifier (head, genesis, finalized, justified, slot number, or hex root)" +// @Success 200 {object} structs.GetValidatorParticipationResponse +// @Failure 400 {object} httputil.DefaultJsonError +// @Failure 404 {object} httputil.DefaultJsonError +// @Failure 500 {object} httputil.DefaultJsonError +// @Router /prysm/v1/validators/{state_id}/participation [get] func (s *Server) GetParticipation(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "validator.GetParticipation") defer span.End() @@ -62,6 +73,17 @@ func (s *Server) GetParticipation(w http.ResponseWriter, r *http.Request) { // // This data includes any activations, voluntary exits, and involuntary // ejections. +// +// @Summary Get active validator set changes +// @Description Returns validator set changes for a given epoch including activations, voluntary exits, slashings, and ejections with both public keys and indices +// @Tags Prysm Validator +// @Produce json +// @Param state_id path string true "State identifier (head, genesis, finalized, justified, slot number, or hex root)" +// @Success 200 {object} structs.ActiveSetChanges +// @Failure 400 {object} httputil.DefaultJsonError +// @Failure 404 {object} httputil.DefaultJsonError +// @Failure 500 {object} httputil.DefaultJsonError +// @Router /prysm/v1/validators/{state_id}/active_set_changes [get] func (s *Server) GetActiveSetChanges(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "validator.GetActiveSetChanges") defer span.End() diff --git a/beacon-chain/rpc/prysm/validator/validator_performance.go b/beacon-chain/rpc/prysm/validator/validator_performance.go index 29334068a342..f8f8e2417ed1 100644 --- a/beacon-chain/rpc/prysm/validator/validator_performance.go +++ b/beacon-chain/rpc/prysm/validator/validator_performance.go @@ -14,6 +14,17 @@ import ( ) // GetPerformance is an HTTP handler for GetPerformance. +// +// @Summary Get validator performance metrics +// @Description Returns detailed performance metrics for specified validators including voting accuracy, balances before and after epoch transitions, and inactivity scores +// @Tags Prysm Validator +// @Accept json +// @Produce json +// @Param request body structs.GetValidatorPerformanceRequest true "Validator public keys and/or indices to query" +// @Success 200 {object} structs.GetValidatorPerformanceResponse +// @Failure 400 {object} httputil.DefaultJsonError +// @Failure 500 {object} httputil.DefaultJsonError +// @Router /prysm/validators/performance [post] func (s *Server) GetPerformance(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "validator.GetPerformance") defer span.End() diff --git a/changelog/willianpaixao_swagger.md b/changelog/willianpaixao_swagger.md new file mode 100644 index 000000000000..54c62a830dc5 --- /dev/null +++ b/changelog/willianpaixao_swagger.md @@ -0,0 +1,3 @@ +### Added + +- Added Swagger 2.0 documentation for all Prysm API endpoints, including machine-readable OpenAPI specifications (swagger.yaml, swagger.json) diff --git a/docs/docs.go b/docs/docs.go new file mode 100644 index 000000000000..6b3c0ef6f391 --- /dev/null +++ b/docs/docs.go @@ -0,0 +1,1181 @@ +// Package docs Code generated by swaggo/swag. DO NOT EDIT +package docs + +import "github.com/swaggo/swag" + +const docTemplate = `{ + "schemes": {{ marshal .Schemes }}, + "swagger": "2.0", + "info": { + "description": "{{escape .Description}}", + "title": "{{.Title}}", + "contact": { + "name": "Prysm Team", + "url": "https://github.com/OffchainLabs/prysm" + }, + "license": { + "name": "GPL-3.0", + "url": "https://github.com/OffchainLabs/prysm/blob/develop/LICENSE.md" + }, + "version": "{{.Version}}" + }, + "host": "{{.Host}}", + "basePath": "{{.BasePath}}", + "paths": { + "/eth/v1/beacon/states/{state_id}/validator_count": { + "get": { + "description": "Returns the total number of validators grouped by their status (active, pending, exited, withdrawal, etc.) for a given state", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Get validator count by status", + "parameters": [ + { + "type": "string", + "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", + "name": "state_id", + "in": "path", + "required": true + }, + { + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv", + "description": "Validator status filter (can be repeated). If omitted, returns counts for all statuses. Valid values: pending_initialized, pending_queued, active_ongoing, active_exiting, active_slashed, exited_unslashed, exited_slashed, withdrawal_possible, withdrawal_done, active, pending, exited, withdrawal", + "name": "status", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetValidatorCountResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/node/trusted_peers": { + "get": { + "description": "Returns a list of all trusted peers configured on this beacon node, including their connection state, direction, ENR, and last seen address", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Node" + ], + "summary": "List trusted peers", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.PeersResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + }, + "post": { + "description": "Adds a peer to the beacon node's trusted peer set using its multiaddress. Trusted peers are given priority in peer connections.", + "consumes": [ + "application/json" + ], + "tags": [ + "Prysm Node" + ], + "summary": "Add a trusted peer", + "parameters": [ + { + "description": "Peer multiaddress (e.g., /ip4/127.0.0.1/tcp/13000/p2p/16Uiu2...)", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.AddrRequest" + } + } + ], + "responses": { + "200": { + "description": "Peer successfully added to trusted set" + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/node/trusted_peers/{peer_id}": { + "delete": { + "description": "Removes a peer from the beacon node's trusted peer set by peer ID. Does not disconnect the peer if already connected.", + "tags": [ + "Prysm Node" + ], + "summary": "Remove a trusted peer", + "parameters": [ + { + "type": "string", + "description": "Peer ID to remove from trusted set", + "name": "peer_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Peer successfully removed from trusted set" + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/blobs": { + "post": { + "description": "Publishes blob sidecars to the beacon network. Only supported for Deneb through Fulu epochs.", + "consumes": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Publish blob sidecars (DEPRECATED post-Fulu)", + "deprecated": true, + "parameters": [ + { + "description": "Blob sidecars to publish", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.PublishBlobsRequest" + } + } + ], + "responses": { + "200": { + "description": "Blobs successfully published" + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "503": { + "description": "Beacon node is currently syncing", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/blocks/{block_id}/query": { + "post": { + "description": "Executes an SSZ query on a beacon block and returns the result as SSZ-encoded bytes. Allows efficient extraction of specific fields from block objects.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Query beacon block with SSZ path", + "parameters": [ + { + "type": "string", + "description": "Block identifier (head, genesis, finalized, slot number, or hex root)", + "name": "block_id", + "in": "path", + "required": true + }, + { + "description": "SSZ query path (e.g., 'body.attestations[0]')", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.SSZQueryRequest" + } + } + ], + "responses": { + "200": { + "description": "SSZ-encoded SSZQueryResponse containing root and result", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/chain_head": { + "get": { + "description": "Returns detailed information about the current head, finalized, and justified checkpoints of the beacon chain", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Get chain head information", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.ChainHead" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/individual_votes": { + "post": { + "description": "Returns detailed voting information for specified validators in a given epoch", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Get individual validator votes", + "parameters": [ + { + "description": "Validator indices/public keys and epoch", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.GetIndividualVotesRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetIndividualVotesResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/states/{state_id}/query": { + "post": { + "description": "Executes an SSZ query on a beacon state and returns the result as SSZ-encoded bytes. Allows efficient extraction of specific fields from large state objects.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Query beacon state with SSZ path", + "parameters": [ + { + "type": "string", + "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", + "name": "state_id", + "in": "path", + "required": true + }, + { + "description": "SSZ query path (e.g., 'validators[0].pubkey')", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.SSZQueryRequest" + } + } + ], + "responses": { + "200": { + "description": "SSZ-encoded SSZQueryResponse containing root and result", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/states/{state_id}/validator_count": { + "get": { + "description": "Returns the total number of validators grouped by their status (active, pending, exited, withdrawal, etc.) for a given state", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Get validator count by status", + "parameters": [ + { + "type": "string", + "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", + "name": "state_id", + "in": "path", + "required": true + }, + { + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv", + "description": "Validator status filter (can be repeated). If omitted, returns counts for all statuses. Valid values: pending_initialized, pending_queued, active_ongoing, active_exiting, active_slashed, exited_unslashed, exited_slashed, withdrawal_possible, withdrawal_done, active, pending, exited, withdrawal", + "name": "status", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetValidatorCountResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/weak_subjectivity": { + "get": { + "description": "Computes the weak subjectivity checkpoint for safe checkpoint sync initialization", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Get weak subjectivity checkpoint", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetWeakSubjectivityResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "503": { + "description": "Beacon node is currently syncing", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/validators/{state_id}/active_set_changes": { + "get": { + "description": "Returns validator set changes for a given epoch including activations, voluntary exits, slashings, and ejections with both public keys and indices", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Validator" + ], + "summary": "Get active validator set changes", + "parameters": [ + { + "type": "string", + "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", + "name": "state_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.ActiveSetChanges" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/validators/{state_id}/participation": { + "get": { + "description": "Returns participation rate information for validators at a given state, including voting statistics and balance information for current and previous epochs", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Validator" + ], + "summary": "Get validator participation for an epoch", + "parameters": [ + { + "type": "string", + "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", + "name": "state_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetValidatorParticipationResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/validators/performance": { + "post": { + "description": "Returns detailed performance metrics for specified validators including voting accuracy, balances before and after epoch transitions, and inactivity scores", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Validator" + ], + "summary": "Get validator performance metrics", + "parameters": [ + { + "description": "Validator public keys and/or indices to query", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.GetValidatorPerformanceRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetValidatorPerformanceResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + } + }, + "definitions": { + "httputil.DefaultJsonError": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "structs.ActiveSetChanges": { + "type": "object", + "properties": { + "activated_indices": { + "type": "array", + "items": { + "type": "string" + } + }, + "activated_public_keys": { + "type": "array", + "items": { + "type": "string" + } + }, + "ejected_indices": { + "type": "array", + "items": { + "type": "string" + } + }, + "ejected_public_keys": { + "type": "array", + "items": { + "type": "string" + } + }, + "epoch": { + "type": "string" + }, + "exited_indices": { + "type": "array", + "items": { + "type": "string" + } + }, + "exited_public_keys": { + "type": "array", + "items": { + "type": "string" + } + }, + "slashed_indices": { + "type": "array", + "items": { + "type": "string" + } + }, + "slashed_public_keys": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "structs.AddrRequest": { + "type": "object", + "properties": { + "addr": { + "type": "string" + } + } + }, + "structs.BeaconBlockHeader": { + "type": "object", + "properties": { + "body_root": { + "type": "string" + }, + "parent_root": { + "type": "string" + }, + "proposer_index": { + "type": "string" + }, + "slot": { + "type": "string" + }, + "state_root": { + "type": "string" + } + } + }, + "structs.BlobSidecars": { + "type": "object", + "properties": { + "sidecars": { + "type": "array", + "items": { + "$ref": "#/definitions/structs.Sidecar" + } + } + } + }, + "structs.ChainHead": { + "type": "object", + "properties": { + "finalized_block_root": { + "type": "string" + }, + "finalized_epoch": { + "type": "string" + }, + "finalized_slot": { + "type": "string" + }, + "head_block_root": { + "type": "string" + }, + "head_epoch": { + "type": "string" + }, + "head_slot": { + "type": "string" + }, + "justified_block_root": { + "type": "string" + }, + "justified_epoch": { + "type": "string" + }, + "justified_slot": { + "type": "string" + }, + "optimistic_status": { + "type": "boolean" + }, + "previous_justified_block_root": { + "type": "string" + }, + "previous_justified_epoch": { + "type": "string" + }, + "previous_justified_slot": { + "type": "string" + } + } + }, + "structs.Checkpoint": { + "type": "object", + "properties": { + "epoch": { + "type": "string" + }, + "root": { + "type": "string" + } + } + }, + "structs.GetIndividualVotesRequest": { + "type": "object", + "properties": { + "epoch": { + "type": "string" + }, + "indices": { + "type": "array", + "items": { + "type": "string" + } + }, + "public_keys": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "structs.GetIndividualVotesResponse": { + "type": "object", + "properties": { + "individual_votes": { + "type": "array", + "items": { + "$ref": "#/definitions/structs.IndividualVote" + } + } + } + }, + "structs.GetValidatorCountResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/structs.ValidatorCount" + } + }, + "execution_optimistic": { + "type": "string" + }, + "finalized": { + "type": "string" + } + } + }, + "structs.GetValidatorParticipationResponse": { + "type": "object", + "properties": { + "epoch": { + "type": "string" + }, + "finalized": { + "type": "boolean" + }, + "participation": { + "$ref": "#/definitions/structs.ValidatorParticipation" + } + } + }, + "structs.GetValidatorPerformanceRequest": { + "type": "object", + "properties": { + "indices": { + "type": "array", + "items": { + "type": "integer" + } + }, + "public_keys": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "structs.GetValidatorPerformanceResponse": { + "type": "object", + "properties": { + "balances_after_epoch_transition": { + "type": "array", + "items": { + "type": "integer" + } + }, + "balances_before_epoch_transition": { + "type": "array", + "items": { + "type": "integer" + } + }, + "correctly_voted_head": { + "type": "array", + "items": { + "type": "boolean" + } + }, + "correctly_voted_source": { + "type": "array", + "items": { + "type": "boolean" + } + }, + "correctly_voted_target": { + "type": "array", + "items": { + "type": "boolean" + } + }, + "current_effective_balances": { + "type": "array", + "items": { + "type": "integer" + } + }, + "inactivity_scores": { + "type": "array", + "items": { + "type": "integer" + } + }, + "missing_validators": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + "public_keys": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "structs.GetWeakSubjectivityResponse": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/structs.WeakSubjectivityData" + } + } + }, + "structs.IndividualVote": { + "type": "object", + "properties": { + "current_epoch_effective_balance_gwei": { + "type": "string" + }, + "epoch": { + "type": "string" + }, + "inactivity_score": { + "type": "string" + }, + "inclusion_distance": { + "type": "string" + }, + "inclusion_slot": { + "type": "string" + }, + "is_active_in_current_epoch": { + "type": "boolean" + }, + "is_active_in_previous_epoch": { + "type": "boolean" + }, + "is_current_epoch_attester": { + "type": "boolean" + }, + "is_current_epoch_target_attester": { + "type": "boolean" + }, + "is_previous_epoch_attester": { + "type": "boolean" + }, + "is_previous_epoch_head_attester": { + "type": "boolean" + }, + "is_previous_epoch_target_attester": { + "type": "boolean" + }, + "is_slashed": { + "type": "boolean" + }, + "is_withdrawable_in_current_epoch": { + "type": "boolean" + }, + "public_keys": { + "type": "string" + }, + "validator_index": { + "type": "string" + } + } + }, + "structs.Peer": { + "type": "object", + "properties": { + "direction": { + "type": "string" + }, + "enr": { + "type": "string" + }, + "last_seen_p2p_address": { + "type": "string" + }, + "peer_id": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "structs.PeersResponse": { + "type": "object", + "properties": { + "peers": { + "type": "array", + "items": { + "$ref": "#/definitions/structs.Peer" + } + } + } + }, + "structs.PublishBlobsRequest": { + "type": "object", + "properties": { + "blob_sidecars": { + "$ref": "#/definitions/structs.BlobSidecars" + }, + "block_root": { + "type": "string" + } + } + }, + "structs.SSZQueryRequest": { + "type": "object", + "properties": { + "include_proof": { + "type": "boolean" + }, + "query": { + "type": "string" + } + } + }, + "structs.Sidecar": { + "type": "object", + "properties": { + "blob": { + "type": "string" + }, + "index": { + "type": "string" + }, + "kzg_commitment": { + "type": "string" + }, + "kzg_commitment_inclusion_proof": { + "type": "array", + "items": { + "type": "string" + } + }, + "kzg_proof": { + "type": "string" + }, + "signed_block_header": { + "$ref": "#/definitions/structs.SignedBeaconBlockHeader" + } + } + }, + "structs.SignedBeaconBlockHeader": { + "type": "object", + "properties": { + "message": { + "$ref": "#/definitions/structs.BeaconBlockHeader" + }, + "signature": { + "type": "string" + } + } + }, + "structs.ValidatorCount": { + "type": "object", + "properties": { + "count": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "structs.ValidatorParticipation": { + "type": "object", + "properties": { + "current_epoch_active_gwei": { + "type": "string" + }, + "current_epoch_attesting_gwei": { + "type": "string" + }, + "current_epoch_target_attesting_gwei": { + "type": "string" + }, + "eligible_ether": { + "type": "string" + }, + "global_participation_rate": { + "type": "string" + }, + "previous_epoch_active_gwei": { + "type": "string" + }, + "previous_epoch_attesting_gwei": { + "type": "string" + }, + "previous_epoch_head_attesting_gwei": { + "type": "string" + }, + "previous_epoch_target_attesting_gwei": { + "type": "string" + }, + "voted_ether": { + "type": "string" + } + } + }, + "structs.WeakSubjectivityData": { + "type": "object", + "properties": { + "state_root": { + "type": "string" + }, + "ws_checkpoint": { + "$ref": "#/definitions/structs.Checkpoint" + } + } + } + } +}` + +// SwaggerInfo holds exported Swagger Info so clients can modify it +var SwaggerInfo = &swag.Spec{ + Version: "1.0", + Host: "localhost:3500", + BasePath: "/", + Schemes: []string{"http", "https"}, + Title: "Prysm Beacon Node Custom API", + Description: "Custom Prysm endpoints for beacon node operations, validator metrics, and extended functionality.\nThese endpoints extend the standard Ethereum Beacon Node API with Prysm-specific features.", + InfoInstanceName: "swagger", + SwaggerTemplate: docTemplate, + LeftDelim: "{{", + RightDelim: "}}", +} + +func init() { + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) +} diff --git a/docs/swagger.json b/docs/swagger.json new file mode 100644 index 000000000000..56fb97079f1f --- /dev/null +++ b/docs/swagger.json @@ -0,0 +1,1161 @@ +{ + "schemes": [ + "http", + "https" + ], + "swagger": "2.0", + "info": { + "description": "Custom Prysm endpoints for beacon node operations, validator metrics, and extended functionality.\nThese endpoints extend the standard Ethereum Beacon Node API with Prysm-specific features.", + "title": "Prysm Beacon Node Custom API", + "contact": { + "name": "Prysm Team", + "url": "https://github.com/OffchainLabs/prysm" + }, + "license": { + "name": "GPL-3.0", + "url": "https://github.com/OffchainLabs/prysm/blob/develop/LICENSE.md" + }, + "version": "1.0" + }, + "host": "localhost:3500", + "basePath": "/", + "paths": { + "/eth/v1/beacon/states/{state_id}/validator_count": { + "get": { + "description": "Returns the total number of validators grouped by their status (active, pending, exited, withdrawal, etc.) for a given state", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Get validator count by status", + "parameters": [ + { + "type": "string", + "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", + "name": "state_id", + "in": "path", + "required": true + }, + { + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv", + "description": "Validator status filter (can be repeated). If omitted, returns counts for all statuses. Valid values: pending_initialized, pending_queued, active_ongoing, active_exiting, active_slashed, exited_unslashed, exited_slashed, withdrawal_possible, withdrawal_done, active, pending, exited, withdrawal", + "name": "status", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetValidatorCountResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/node/trusted_peers": { + "get": { + "description": "Returns a list of all trusted peers configured on this beacon node, including their connection state, direction, ENR, and last seen address", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Node" + ], + "summary": "List trusted peers", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.PeersResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + }, + "post": { + "description": "Adds a peer to the beacon node's trusted peer set using its multiaddress. Trusted peers are given priority in peer connections.", + "consumes": [ + "application/json" + ], + "tags": [ + "Prysm Node" + ], + "summary": "Add a trusted peer", + "parameters": [ + { + "description": "Peer multiaddress (e.g., /ip4/127.0.0.1/tcp/13000/p2p/16Uiu2...)", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.AddrRequest" + } + } + ], + "responses": { + "200": { + "description": "Peer successfully added to trusted set" + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/node/trusted_peers/{peer_id}": { + "delete": { + "description": "Removes a peer from the beacon node's trusted peer set by peer ID. Does not disconnect the peer if already connected.", + "tags": [ + "Prysm Node" + ], + "summary": "Remove a trusted peer", + "parameters": [ + { + "type": "string", + "description": "Peer ID to remove from trusted set", + "name": "peer_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Peer successfully removed from trusted set" + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/blobs": { + "post": { + "description": "Publishes blob sidecars to the beacon network. Only supported for Deneb through Fulu epochs.", + "consumes": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Publish blob sidecars (DEPRECATED post-Fulu)", + "deprecated": true, + "parameters": [ + { + "description": "Blob sidecars to publish", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.PublishBlobsRequest" + } + } + ], + "responses": { + "200": { + "description": "Blobs successfully published" + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "503": { + "description": "Beacon node is currently syncing", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/blocks/{block_id}/query": { + "post": { + "description": "Executes an SSZ query on a beacon block and returns the result as SSZ-encoded bytes. Allows efficient extraction of specific fields from block objects.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Query beacon block with SSZ path", + "parameters": [ + { + "type": "string", + "description": "Block identifier (head, genesis, finalized, slot number, or hex root)", + "name": "block_id", + "in": "path", + "required": true + }, + { + "description": "SSZ query path (e.g., 'body.attestations[0]')", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.SSZQueryRequest" + } + } + ], + "responses": { + "200": { + "description": "SSZ-encoded SSZQueryResponse containing root and result", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/chain_head": { + "get": { + "description": "Returns detailed information about the current head, finalized, and justified checkpoints of the beacon chain", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Get chain head information", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.ChainHead" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/individual_votes": { + "post": { + "description": "Returns detailed voting information for specified validators in a given epoch", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Get individual validator votes", + "parameters": [ + { + "description": "Validator indices/public keys and epoch", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.GetIndividualVotesRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetIndividualVotesResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/states/{state_id}/query": { + "post": { + "description": "Executes an SSZ query on a beacon state and returns the result as SSZ-encoded bytes. Allows efficient extraction of specific fields from large state objects.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Query beacon state with SSZ path", + "parameters": [ + { + "type": "string", + "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", + "name": "state_id", + "in": "path", + "required": true + }, + { + "description": "SSZ query path (e.g., 'validators[0].pubkey')", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.SSZQueryRequest" + } + } + ], + "responses": { + "200": { + "description": "SSZ-encoded SSZQueryResponse containing root and result", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/states/{state_id}/validator_count": { + "get": { + "description": "Returns the total number of validators grouped by their status (active, pending, exited, withdrawal, etc.) for a given state", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Get validator count by status", + "parameters": [ + { + "type": "string", + "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", + "name": "state_id", + "in": "path", + "required": true + }, + { + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv", + "description": "Validator status filter (can be repeated). If omitted, returns counts for all statuses. Valid values: pending_initialized, pending_queued, active_ongoing, active_exiting, active_slashed, exited_unslashed, exited_slashed, withdrawal_possible, withdrawal_done, active, pending, exited, withdrawal", + "name": "status", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetValidatorCountResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/beacon/weak_subjectivity": { + "get": { + "description": "Computes the weak subjectivity checkpoint for safe checkpoint sync initialization", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Beacon" + ], + "summary": "Get weak subjectivity checkpoint", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetWeakSubjectivityResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "503": { + "description": "Beacon node is currently syncing", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/validators/{state_id}/active_set_changes": { + "get": { + "description": "Returns validator set changes for a given epoch including activations, voluntary exits, slashings, and ejections with both public keys and indices", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Validator" + ], + "summary": "Get active validator set changes", + "parameters": [ + { + "type": "string", + "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", + "name": "state_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.ActiveSetChanges" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/v1/validators/{state_id}/participation": { + "get": { + "description": "Returns participation rate information for validators at a given state, including voting statistics and balance information for current and previous epochs", + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Validator" + ], + "summary": "Get validator participation for an epoch", + "parameters": [ + { + "type": "string", + "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", + "name": "state_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetValidatorParticipationResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + }, + "/prysm/validators/performance": { + "post": { + "description": "Returns detailed performance metrics for specified validators including voting accuracy, balances before and after epoch transitions, and inactivity scores", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Prysm Validator" + ], + "summary": "Get validator performance metrics", + "parameters": [ + { + "description": "Validator public keys and/or indices to query", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/structs.GetValidatorPerformanceRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/structs.GetValidatorPerformanceResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputil.DefaultJsonError" + } + } + } + } + } + }, + "definitions": { + "httputil.DefaultJsonError": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "structs.ActiveSetChanges": { + "type": "object", + "properties": { + "activated_indices": { + "type": "array", + "items": { + "type": "string" + } + }, + "activated_public_keys": { + "type": "array", + "items": { + "type": "string" + } + }, + "ejected_indices": { + "type": "array", + "items": { + "type": "string" + } + }, + "ejected_public_keys": { + "type": "array", + "items": { + "type": "string" + } + }, + "epoch": { + "type": "string" + }, + "exited_indices": { + "type": "array", + "items": { + "type": "string" + } + }, + "exited_public_keys": { + "type": "array", + "items": { + "type": "string" + } + }, + "slashed_indices": { + "type": "array", + "items": { + "type": "string" + } + }, + "slashed_public_keys": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "structs.AddrRequest": { + "type": "object", + "properties": { + "addr": { + "type": "string" + } + } + }, + "structs.BeaconBlockHeader": { + "type": "object", + "properties": { + "body_root": { + "type": "string" + }, + "parent_root": { + "type": "string" + }, + "proposer_index": { + "type": "string" + }, + "slot": { + "type": "string" + }, + "state_root": { + "type": "string" + } + } + }, + "structs.BlobSidecars": { + "type": "object", + "properties": { + "sidecars": { + "type": "array", + "items": { + "$ref": "#/definitions/structs.Sidecar" + } + } + } + }, + "structs.ChainHead": { + "type": "object", + "properties": { + "finalized_block_root": { + "type": "string" + }, + "finalized_epoch": { + "type": "string" + }, + "finalized_slot": { + "type": "string" + }, + "head_block_root": { + "type": "string" + }, + "head_epoch": { + "type": "string" + }, + "head_slot": { + "type": "string" + }, + "justified_block_root": { + "type": "string" + }, + "justified_epoch": { + "type": "string" + }, + "justified_slot": { + "type": "string" + }, + "optimistic_status": { + "type": "boolean" + }, + "previous_justified_block_root": { + "type": "string" + }, + "previous_justified_epoch": { + "type": "string" + }, + "previous_justified_slot": { + "type": "string" + } + } + }, + "structs.Checkpoint": { + "type": "object", + "properties": { + "epoch": { + "type": "string" + }, + "root": { + "type": "string" + } + } + }, + "structs.GetIndividualVotesRequest": { + "type": "object", + "properties": { + "epoch": { + "type": "string" + }, + "indices": { + "type": "array", + "items": { + "type": "string" + } + }, + "public_keys": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "structs.GetIndividualVotesResponse": { + "type": "object", + "properties": { + "individual_votes": { + "type": "array", + "items": { + "$ref": "#/definitions/structs.IndividualVote" + } + } + } + }, + "structs.GetValidatorCountResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/structs.ValidatorCount" + } + }, + "execution_optimistic": { + "type": "string" + }, + "finalized": { + "type": "string" + } + } + }, + "structs.GetValidatorParticipationResponse": { + "type": "object", + "properties": { + "epoch": { + "type": "string" + }, + "finalized": { + "type": "boolean" + }, + "participation": { + "$ref": "#/definitions/structs.ValidatorParticipation" + } + } + }, + "structs.GetValidatorPerformanceRequest": { + "type": "object", + "properties": { + "indices": { + "type": "array", + "items": { + "type": "integer" + } + }, + "public_keys": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "structs.GetValidatorPerformanceResponse": { + "type": "object", + "properties": { + "balances_after_epoch_transition": { + "type": "array", + "items": { + "type": "integer" + } + }, + "balances_before_epoch_transition": { + "type": "array", + "items": { + "type": "integer" + } + }, + "correctly_voted_head": { + "type": "array", + "items": { + "type": "boolean" + } + }, + "correctly_voted_source": { + "type": "array", + "items": { + "type": "boolean" + } + }, + "correctly_voted_target": { + "type": "array", + "items": { + "type": "boolean" + } + }, + "current_effective_balances": { + "type": "array", + "items": { + "type": "integer" + } + }, + "inactivity_scores": { + "type": "array", + "items": { + "type": "integer" + } + }, + "missing_validators": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + "public_keys": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "structs.GetWeakSubjectivityResponse": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/structs.WeakSubjectivityData" + } + } + }, + "structs.IndividualVote": { + "type": "object", + "properties": { + "current_epoch_effective_balance_gwei": { + "type": "string" + }, + "epoch": { + "type": "string" + }, + "inactivity_score": { + "type": "string" + }, + "inclusion_distance": { + "type": "string" + }, + "inclusion_slot": { + "type": "string" + }, + "is_active_in_current_epoch": { + "type": "boolean" + }, + "is_active_in_previous_epoch": { + "type": "boolean" + }, + "is_current_epoch_attester": { + "type": "boolean" + }, + "is_current_epoch_target_attester": { + "type": "boolean" + }, + "is_previous_epoch_attester": { + "type": "boolean" + }, + "is_previous_epoch_head_attester": { + "type": "boolean" + }, + "is_previous_epoch_target_attester": { + "type": "boolean" + }, + "is_slashed": { + "type": "boolean" + }, + "is_withdrawable_in_current_epoch": { + "type": "boolean" + }, + "public_keys": { + "type": "string" + }, + "validator_index": { + "type": "string" + } + } + }, + "structs.Peer": { + "type": "object", + "properties": { + "direction": { + "type": "string" + }, + "enr": { + "type": "string" + }, + "last_seen_p2p_address": { + "type": "string" + }, + "peer_id": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "structs.PeersResponse": { + "type": "object", + "properties": { + "peers": { + "type": "array", + "items": { + "$ref": "#/definitions/structs.Peer" + } + } + } + }, + "structs.PublishBlobsRequest": { + "type": "object", + "properties": { + "blob_sidecars": { + "$ref": "#/definitions/structs.BlobSidecars" + }, + "block_root": { + "type": "string" + } + } + }, + "structs.SSZQueryRequest": { + "type": "object", + "properties": { + "include_proof": { + "type": "boolean" + }, + "query": { + "type": "string" + } + } + }, + "structs.Sidecar": { + "type": "object", + "properties": { + "blob": { + "type": "string" + }, + "index": { + "type": "string" + }, + "kzg_commitment": { + "type": "string" + }, + "kzg_commitment_inclusion_proof": { + "type": "array", + "items": { + "type": "string" + } + }, + "kzg_proof": { + "type": "string" + }, + "signed_block_header": { + "$ref": "#/definitions/structs.SignedBeaconBlockHeader" + } + } + }, + "structs.SignedBeaconBlockHeader": { + "type": "object", + "properties": { + "message": { + "$ref": "#/definitions/structs.BeaconBlockHeader" + }, + "signature": { + "type": "string" + } + } + }, + "structs.ValidatorCount": { + "type": "object", + "properties": { + "count": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "structs.ValidatorParticipation": { + "type": "object", + "properties": { + "current_epoch_active_gwei": { + "type": "string" + }, + "current_epoch_attesting_gwei": { + "type": "string" + }, + "current_epoch_target_attesting_gwei": { + "type": "string" + }, + "eligible_ether": { + "type": "string" + }, + "global_participation_rate": { + "type": "string" + }, + "previous_epoch_active_gwei": { + "type": "string" + }, + "previous_epoch_attesting_gwei": { + "type": "string" + }, + "previous_epoch_head_attesting_gwei": { + "type": "string" + }, + "previous_epoch_target_attesting_gwei": { + "type": "string" + }, + "voted_ether": { + "type": "string" + } + } + }, + "structs.WeakSubjectivityData": { + "type": "object", + "properties": { + "state_root": { + "type": "string" + }, + "ws_checkpoint": { + "$ref": "#/definitions/structs.Checkpoint" + } + } + } + } +} \ No newline at end of file diff --git a/docs/swagger.yaml b/docs/swagger.yaml new file mode 100644 index 000000000000..806624603a10 --- /dev/null +++ b/docs/swagger.yaml @@ -0,0 +1,795 @@ +basePath: / +definitions: + httputil.DefaultJsonError: + properties: + code: + type: integer + message: + type: string + type: object + structs.ActiveSetChanges: + properties: + activated_indices: + items: + type: string + type: array + activated_public_keys: + items: + type: string + type: array + ejected_indices: + items: + type: string + type: array + ejected_public_keys: + items: + type: string + type: array + epoch: + type: string + exited_indices: + items: + type: string + type: array + exited_public_keys: + items: + type: string + type: array + slashed_indices: + items: + type: string + type: array + slashed_public_keys: + items: + type: string + type: array + type: object + structs.AddrRequest: + properties: + addr: + type: string + type: object + structs.BeaconBlockHeader: + properties: + body_root: + type: string + parent_root: + type: string + proposer_index: + type: string + slot: + type: string + state_root: + type: string + type: object + structs.BlobSidecars: + properties: + sidecars: + items: + $ref: '#/definitions/structs.Sidecar' + type: array + type: object + structs.ChainHead: + properties: + finalized_block_root: + type: string + finalized_epoch: + type: string + finalized_slot: + type: string + head_block_root: + type: string + head_epoch: + type: string + head_slot: + type: string + justified_block_root: + type: string + justified_epoch: + type: string + justified_slot: + type: string + optimistic_status: + type: boolean + previous_justified_block_root: + type: string + previous_justified_epoch: + type: string + previous_justified_slot: + type: string + type: object + structs.Checkpoint: + properties: + epoch: + type: string + root: + type: string + type: object + structs.GetIndividualVotesRequest: + properties: + epoch: + type: string + indices: + items: + type: string + type: array + public_keys: + items: + type: string + type: array + type: object + structs.GetIndividualVotesResponse: + properties: + individual_votes: + items: + $ref: '#/definitions/structs.IndividualVote' + type: array + type: object + structs.GetValidatorCountResponse: + properties: + data: + items: + $ref: '#/definitions/structs.ValidatorCount' + type: array + execution_optimistic: + type: string + finalized: + type: string + type: object + structs.GetValidatorParticipationResponse: + properties: + epoch: + type: string + finalized: + type: boolean + participation: + $ref: '#/definitions/structs.ValidatorParticipation' + type: object + structs.GetValidatorPerformanceRequest: + properties: + indices: + items: + type: integer + type: array + public_keys: + items: + items: + format: int32 + type: integer + type: array + type: array + type: object + structs.GetValidatorPerformanceResponse: + properties: + balances_after_epoch_transition: + items: + type: integer + type: array + balances_before_epoch_transition: + items: + type: integer + type: array + correctly_voted_head: + items: + type: boolean + type: array + correctly_voted_source: + items: + type: boolean + type: array + correctly_voted_target: + items: + type: boolean + type: array + current_effective_balances: + items: + type: integer + type: array + inactivity_scores: + items: + type: integer + type: array + missing_validators: + items: + items: + format: int32 + type: integer + type: array + type: array + public_keys: + items: + items: + format: int32 + type: integer + type: array + type: array + type: object + structs.GetWeakSubjectivityResponse: + properties: + data: + $ref: '#/definitions/structs.WeakSubjectivityData' + type: object + structs.IndividualVote: + properties: + current_epoch_effective_balance_gwei: + type: string + epoch: + type: string + inactivity_score: + type: string + inclusion_distance: + type: string + inclusion_slot: + type: string + is_active_in_current_epoch: + type: boolean + is_active_in_previous_epoch: + type: boolean + is_current_epoch_attester: + type: boolean + is_current_epoch_target_attester: + type: boolean + is_previous_epoch_attester: + type: boolean + is_previous_epoch_head_attester: + type: boolean + is_previous_epoch_target_attester: + type: boolean + is_slashed: + type: boolean + is_withdrawable_in_current_epoch: + type: boolean + public_keys: + type: string + validator_index: + type: string + type: object + structs.Peer: + properties: + direction: + type: string + enr: + type: string + last_seen_p2p_address: + type: string + peer_id: + type: string + state: + type: string + type: object + structs.PeersResponse: + properties: + peers: + items: + $ref: '#/definitions/structs.Peer' + type: array + type: object + structs.PublishBlobsRequest: + properties: + blob_sidecars: + $ref: '#/definitions/structs.BlobSidecars' + block_root: + type: string + type: object + structs.SSZQueryRequest: + properties: + include_proof: + type: boolean + query: + type: string + type: object + structs.Sidecar: + properties: + blob: + type: string + index: + type: string + kzg_commitment: + type: string + kzg_commitment_inclusion_proof: + items: + type: string + type: array + kzg_proof: + type: string + signed_block_header: + $ref: '#/definitions/structs.SignedBeaconBlockHeader' + type: object + structs.SignedBeaconBlockHeader: + properties: + message: + $ref: '#/definitions/structs.BeaconBlockHeader' + signature: + type: string + type: object + structs.ValidatorCount: + properties: + count: + type: string + status: + type: string + type: object + structs.ValidatorParticipation: + properties: + current_epoch_active_gwei: + type: string + current_epoch_attesting_gwei: + type: string + current_epoch_target_attesting_gwei: + type: string + eligible_ether: + type: string + global_participation_rate: + type: string + previous_epoch_active_gwei: + type: string + previous_epoch_attesting_gwei: + type: string + previous_epoch_head_attesting_gwei: + type: string + previous_epoch_target_attesting_gwei: + type: string + voted_ether: + type: string + type: object + structs.WeakSubjectivityData: + properties: + state_root: + type: string + ws_checkpoint: + $ref: '#/definitions/structs.Checkpoint' + type: object +host: localhost:3500 +info: + contact: + name: Prysm Team + url: https://github.com/OffchainLabs/prysm + description: |- + Custom Prysm endpoints for beacon node operations, validator metrics, and extended functionality. + These endpoints extend the standard Ethereum Beacon Node API with Prysm-specific features. + license: + name: GPL-3.0 + url: https://github.com/OffchainLabs/prysm/blob/develop/LICENSE.md + title: Prysm Beacon Node Custom API + version: "1.0" +paths: + /eth/v1/beacon/states/{state_id}/validator_count: + get: + description: Returns the total number of validators grouped by their status + (active, pending, exited, withdrawal, etc.) for a given state + parameters: + - description: State identifier (head, genesis, finalized, justified, slot number, + or hex root) + in: path + name: state_id + required: true + type: string + - collectionFormat: csv + description: 'Validator status filter (can be repeated). If omitted, returns + counts for all statuses. Valid values: pending_initialized, pending_queued, + active_ongoing, active_exiting, active_slashed, exited_unslashed, exited_slashed, + withdrawal_possible, withdrawal_done, active, pending, exited, withdrawal' + in: query + items: + type: string + name: status + type: array + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/structs.GetValidatorCountResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "404": + description: Not Found + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Get validator count by status + tags: + - Prysm Beacon + /prysm/node/trusted_peers: + get: + description: Returns a list of all trusted peers configured on this beacon node, + including their connection state, direction, ENR, and last seen address + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/structs.PeersResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: List trusted peers + tags: + - Prysm Node + post: + consumes: + - application/json + description: Adds a peer to the beacon node's trusted peer set using its multiaddress. + Trusted peers are given priority in peer connections. + parameters: + - description: Peer multiaddress (e.g., /ip4/127.0.0.1/tcp/13000/p2p/16Uiu2...) + in: body + name: request + required: true + schema: + $ref: '#/definitions/structs.AddrRequest' + responses: + "200": + description: Peer successfully added to trusted set + "400": + description: Bad Request + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Add a trusted peer + tags: + - Prysm Node + /prysm/node/trusted_peers/{peer_id}: + delete: + description: Removes a peer from the beacon node's trusted peer set by peer + ID. Does not disconnect the peer if already connected. + parameters: + - description: Peer ID to remove from trusted set + in: path + name: peer_id + required: true + type: string + responses: + "200": + description: Peer successfully removed from trusted set + "400": + description: Bad Request + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Remove a trusted peer + tags: + - Prysm Node + /prysm/v1/beacon/blobs: + post: + consumes: + - application/json + deprecated: true + description: Publishes blob sidecars to the beacon network. Only supported for + Deneb through Fulu epochs. + parameters: + - description: Blob sidecars to publish + in: body + name: request + required: true + schema: + $ref: '#/definitions/structs.PublishBlobsRequest' + responses: + "200": + description: Blobs successfully published + "400": + description: Bad Request + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "503": + description: Beacon node is currently syncing + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Publish blob sidecars (DEPRECATED post-Fulu) + tags: + - Prysm Beacon + /prysm/v1/beacon/blocks/{block_id}/query: + post: + consumes: + - application/json + description: Executes an SSZ query on a beacon block and returns the result + as SSZ-encoded bytes. Allows efficient extraction of specific fields from + block objects. + parameters: + - description: Block identifier (head, genesis, finalized, slot number, or hex + root) + in: path + name: block_id + required: true + type: string + - description: SSZ query path (e.g., 'body.attestations[0]') + in: body + name: request + required: true + schema: + $ref: '#/definitions/structs.SSZQueryRequest' + produces: + - application/octet-stream + responses: + "200": + description: SSZ-encoded SSZQueryResponse containing root and result + schema: + type: string + "400": + description: Bad Request + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "404": + description: Not Found + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Query beacon block with SSZ path + tags: + - Prysm Beacon + /prysm/v1/beacon/chain_head: + get: + description: Returns detailed information about the current head, finalized, + and justified checkpoints of the beacon chain + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/structs.ChainHead' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Get chain head information + tags: + - Prysm Beacon + /prysm/v1/beacon/individual_votes: + post: + consumes: + - application/json + description: Returns detailed voting information for specified validators in + a given epoch + parameters: + - description: Validator indices/public keys and epoch + in: body + name: request + required: true + schema: + $ref: '#/definitions/structs.GetIndividualVotesRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/structs.GetIndividualVotesResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Get individual validator votes + tags: + - Prysm Beacon + /prysm/v1/beacon/states/{state_id}/query: + post: + consumes: + - application/json + description: Executes an SSZ query on a beacon state and returns the result + as SSZ-encoded bytes. Allows efficient extraction of specific fields from + large state objects. + parameters: + - description: State identifier (head, genesis, finalized, justified, slot number, + or hex root) + in: path + name: state_id + required: true + type: string + - description: SSZ query path (e.g., 'validators[0].pubkey') + in: body + name: request + required: true + schema: + $ref: '#/definitions/structs.SSZQueryRequest' + produces: + - application/octet-stream + responses: + "200": + description: SSZ-encoded SSZQueryResponse containing root and result + schema: + type: string + "400": + description: Bad Request + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "404": + description: Not Found + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Query beacon state with SSZ path + tags: + - Prysm Beacon + /prysm/v1/beacon/states/{state_id}/validator_count: + get: + description: Returns the total number of validators grouped by their status + (active, pending, exited, withdrawal, etc.) for a given state + parameters: + - description: State identifier (head, genesis, finalized, justified, slot number, + or hex root) + in: path + name: state_id + required: true + type: string + - collectionFormat: csv + description: 'Validator status filter (can be repeated). If omitted, returns + counts for all statuses. Valid values: pending_initialized, pending_queued, + active_ongoing, active_exiting, active_slashed, exited_unslashed, exited_slashed, + withdrawal_possible, withdrawal_done, active, pending, exited, withdrawal' + in: query + items: + type: string + name: status + type: array + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/structs.GetValidatorCountResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "404": + description: Not Found + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Get validator count by status + tags: + - Prysm Beacon + /prysm/v1/beacon/weak_subjectivity: + get: + description: Computes the weak subjectivity checkpoint for safe checkpoint sync + initialization + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/structs.GetWeakSubjectivityResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "503": + description: Beacon node is currently syncing + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Get weak subjectivity checkpoint + tags: + - Prysm Beacon + /prysm/v1/validators/{state_id}/active_set_changes: + get: + description: Returns validator set changes for a given epoch including activations, + voluntary exits, slashings, and ejections with both public keys and indices + parameters: + - description: State identifier (head, genesis, finalized, justified, slot number, + or hex root) + in: path + name: state_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/structs.ActiveSetChanges' + "400": + description: Bad Request + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "404": + description: Not Found + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Get active validator set changes + tags: + - Prysm Validator + /prysm/v1/validators/{state_id}/participation: + get: + description: Returns participation rate information for validators at a given + state, including voting statistics and balance information for current and + previous epochs + parameters: + - description: State identifier (head, genesis, finalized, justified, slot number, + or hex root) + in: path + name: state_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/structs.GetValidatorParticipationResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "404": + description: Not Found + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Get validator participation for an epoch + tags: + - Prysm Validator + /prysm/validators/performance: + post: + consumes: + - application/json + description: Returns detailed performance metrics for specified validators including + voting accuracy, balances before and after epoch transitions, and inactivity + scores + parameters: + - description: Validator public keys and/or indices to query + in: body + name: request + required: true + schema: + $ref: '#/definitions/structs.GetValidatorPerformanceRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/structs.GetValidatorPerformanceResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/httputil.DefaultJsonError' + summary: Get validator performance metrics + tags: + - Prysm Validator +schemes: +- http +- https +swagger: "2.0" diff --git a/go.mod b/go.mod index 8b0952af28a0..6b4795d16a19 100644 --- a/go.mod +++ b/go.mod @@ -71,10 +71,11 @@ require ( github.com/status-im/keycard-go v0.2.0 github.com/stretchr/testify v1.10.0 github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe + github.com/swaggo/swag v1.16.6 github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e github.com/trailofbits/go-mutexasserts v0.0.0-20250212181730-4c2b8e9e784b github.com/tyler-smith/go-bip39 v1.1.0 - github.com/urfave/cli/v2 v2.27.5 + github.com/urfave/cli/v2 v2.27.7 github.com/uudashr/gocognit v1.0.5 github.com/wealdtech/go-bytesutil v1.1.1 github.com/wealdtech/go-eth2-util v1.6.3 @@ -104,8 +105,9 @@ require ( ) require ( - github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect + github.com/BurntSushi/toml v1.5.0 // indirect github.com/DataDog/zstd v1.5.5 // indirect + github.com/KyleBanks/depth v1.2.1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/VictoriaMetrics/fastcache v1.12.2 // indirect github.com/benbjohnson/clock v1.3.5 // indirect @@ -124,7 +126,7 @@ require ( github.com/consensys/bavard v0.1.22 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect @@ -143,6 +145,21 @@ require ( github.com/francoispqt/gojay v1.2.13 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-openapi/jsonpointer v0.22.3 // indirect + github.com/go-openapi/jsonreference v0.21.3 // indirect + github.com/go-openapi/spec v0.20.4 // indirect + github.com/go-openapi/swag v0.25.4 // indirect + github.com/go-openapi/swag/cmdutils v0.25.4 // indirect + github.com/go-openapi/swag/conv v0.25.4 // indirect + github.com/go-openapi/swag/fileutils v0.25.4 // indirect + github.com/go-openapi/swag/jsonname v0.25.4 // indirect + github.com/go-openapi/swag/jsonutils v0.25.4 // indirect + github.com/go-openapi/swag/loading v0.25.4 // indirect + github.com/go-openapi/swag/mangling v0.25.4 // indirect + github.com/go-openapi/swag/netutils v0.25.4 // indirect + github.com/go-openapi/swag/stringutils v0.25.4 // indirect + github.com/go-openapi/swag/typeutils v0.25.4 // indirect + github.com/go-openapi/swag/yamlutils v0.25.4 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect @@ -242,7 +259,7 @@ require ( github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/rogpeppe/go-internal v1.13.1 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect @@ -252,7 +269,7 @@ require ( github.com/tklauser/numcpus v0.7.0 // indirect github.com/wealdtech/go-eth2-types/v2 v2.8.2 // indirect github.com/wlynxg/anet v0.0.5 // indirect - github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect + github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect @@ -262,6 +279,8 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect + go.yaml.in/yaml/v2 v2.4.3 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678 // indirect golang.org/x/mod v0.30.0 // indirect golang.org/x/net v0.47.0 // indirect @@ -278,7 +297,7 @@ require ( rsc.io/tmplfunc v0.0.3 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + sigs.k8s.io/yaml v1.6.0 // indirect ) require ( diff --git a/go.sum b/go.sum index 9afdac043b42..f61e77a7de40 100644 --- a/go.sum +++ b/go.sum @@ -45,12 +45,14 @@ dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1 dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= -github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= +github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/MariusVanDerWijden/FuzzyVM v0.0.0-20240516070431-7828990cad7d h1:RQtzNvriR3Yu5CvVBTJPwDmfItBT90TWZ3fFondhc08= github.com/MariusVanDerWijden/FuzzyVM v0.0.0-20240516070431-7828990cad7d/go.mod h1:gWTykV/ZinShgltWofTEJY4TsletuvGhB6l4+Ai2F+E= github.com/MariusVanDerWijden/tx-fuzz v1.4.0 h1:Tq4lXivsR8mtoP4RpasUDIUpDLHfN1YhFge/kzrzK78= @@ -59,6 +61,8 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OffchainLabs/go-bitfield v0.0.0-20251031151322-f427d04d8506 h1:d/SJkN8/9Ca+1YmuDiUJxAiV4w/a9S8NcsG7GMQSrVI= github.com/OffchainLabs/go-bitfield v0.0.0-20251031151322-f427d04d8506/go.mod h1:6TZI4FU6zT8x6ZfWa1J8YQ2NgW0wLV/W3fHRca8ISBo= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/sarama v1.26.1/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= @@ -170,8 +174,8 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= -github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= +github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a h1:W8mUrRp6NOVl3J+MYp5kPMoUZPp7aOYHtaua31lwRHg= github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a/go.mod h1:sTwzHBvIzm2RfVCGNEBZgRyjwK40bVoun3ZnGOCafNM= github.com/crate-crypto/go-kzg-4844 v1.1.0 h1:EN/u9k2TF6OWSHrCCDBBU6GLNMq88OspHHlMnHfoyU4= @@ -296,14 +300,47 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= -github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= -github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/jsonpointer v0.22.3 h1:dKMwfV4fmt6Ah90zloTbUKWMD+0he+12XYAsPotrkn8= +github.com/go-openapi/jsonpointer v0.22.3/go.mod h1:0lBbqeRsQ5lIanv3LHZBrmRGHLHcQoOXQnf88fHlGWo= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/jsonreference v0.21.3 h1:96Dn+MRPa0nYAR8DR1E03SblB5FJvh7W6krPI0Z7qMc= +github.com/go-openapi/jsonreference v0.21.3/go.mod h1:RqkUP0MrLf37HqxZxrIAtTWW4ZJIK1VzduhXYBEeGc4= +github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= -github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.25.4 h1:OyUPUFYDPDBMkqyxOTkqDYFnrhuhi9NR6QVUvIochMU= +github.com/go-openapi/swag v0.25.4/go.mod h1:zNfJ9WZABGHCFg2RnY0S4IOkAcVTzJ6z2Bi+Q4i6qFQ= +github.com/go-openapi/swag/cmdutils v0.25.4 h1:8rYhB5n6WawR192/BfUu2iVlxqVR9aRgGJP6WaBoW+4= +github.com/go-openapi/swag/cmdutils v0.25.4/go.mod h1:pdae/AFo6WxLl5L0rq87eRzVPm/XRHM3MoYgRMvG4A0= +github.com/go-openapi/swag/conv v0.25.4 h1:/Dd7p0LZXczgUcC/Ikm1+YqVzkEeCc9LnOWjfkpkfe4= +github.com/go-openapi/swag/conv v0.25.4/go.mod h1:3LXfie/lwoAv0NHoEuY1hjoFAYkvlqI/Bn5EQDD3PPU= +github.com/go-openapi/swag/fileutils v0.25.4 h1:2oI0XNW5y6UWZTC7vAxC8hmsK/tOkWXHJQH4lKjqw+Y= +github.com/go-openapi/swag/fileutils v0.25.4/go.mod h1:cdOT/PKbwcysVQ9Tpr0q20lQKH7MGhOEb6EwmHOirUk= +github.com/go-openapi/swag/jsonname v0.25.4 h1:bZH0+MsS03MbnwBXYhuTttMOqk+5KcQ9869Vye1bNHI= +github.com/go-openapi/swag/jsonname v0.25.4/go.mod h1:GPVEk9CWVhNvWhZgrnvRA6utbAltopbKwDu8mXNUMag= +github.com/go-openapi/swag/jsonutils v0.25.4 h1:VSchfbGhD4UTf4vCdR2F4TLBdLwHyUDTd1/q4i+jGZA= +github.com/go-openapi/swag/jsonutils v0.25.4/go.mod h1:7OYGXpvVFPn4PpaSdPHJBtF0iGnbEaTk8AvBkoWnaAY= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.4 h1:IACsSvBhiNJwlDix7wq39SS2Fh7lUOCJRmx/4SN4sVo= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.4/go.mod h1:Mt0Ost9l3cUzVv4OEZG+WSeoHwjWLnarzMePNDAOBiM= +github.com/go-openapi/swag/loading v0.25.4 h1:jN4MvLj0X6yhCDduRsxDDw1aHe+ZWoLjW+9ZQWIKn2s= +github.com/go-openapi/swag/loading v0.25.4/go.mod h1:rpUM1ZiyEP9+mNLIQUdMiD7dCETXvkkC30z53i+ftTE= +github.com/go-openapi/swag/mangling v0.25.4 h1:2b9kBJk9JvPgxr36V23FxJLdwBrpijI26Bx5JH4Hp48= +github.com/go-openapi/swag/mangling v0.25.4/go.mod h1:6dxwu6QyORHpIIApsdZgb6wBk/DPU15MdyYj/ikn0Hg= +github.com/go-openapi/swag/netutils v0.25.4 h1:Gqe6K71bGRb3ZQLusdI8p/y1KLgV4M/k+/HzVSqT8H0= +github.com/go-openapi/swag/netutils v0.25.4/go.mod h1:m2W8dtdaoX7oj9rEttLyTeEFFEBvnAx9qHd5nJEBzYg= +github.com/go-openapi/swag/stringutils v0.25.4 h1:O6dU1Rd8bej4HPA3/CLPciNBBDwZj9HiEpdVsb8B5A8= +github.com/go-openapi/swag/stringutils v0.25.4/go.mod h1:GTsRvhJW5xM5gkgiFe0fV3PUlFm0dr8vki6/VSRaZK0= +github.com/go-openapi/swag/typeutils v0.25.4 h1:1/fbZOUN472NTc39zpa+YGHn3jzHWhv42wAJSN91wRw= +github.com/go-openapi/swag/typeutils v0.25.4/go.mod h1:Ou7g//Wx8tTLS9vG0UmzfCsjZjKhpjxayRKTHXf2pTE= +github.com/go-openapi/swag/yamlutils v0.25.4 h1:6jdaeSItEUb7ioS9lFoCZ65Cne1/RZtPBZ9A56h92Sw= +github.com/go-openapi/swag/yamlutils v0.25.4/go.mod h1:MNzq1ulQu+yd8Kl7wPOut/YHAAU/H6hL91fF+E2RFwc= +github.com/go-openapi/testify/enable/yaml/v2 v2.0.2 h1:0+Y41Pz1NkbTHz8NngxTuAXxEodtNSI1WG1c/m5Akw4= +github.com/go-openapi/testify/enable/yaml/v2 v2.0.2/go.mod h1:kme83333GCtJQHXQ8UKX3IBZu6z8T5Dvy5+CW3NLUUg= +github.com/go-openapi/testify/v2 v2.0.2 h1:X999g3jeLcoY8qctY/c/Z8iBHTbwLz7R2WXd6Ub6wls= +github.com/go-openapi/testify/v2 v2.0.2/go.mod h1:HCPmvFFnheKK2BuwSA0TbbdxJ3I16pjwMkYkP4Ywn54= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -529,7 +566,6 @@ github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/joonix/log v0.0.0-20200409080653-9c1d2ceb5f1d h1:k+SfYbN66Ev/GDVq39wYOXVW5RNd5kzzairbCe9dK5Q= github.com/joonix/log v0.0.0-20200409080653-9c1d2ceb5f1d/go.mod h1:fS54ONkjDV71zS9CDx3V9K21gJg7byKSvI4ajuWFNJw= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -619,8 +655,7 @@ github.com/magiconair/properties v1.7.4-0.20170902060319-8d7837e64d3c/go.mod h1: github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.7.0 h1:3l11YT8tm9MnwGFQ4kETwkzpAwY2Jt9lCrumCUW4+z4= github.com/manifoldco/promptui v0.7.0/go.mod h1:n4zTdgP0vr0S3w7/O/g98U+e0gwLScEXGwov2nIKuGQ= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= @@ -735,6 +770,7 @@ github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= @@ -933,8 +969,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -1013,6 +1049,7 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -1023,6 +1060,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe h1:nbdqkIGOGfUAD54q1s2YBcBz/WcsxCO9HUQ4aGV5hUw= github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/swaggo/swag v1.16.6 h1:qBNcx53ZaX+M5dxVyTrgQ0PJ/ACK+NzhwcbieTt+9yI= +github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4Xesg= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -1045,8 +1084,8 @@ github.com/umbracle/gohashtree v0.0.2-alpha.0.20230207094856-5b775a815c10/go.mod github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= -github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= +github.com/urfave/cli/v2 v2.27.7 h1:bH59vdhbjLv3LAvIu6gd0usJHgoTTPhCFib8qqOwXYU= +github.com/urfave/cli/v2 v2.27.7/go.mod h1:CyNAG/xg+iAOg0N4MPGZqVmv2rCoP267496AOXUZjA4= github.com/uudashr/gocognit v1.0.5 h1:rrSex7oHr3/pPLQ0xoWq108XMU8s678FJcQ+aSfOHa4= github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -1071,8 +1110,8 @@ github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguH github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= +github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 h1:FnBeRrxr7OU4VvAzt5X7s6266i6cSVkkFPS0TuXWbIg= +github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1145,6 +1184,10 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= +go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1265,6 +1308,7 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= @@ -1373,6 +1417,7 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1630,6 +1675,7 @@ gopkg.in/cenkalti/backoff.v1 v1.1.0/go.mod h1:J6Vskwqd+OMVJl8C33mmtxTBs2gyzfv7UD gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= @@ -1662,6 +1708,7 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -1700,8 +1747,8 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h6 sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= +sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= From 9810fa0ef24512c8de897a9f424f0363cf5ea965 Mon Sep 17 00:00:00 2001 From: Willian Paixao Date: Sat, 29 Nov 2025 11:54:35 +0100 Subject: [PATCH 2/2] chore: cleaning up go.mod Signed-off-by: Willian Paixao --- docs/README.md | 39 ++ docs/docs.go | 1181 ------------------------------------------------ go.mod | 31 +- go.sum | 89 +--- 4 files changed, 66 insertions(+), 1274 deletions(-) create mode 100644 docs/README.md delete mode 100644 docs/docs.go diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000000..c78bff794bdb --- /dev/null +++ b/docs/README.md @@ -0,0 +1,39 @@ +# Prysm Custom API Documentation + +This directory contains Swagger 2.0 documentation for Prysm's custom beacon node API endpoints. + +## Files + +- `swagger.json` - OpenAPI 2.0 specification in JSON format +- `swagger.yaml` - OpenAPI 2.0 specification in YAML format + +## Viewing the Documentation + +You can view the API documentation using any Swagger UI viewer: + +1. **Online Swagger Editor**: Upload `swagger.json` to [editor.swagger.io](https://editor.swagger.io/) +2. **Swagger UI Docker**: + ```bash + docker run -p 8080:8080 -e SWAGGER_JSON=/docs/swagger.json -v $(pwd)/docs:/docs swaggerapi/swagger-ui + ``` +3. **VS Code Extension**: Use the "OpenAPI (Swagger) Editor" extension + +## Regenerating the Documentation + +The swagger files are generated from Go annotations in the source code using the [swag](https://github.com/swaggo/swag) CLI tool. + +### Prerequisites + +Install swag CLI: + +```bash +go install github.com/swaggo/swag/cmd/swag@latest +``` + +### Generate Swagger Files + +From the repository root: + +```bash +swag init -g beacon-chain/rpc/prysm/doc.go -o docs/ --parseDependency --parseInternal +``` diff --git a/docs/docs.go b/docs/docs.go deleted file mode 100644 index 6b3c0ef6f391..000000000000 --- a/docs/docs.go +++ /dev/null @@ -1,1181 +0,0 @@ -// Package docs Code generated by swaggo/swag. DO NOT EDIT -package docs - -import "github.com/swaggo/swag" - -const docTemplate = `{ - "schemes": {{ marshal .Schemes }}, - "swagger": "2.0", - "info": { - "description": "{{escape .Description}}", - "title": "{{.Title}}", - "contact": { - "name": "Prysm Team", - "url": "https://github.com/OffchainLabs/prysm" - }, - "license": { - "name": "GPL-3.0", - "url": "https://github.com/OffchainLabs/prysm/blob/develop/LICENSE.md" - }, - "version": "{{.Version}}" - }, - "host": "{{.Host}}", - "basePath": "{{.BasePath}}", - "paths": { - "/eth/v1/beacon/states/{state_id}/validator_count": { - "get": { - "description": "Returns the total number of validators grouped by their status (active, pending, exited, withdrawal, etc.) for a given state", - "produces": [ - "application/json" - ], - "tags": [ - "Prysm Beacon" - ], - "summary": "Get validator count by status", - "parameters": [ - { - "type": "string", - "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", - "name": "state_id", - "in": "path", - "required": true - }, - { - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "csv", - "description": "Validator status filter (can be repeated). If omitted, returns counts for all statuses. Valid values: pending_initialized, pending_queued, active_ongoing, active_exiting, active_slashed, exited_unslashed, exited_slashed, withdrawal_possible, withdrawal_done, active, pending, exited, withdrawal", - "name": "status", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/structs.GetValidatorCountResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/node/trusted_peers": { - "get": { - "description": "Returns a list of all trusted peers configured on this beacon node, including their connection state, direction, ENR, and last seen address", - "produces": [ - "application/json" - ], - "tags": [ - "Prysm Node" - ], - "summary": "List trusted peers", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/structs.PeersResponse" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - }, - "post": { - "description": "Adds a peer to the beacon node's trusted peer set using its multiaddress. Trusted peers are given priority in peer connections.", - "consumes": [ - "application/json" - ], - "tags": [ - "Prysm Node" - ], - "summary": "Add a trusted peer", - "parameters": [ - { - "description": "Peer multiaddress (e.g., /ip4/127.0.0.1/tcp/13000/p2p/16Uiu2...)", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/structs.AddrRequest" - } - } - ], - "responses": { - "200": { - "description": "Peer successfully added to trusted set" - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/node/trusted_peers/{peer_id}": { - "delete": { - "description": "Removes a peer from the beacon node's trusted peer set by peer ID. Does not disconnect the peer if already connected.", - "tags": [ - "Prysm Node" - ], - "summary": "Remove a trusted peer", - "parameters": [ - { - "type": "string", - "description": "Peer ID to remove from trusted set", - "name": "peer_id", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "Peer successfully removed from trusted set" - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/v1/beacon/blobs": { - "post": { - "description": "Publishes blob sidecars to the beacon network. Only supported for Deneb through Fulu epochs.", - "consumes": [ - "application/json" - ], - "tags": [ - "Prysm Beacon" - ], - "summary": "Publish blob sidecars (DEPRECATED post-Fulu)", - "deprecated": true, - "parameters": [ - { - "description": "Blob sidecars to publish", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/structs.PublishBlobsRequest" - } - } - ], - "responses": { - "200": { - "description": "Blobs successfully published" - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "503": { - "description": "Beacon node is currently syncing", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/v1/beacon/blocks/{block_id}/query": { - "post": { - "description": "Executes an SSZ query on a beacon block and returns the result as SSZ-encoded bytes. Allows efficient extraction of specific fields from block objects.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/octet-stream" - ], - "tags": [ - "Prysm Beacon" - ], - "summary": "Query beacon block with SSZ path", - "parameters": [ - { - "type": "string", - "description": "Block identifier (head, genesis, finalized, slot number, or hex root)", - "name": "block_id", - "in": "path", - "required": true - }, - { - "description": "SSZ query path (e.g., 'body.attestations[0]')", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/structs.SSZQueryRequest" - } - } - ], - "responses": { - "200": { - "description": "SSZ-encoded SSZQueryResponse containing root and result", - "schema": { - "type": "string" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/v1/beacon/chain_head": { - "get": { - "description": "Returns detailed information about the current head, finalized, and justified checkpoints of the beacon chain", - "produces": [ - "application/json" - ], - "tags": [ - "Prysm Beacon" - ], - "summary": "Get chain head information", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/structs.ChainHead" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/v1/beacon/individual_votes": { - "post": { - "description": "Returns detailed voting information for specified validators in a given epoch", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Prysm Beacon" - ], - "summary": "Get individual validator votes", - "parameters": [ - { - "description": "Validator indices/public keys and epoch", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/structs.GetIndividualVotesRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/structs.GetIndividualVotesResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/v1/beacon/states/{state_id}/query": { - "post": { - "description": "Executes an SSZ query on a beacon state and returns the result as SSZ-encoded bytes. Allows efficient extraction of specific fields from large state objects.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/octet-stream" - ], - "tags": [ - "Prysm Beacon" - ], - "summary": "Query beacon state with SSZ path", - "parameters": [ - { - "type": "string", - "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", - "name": "state_id", - "in": "path", - "required": true - }, - { - "description": "SSZ query path (e.g., 'validators[0].pubkey')", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/structs.SSZQueryRequest" - } - } - ], - "responses": { - "200": { - "description": "SSZ-encoded SSZQueryResponse containing root and result", - "schema": { - "type": "string" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/v1/beacon/states/{state_id}/validator_count": { - "get": { - "description": "Returns the total number of validators grouped by their status (active, pending, exited, withdrawal, etc.) for a given state", - "produces": [ - "application/json" - ], - "tags": [ - "Prysm Beacon" - ], - "summary": "Get validator count by status", - "parameters": [ - { - "type": "string", - "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", - "name": "state_id", - "in": "path", - "required": true - }, - { - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "csv", - "description": "Validator status filter (can be repeated). If omitted, returns counts for all statuses. Valid values: pending_initialized, pending_queued, active_ongoing, active_exiting, active_slashed, exited_unslashed, exited_slashed, withdrawal_possible, withdrawal_done, active, pending, exited, withdrawal", - "name": "status", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/structs.GetValidatorCountResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/v1/beacon/weak_subjectivity": { - "get": { - "description": "Computes the weak subjectivity checkpoint for safe checkpoint sync initialization", - "produces": [ - "application/json" - ], - "tags": [ - "Prysm Beacon" - ], - "summary": "Get weak subjectivity checkpoint", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/structs.GetWeakSubjectivityResponse" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "503": { - "description": "Beacon node is currently syncing", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/v1/validators/{state_id}/active_set_changes": { - "get": { - "description": "Returns validator set changes for a given epoch including activations, voluntary exits, slashings, and ejections with both public keys and indices", - "produces": [ - "application/json" - ], - "tags": [ - "Prysm Validator" - ], - "summary": "Get active validator set changes", - "parameters": [ - { - "type": "string", - "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", - "name": "state_id", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/structs.ActiveSetChanges" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/v1/validators/{state_id}/participation": { - "get": { - "description": "Returns participation rate information for validators at a given state, including voting statistics and balance information for current and previous epochs", - "produces": [ - "application/json" - ], - "tags": [ - "Prysm Validator" - ], - "summary": "Get validator participation for an epoch", - "parameters": [ - { - "type": "string", - "description": "State identifier (head, genesis, finalized, justified, slot number, or hex root)", - "name": "state_id", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/structs.GetValidatorParticipationResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - }, - "/prysm/validators/performance": { - "post": { - "description": "Returns detailed performance metrics for specified validators including voting accuracy, balances before and after epoch transitions, and inactivity scores", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Prysm Validator" - ], - "summary": "Get validator performance metrics", - "parameters": [ - { - "description": "Validator public keys and/or indices to query", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/structs.GetValidatorPerformanceRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/structs.GetValidatorPerformanceResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/httputil.DefaultJsonError" - } - } - } - } - } - }, - "definitions": { - "httputil.DefaultJsonError": { - "type": "object", - "properties": { - "code": { - "type": "integer" - }, - "message": { - "type": "string" - } - } - }, - "structs.ActiveSetChanges": { - "type": "object", - "properties": { - "activated_indices": { - "type": "array", - "items": { - "type": "string" - } - }, - "activated_public_keys": { - "type": "array", - "items": { - "type": "string" - } - }, - "ejected_indices": { - "type": "array", - "items": { - "type": "string" - } - }, - "ejected_public_keys": { - "type": "array", - "items": { - "type": "string" - } - }, - "epoch": { - "type": "string" - }, - "exited_indices": { - "type": "array", - "items": { - "type": "string" - } - }, - "exited_public_keys": { - "type": "array", - "items": { - "type": "string" - } - }, - "slashed_indices": { - "type": "array", - "items": { - "type": "string" - } - }, - "slashed_public_keys": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "structs.AddrRequest": { - "type": "object", - "properties": { - "addr": { - "type": "string" - } - } - }, - "structs.BeaconBlockHeader": { - "type": "object", - "properties": { - "body_root": { - "type": "string" - }, - "parent_root": { - "type": "string" - }, - "proposer_index": { - "type": "string" - }, - "slot": { - "type": "string" - }, - "state_root": { - "type": "string" - } - } - }, - "structs.BlobSidecars": { - "type": "object", - "properties": { - "sidecars": { - "type": "array", - "items": { - "$ref": "#/definitions/structs.Sidecar" - } - } - } - }, - "structs.ChainHead": { - "type": "object", - "properties": { - "finalized_block_root": { - "type": "string" - }, - "finalized_epoch": { - "type": "string" - }, - "finalized_slot": { - "type": "string" - }, - "head_block_root": { - "type": "string" - }, - "head_epoch": { - "type": "string" - }, - "head_slot": { - "type": "string" - }, - "justified_block_root": { - "type": "string" - }, - "justified_epoch": { - "type": "string" - }, - "justified_slot": { - "type": "string" - }, - "optimistic_status": { - "type": "boolean" - }, - "previous_justified_block_root": { - "type": "string" - }, - "previous_justified_epoch": { - "type": "string" - }, - "previous_justified_slot": { - "type": "string" - } - } - }, - "structs.Checkpoint": { - "type": "object", - "properties": { - "epoch": { - "type": "string" - }, - "root": { - "type": "string" - } - } - }, - "structs.GetIndividualVotesRequest": { - "type": "object", - "properties": { - "epoch": { - "type": "string" - }, - "indices": { - "type": "array", - "items": { - "type": "string" - } - }, - "public_keys": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "structs.GetIndividualVotesResponse": { - "type": "object", - "properties": { - "individual_votes": { - "type": "array", - "items": { - "$ref": "#/definitions/structs.IndividualVote" - } - } - } - }, - "structs.GetValidatorCountResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/definitions/structs.ValidatorCount" - } - }, - "execution_optimistic": { - "type": "string" - }, - "finalized": { - "type": "string" - } - } - }, - "structs.GetValidatorParticipationResponse": { - "type": "object", - "properties": { - "epoch": { - "type": "string" - }, - "finalized": { - "type": "boolean" - }, - "participation": { - "$ref": "#/definitions/structs.ValidatorParticipation" - } - } - }, - "structs.GetValidatorPerformanceRequest": { - "type": "object", - "properties": { - "indices": { - "type": "array", - "items": { - "type": "integer" - } - }, - "public_keys": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "integer", - "format": "int32" - } - } - } - } - }, - "structs.GetValidatorPerformanceResponse": { - "type": "object", - "properties": { - "balances_after_epoch_transition": { - "type": "array", - "items": { - "type": "integer" - } - }, - "balances_before_epoch_transition": { - "type": "array", - "items": { - "type": "integer" - } - }, - "correctly_voted_head": { - "type": "array", - "items": { - "type": "boolean" - } - }, - "correctly_voted_source": { - "type": "array", - "items": { - "type": "boolean" - } - }, - "correctly_voted_target": { - "type": "array", - "items": { - "type": "boolean" - } - }, - "current_effective_balances": { - "type": "array", - "items": { - "type": "integer" - } - }, - "inactivity_scores": { - "type": "array", - "items": { - "type": "integer" - } - }, - "missing_validators": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "integer", - "format": "int32" - } - } - }, - "public_keys": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "integer", - "format": "int32" - } - } - } - } - }, - "structs.GetWeakSubjectivityResponse": { - "type": "object", - "properties": { - "data": { - "$ref": "#/definitions/structs.WeakSubjectivityData" - } - } - }, - "structs.IndividualVote": { - "type": "object", - "properties": { - "current_epoch_effective_balance_gwei": { - "type": "string" - }, - "epoch": { - "type": "string" - }, - "inactivity_score": { - "type": "string" - }, - "inclusion_distance": { - "type": "string" - }, - "inclusion_slot": { - "type": "string" - }, - "is_active_in_current_epoch": { - "type": "boolean" - }, - "is_active_in_previous_epoch": { - "type": "boolean" - }, - "is_current_epoch_attester": { - "type": "boolean" - }, - "is_current_epoch_target_attester": { - "type": "boolean" - }, - "is_previous_epoch_attester": { - "type": "boolean" - }, - "is_previous_epoch_head_attester": { - "type": "boolean" - }, - "is_previous_epoch_target_attester": { - "type": "boolean" - }, - "is_slashed": { - "type": "boolean" - }, - "is_withdrawable_in_current_epoch": { - "type": "boolean" - }, - "public_keys": { - "type": "string" - }, - "validator_index": { - "type": "string" - } - } - }, - "structs.Peer": { - "type": "object", - "properties": { - "direction": { - "type": "string" - }, - "enr": { - "type": "string" - }, - "last_seen_p2p_address": { - "type": "string" - }, - "peer_id": { - "type": "string" - }, - "state": { - "type": "string" - } - } - }, - "structs.PeersResponse": { - "type": "object", - "properties": { - "peers": { - "type": "array", - "items": { - "$ref": "#/definitions/structs.Peer" - } - } - } - }, - "structs.PublishBlobsRequest": { - "type": "object", - "properties": { - "blob_sidecars": { - "$ref": "#/definitions/structs.BlobSidecars" - }, - "block_root": { - "type": "string" - } - } - }, - "structs.SSZQueryRequest": { - "type": "object", - "properties": { - "include_proof": { - "type": "boolean" - }, - "query": { - "type": "string" - } - } - }, - "structs.Sidecar": { - "type": "object", - "properties": { - "blob": { - "type": "string" - }, - "index": { - "type": "string" - }, - "kzg_commitment": { - "type": "string" - }, - "kzg_commitment_inclusion_proof": { - "type": "array", - "items": { - "type": "string" - } - }, - "kzg_proof": { - "type": "string" - }, - "signed_block_header": { - "$ref": "#/definitions/structs.SignedBeaconBlockHeader" - } - } - }, - "structs.SignedBeaconBlockHeader": { - "type": "object", - "properties": { - "message": { - "$ref": "#/definitions/structs.BeaconBlockHeader" - }, - "signature": { - "type": "string" - } - } - }, - "structs.ValidatorCount": { - "type": "object", - "properties": { - "count": { - "type": "string" - }, - "status": { - "type": "string" - } - } - }, - "structs.ValidatorParticipation": { - "type": "object", - "properties": { - "current_epoch_active_gwei": { - "type": "string" - }, - "current_epoch_attesting_gwei": { - "type": "string" - }, - "current_epoch_target_attesting_gwei": { - "type": "string" - }, - "eligible_ether": { - "type": "string" - }, - "global_participation_rate": { - "type": "string" - }, - "previous_epoch_active_gwei": { - "type": "string" - }, - "previous_epoch_attesting_gwei": { - "type": "string" - }, - "previous_epoch_head_attesting_gwei": { - "type": "string" - }, - "previous_epoch_target_attesting_gwei": { - "type": "string" - }, - "voted_ether": { - "type": "string" - } - } - }, - "structs.WeakSubjectivityData": { - "type": "object", - "properties": { - "state_root": { - "type": "string" - }, - "ws_checkpoint": { - "$ref": "#/definitions/structs.Checkpoint" - } - } - } - } -}` - -// SwaggerInfo holds exported Swagger Info so clients can modify it -var SwaggerInfo = &swag.Spec{ - Version: "1.0", - Host: "localhost:3500", - BasePath: "/", - Schemes: []string{"http", "https"}, - Title: "Prysm Beacon Node Custom API", - Description: "Custom Prysm endpoints for beacon node operations, validator metrics, and extended functionality.\nThese endpoints extend the standard Ethereum Beacon Node API with Prysm-specific features.", - InfoInstanceName: "swagger", - SwaggerTemplate: docTemplate, - LeftDelim: "{{", - RightDelim: "}}", -} - -func init() { - swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) -} diff --git a/go.mod b/go.mod index 6b4795d16a19..8b0952af28a0 100644 --- a/go.mod +++ b/go.mod @@ -71,11 +71,10 @@ require ( github.com/status-im/keycard-go v0.2.0 github.com/stretchr/testify v1.10.0 github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe - github.com/swaggo/swag v1.16.6 github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e github.com/trailofbits/go-mutexasserts v0.0.0-20250212181730-4c2b8e9e784b github.com/tyler-smith/go-bip39 v1.1.0 - github.com/urfave/cli/v2 v2.27.7 + github.com/urfave/cli/v2 v2.27.5 github.com/uudashr/gocognit v1.0.5 github.com/wealdtech/go-bytesutil v1.1.1 github.com/wealdtech/go-eth2-util v1.6.3 @@ -105,9 +104,8 @@ require ( ) require ( - github.com/BurntSushi/toml v1.5.0 // indirect + github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect github.com/DataDog/zstd v1.5.5 // indirect - github.com/KyleBanks/depth v1.2.1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/VictoriaMetrics/fastcache v1.12.2 // indirect github.com/benbjohnson/clock v1.3.5 // indirect @@ -126,7 +124,7 @@ require ( github.com/consensys/bavard v0.1.22 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect @@ -145,21 +143,6 @@ require ( github.com/francoispqt/gojay v1.2.13 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-openapi/jsonpointer v0.22.3 // indirect - github.com/go-openapi/jsonreference v0.21.3 // indirect - github.com/go-openapi/spec v0.20.4 // indirect - github.com/go-openapi/swag v0.25.4 // indirect - github.com/go-openapi/swag/cmdutils v0.25.4 // indirect - github.com/go-openapi/swag/conv v0.25.4 // indirect - github.com/go-openapi/swag/fileutils v0.25.4 // indirect - github.com/go-openapi/swag/jsonname v0.25.4 // indirect - github.com/go-openapi/swag/jsonutils v0.25.4 // indirect - github.com/go-openapi/swag/loading v0.25.4 // indirect - github.com/go-openapi/swag/mangling v0.25.4 // indirect - github.com/go-openapi/swag/netutils v0.25.4 // indirect - github.com/go-openapi/swag/stringutils v0.25.4 // indirect - github.com/go-openapi/swag/typeutils v0.25.4 // indirect - github.com/go-openapi/swag/yamlutils v0.25.4 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect @@ -259,7 +242,7 @@ require ( github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect @@ -269,7 +252,7 @@ require ( github.com/tklauser/numcpus v0.7.0 // indirect github.com/wealdtech/go-eth2-types/v2 v2.8.2 // indirect github.com/wlynxg/anet v0.0.5 // indirect - github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 // indirect + github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect @@ -279,8 +262,6 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - go.yaml.in/yaml/v2 v2.4.3 // indirect - go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678 // indirect golang.org/x/mod v0.30.0 // indirect golang.org/x/net v0.47.0 // indirect @@ -297,7 +278,7 @@ require ( rsc.io/tmplfunc v0.0.3 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect - sigs.k8s.io/yaml v1.6.0 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect ) require ( diff --git a/go.sum b/go.sum index f61e77a7de40..9afdac043b42 100644 --- a/go.sum +++ b/go.sum @@ -45,14 +45,12 @@ dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1 dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= -github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= -github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/MariusVanDerWijden/FuzzyVM v0.0.0-20240516070431-7828990cad7d h1:RQtzNvriR3Yu5CvVBTJPwDmfItBT90TWZ3fFondhc08= github.com/MariusVanDerWijden/FuzzyVM v0.0.0-20240516070431-7828990cad7d/go.mod h1:gWTykV/ZinShgltWofTEJY4TsletuvGhB6l4+Ai2F+E= github.com/MariusVanDerWijden/tx-fuzz v1.4.0 h1:Tq4lXivsR8mtoP4RpasUDIUpDLHfN1YhFge/kzrzK78= @@ -61,8 +59,6 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OffchainLabs/go-bitfield v0.0.0-20251031151322-f427d04d8506 h1:d/SJkN8/9Ca+1YmuDiUJxAiV4w/a9S8NcsG7GMQSrVI= github.com/OffchainLabs/go-bitfield v0.0.0-20251031151322-f427d04d8506/go.mod h1:6TZI4FU6zT8x6ZfWa1J8YQ2NgW0wLV/W3fHRca8ISBo= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/sarama v1.26.1/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= @@ -174,8 +170,8 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= -github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= +github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a h1:W8mUrRp6NOVl3J+MYp5kPMoUZPp7aOYHtaua31lwRHg= github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a/go.mod h1:sTwzHBvIzm2RfVCGNEBZgRyjwK40bVoun3ZnGOCafNM= github.com/crate-crypto/go-kzg-4844 v1.1.0 h1:EN/u9k2TF6OWSHrCCDBBU6GLNMq88OspHHlMnHfoyU4= @@ -300,47 +296,14 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.22.3 h1:dKMwfV4fmt6Ah90zloTbUKWMD+0he+12XYAsPotrkn8= -github.com/go-openapi/jsonpointer v0.22.3/go.mod h1:0lBbqeRsQ5lIanv3LHZBrmRGHLHcQoOXQnf88fHlGWo= -github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= -github.com/go-openapi/jsonreference v0.21.3 h1:96Dn+MRPa0nYAR8DR1E03SblB5FJvh7W6krPI0Z7qMc= -github.com/go-openapi/jsonreference v0.21.3/go.mod h1:RqkUP0MrLf37HqxZxrIAtTWW4ZJIK1VzduhXYBEeGc4= -github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= -github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.25.4 h1:OyUPUFYDPDBMkqyxOTkqDYFnrhuhi9NR6QVUvIochMU= -github.com/go-openapi/swag v0.25.4/go.mod h1:zNfJ9WZABGHCFg2RnY0S4IOkAcVTzJ6z2Bi+Q4i6qFQ= -github.com/go-openapi/swag/cmdutils v0.25.4 h1:8rYhB5n6WawR192/BfUu2iVlxqVR9aRgGJP6WaBoW+4= -github.com/go-openapi/swag/cmdutils v0.25.4/go.mod h1:pdae/AFo6WxLl5L0rq87eRzVPm/XRHM3MoYgRMvG4A0= -github.com/go-openapi/swag/conv v0.25.4 h1:/Dd7p0LZXczgUcC/Ikm1+YqVzkEeCc9LnOWjfkpkfe4= -github.com/go-openapi/swag/conv v0.25.4/go.mod h1:3LXfie/lwoAv0NHoEuY1hjoFAYkvlqI/Bn5EQDD3PPU= -github.com/go-openapi/swag/fileutils v0.25.4 h1:2oI0XNW5y6UWZTC7vAxC8hmsK/tOkWXHJQH4lKjqw+Y= -github.com/go-openapi/swag/fileutils v0.25.4/go.mod h1:cdOT/PKbwcysVQ9Tpr0q20lQKH7MGhOEb6EwmHOirUk= -github.com/go-openapi/swag/jsonname v0.25.4 h1:bZH0+MsS03MbnwBXYhuTttMOqk+5KcQ9869Vye1bNHI= -github.com/go-openapi/swag/jsonname v0.25.4/go.mod h1:GPVEk9CWVhNvWhZgrnvRA6utbAltopbKwDu8mXNUMag= -github.com/go-openapi/swag/jsonutils v0.25.4 h1:VSchfbGhD4UTf4vCdR2F4TLBdLwHyUDTd1/q4i+jGZA= -github.com/go-openapi/swag/jsonutils v0.25.4/go.mod h1:7OYGXpvVFPn4PpaSdPHJBtF0iGnbEaTk8AvBkoWnaAY= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.4 h1:IACsSvBhiNJwlDix7wq39SS2Fh7lUOCJRmx/4SN4sVo= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.4/go.mod h1:Mt0Ost9l3cUzVv4OEZG+WSeoHwjWLnarzMePNDAOBiM= -github.com/go-openapi/swag/loading v0.25.4 h1:jN4MvLj0X6yhCDduRsxDDw1aHe+ZWoLjW+9ZQWIKn2s= -github.com/go-openapi/swag/loading v0.25.4/go.mod h1:rpUM1ZiyEP9+mNLIQUdMiD7dCETXvkkC30z53i+ftTE= -github.com/go-openapi/swag/mangling v0.25.4 h1:2b9kBJk9JvPgxr36V23FxJLdwBrpijI26Bx5JH4Hp48= -github.com/go-openapi/swag/mangling v0.25.4/go.mod h1:6dxwu6QyORHpIIApsdZgb6wBk/DPU15MdyYj/ikn0Hg= -github.com/go-openapi/swag/netutils v0.25.4 h1:Gqe6K71bGRb3ZQLusdI8p/y1KLgV4M/k+/HzVSqT8H0= -github.com/go-openapi/swag/netutils v0.25.4/go.mod h1:m2W8dtdaoX7oj9rEttLyTeEFFEBvnAx9qHd5nJEBzYg= -github.com/go-openapi/swag/stringutils v0.25.4 h1:O6dU1Rd8bej4HPA3/CLPciNBBDwZj9HiEpdVsb8B5A8= -github.com/go-openapi/swag/stringutils v0.25.4/go.mod h1:GTsRvhJW5xM5gkgiFe0fV3PUlFm0dr8vki6/VSRaZK0= -github.com/go-openapi/swag/typeutils v0.25.4 h1:1/fbZOUN472NTc39zpa+YGHn3jzHWhv42wAJSN91wRw= -github.com/go-openapi/swag/typeutils v0.25.4/go.mod h1:Ou7g//Wx8tTLS9vG0UmzfCsjZjKhpjxayRKTHXf2pTE= -github.com/go-openapi/swag/yamlutils v0.25.4 h1:6jdaeSItEUb7ioS9lFoCZ65Cne1/RZtPBZ9A56h92Sw= -github.com/go-openapi/swag/yamlutils v0.25.4/go.mod h1:MNzq1ulQu+yd8Kl7wPOut/YHAAU/H6hL91fF+E2RFwc= -github.com/go-openapi/testify/enable/yaml/v2 v2.0.2 h1:0+Y41Pz1NkbTHz8NngxTuAXxEodtNSI1WG1c/m5Akw4= -github.com/go-openapi/testify/enable/yaml/v2 v2.0.2/go.mod h1:kme83333GCtJQHXQ8UKX3IBZu6z8T5Dvy5+CW3NLUUg= -github.com/go-openapi/testify/v2 v2.0.2 h1:X999g3jeLcoY8qctY/c/Z8iBHTbwLz7R2WXd6Ub6wls= -github.com/go-openapi/testify/v2 v2.0.2/go.mod h1:HCPmvFFnheKK2BuwSA0TbbdxJ3I16pjwMkYkP4Ywn54= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -566,6 +529,7 @@ github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/joonix/log v0.0.0-20200409080653-9c1d2ceb5f1d h1:k+SfYbN66Ev/GDVq39wYOXVW5RNd5kzzairbCe9dK5Q= github.com/joonix/log v0.0.0-20200409080653-9c1d2ceb5f1d/go.mod h1:fS54ONkjDV71zS9CDx3V9K21gJg7byKSvI4ajuWFNJw= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -655,7 +619,8 @@ github.com/magiconair/properties v1.7.4-0.20170902060319-8d7837e64d3c/go.mod h1: github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.7.0 h1:3l11YT8tm9MnwGFQ4kETwkzpAwY2Jt9lCrumCUW4+z4= github.com/manifoldco/promptui v0.7.0/go.mod h1:n4zTdgP0vr0S3w7/O/g98U+e0gwLScEXGwov2nIKuGQ= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= @@ -770,7 +735,6 @@ github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= @@ -969,8 +933,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -1049,7 +1013,6 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -1060,8 +1023,6 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe h1:nbdqkIGOGfUAD54q1s2YBcBz/WcsxCO9HUQ4aGV5hUw= github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/swaggo/swag v1.16.6 h1:qBNcx53ZaX+M5dxVyTrgQ0PJ/ACK+NzhwcbieTt+9yI= -github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4Xesg= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -1084,8 +1045,8 @@ github.com/umbracle/gohashtree v0.0.2-alpha.0.20230207094856-5b775a815c10/go.mod github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.27.7 h1:bH59vdhbjLv3LAvIu6gd0usJHgoTTPhCFib8qqOwXYU= -github.com/urfave/cli/v2 v2.27.7/go.mod h1:CyNAG/xg+iAOg0N4MPGZqVmv2rCoP267496AOXUZjA4= +github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= +github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= github.com/uudashr/gocognit v1.0.5 h1:rrSex7oHr3/pPLQ0xoWq108XMU8s678FJcQ+aSfOHa4= github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -1110,8 +1071,8 @@ github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguH github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 h1:FnBeRrxr7OU4VvAzt5X7s6266i6cSVkkFPS0TuXWbIg= -github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= +github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= +github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1184,10 +1145,6 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= -go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= -go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= -go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1308,7 +1265,6 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= @@ -1417,7 +1373,6 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1675,7 +1630,6 @@ gopkg.in/cenkalti/backoff.v1 v1.1.0/go.mod h1:J6Vskwqd+OMVJl8C33mmtxTBs2gyzfv7UD gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= @@ -1708,7 +1662,6 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -1747,8 +1700,8 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h6 sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= -sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=