mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-08 02:31:19 +00:00
b57effd096
* HTTP Beacon APIs: 3 state endpoints * remove API middleware e2e evaluator * remove evaluator registrations * review feedback * compilation fix
121 lines
5.1 KiB
Go
121 lines
5.1 KiB
Go
package apimiddleware
|
|
|
|
import (
|
|
"github.com/pkg/errors"
|
|
"github.com/prysmaticlabs/prysm/v4/api/gateway/apimiddleware"
|
|
)
|
|
|
|
// BeaconEndpointFactory creates endpoints used for running beacon chain API calls through the API Middleware.
|
|
type BeaconEndpointFactory struct {
|
|
}
|
|
|
|
func (f *BeaconEndpointFactory) IsNil() bool {
|
|
return f == nil
|
|
}
|
|
|
|
// Paths is a collection of all valid beacon chain API paths.
|
|
func (_ *BeaconEndpointFactory) Paths() []string {
|
|
return []string{
|
|
"/eth/v1/beacon/blinded_blocks",
|
|
"/eth/v1/beacon/blocks/{block_id}",
|
|
"/eth/v2/beacon/blocks/{block_id}",
|
|
"/eth/v1/beacon/blocks/{block_id}/attestations",
|
|
"/eth/v1/beacon/blinded_blocks/{block_id}",
|
|
"/eth/v1/beacon/pool/attester_slashings",
|
|
"/eth/v1/beacon/pool/proposer_slashings",
|
|
"/eth/v1/beacon/weak_subjectivity",
|
|
"/eth/v1/debug/beacon/states/{state_id}",
|
|
"/eth/v2/debug/beacon/states/{state_id}",
|
|
"/eth/v1/debug/beacon/heads",
|
|
"/eth/v2/debug/beacon/heads",
|
|
"/eth/v1/debug/fork_choice",
|
|
"/eth/v1/config/fork_schedule",
|
|
"/eth/v1/config/spec",
|
|
"/eth/v1/events",
|
|
"/eth/v1/validator/blocks/{slot}",
|
|
"/eth/v2/validator/blocks/{slot}",
|
|
"/eth/v1/validator/blinded_blocks/{slot}",
|
|
}
|
|
}
|
|
|
|
// Create returns a new endpoint for the provided API path.
|
|
func (_ *BeaconEndpointFactory) Create(path string) (*apimiddleware.Endpoint, error) {
|
|
endpoint := apimiddleware.DefaultEndpoint()
|
|
switch path {
|
|
case "/eth/v1/beacon/blocks/{block_id}":
|
|
endpoint.GetResponse = &BlockResponseJson{}
|
|
endpoint.CustomHandlers = []apimiddleware.CustomHandler{handleGetBeaconBlockSSZ}
|
|
case "/eth/v2/beacon/blocks/{block_id}":
|
|
endpoint.GetResponse = &BlockV2ResponseJson{}
|
|
endpoint.Hooks = apimiddleware.HookCollection{
|
|
OnPreSerializeMiddlewareResponseIntoJson: serializeV2Block,
|
|
}
|
|
endpoint.CustomHandlers = []apimiddleware.CustomHandler{handleGetBeaconBlockSSZV2}
|
|
case "/eth/v1/beacon/blocks/{block_id}/attestations":
|
|
endpoint.GetResponse = &BlockAttestationsResponseJson{}
|
|
case "/eth/v1/beacon/blinded_blocks/{block_id}":
|
|
endpoint.GetResponse = &BlindedBlockResponseJson{}
|
|
endpoint.Hooks = apimiddleware.HookCollection{
|
|
OnPreSerializeMiddlewareResponseIntoJson: serializeBlindedBlock,
|
|
}
|
|
endpoint.CustomHandlers = []apimiddleware.CustomHandler{handleGetBlindedBeaconBlockSSZ}
|
|
case "/eth/v1/beacon/pool/attester_slashings":
|
|
endpoint.PostRequest = &AttesterSlashingJson{}
|
|
endpoint.GetResponse = &AttesterSlashingsPoolResponseJson{}
|
|
case "/eth/v1/beacon/pool/proposer_slashings":
|
|
endpoint.PostRequest = &ProposerSlashingJson{}
|
|
endpoint.GetResponse = &ProposerSlashingsPoolResponseJson{}
|
|
case "/eth/v1/beacon/weak_subjectivity":
|
|
endpoint.GetResponse = &WeakSubjectivityResponse{}
|
|
case "/eth/v1/debug/beacon/states/{state_id}":
|
|
endpoint.GetResponse = &BeaconStateResponseJson{}
|
|
endpoint.CustomHandlers = []apimiddleware.CustomHandler{handleGetBeaconStateSSZ}
|
|
case "/eth/v2/debug/beacon/states/{state_id}":
|
|
endpoint.GetResponse = &BeaconStateV2ResponseJson{}
|
|
endpoint.Hooks = apimiddleware.HookCollection{
|
|
OnPreSerializeMiddlewareResponseIntoJson: serializeV2State,
|
|
}
|
|
endpoint.CustomHandlers = []apimiddleware.CustomHandler{handleGetBeaconStateSSZV2}
|
|
case "/eth/v1/debug/beacon/heads":
|
|
endpoint.GetResponse = &ForkChoiceHeadsResponseJson{}
|
|
case "/eth/v2/debug/beacon/heads":
|
|
endpoint.GetResponse = &V2ForkChoiceHeadsResponseJson{}
|
|
case "/eth/v1/debug/fork_choice":
|
|
endpoint.GetResponse = &ForkChoiceDumpJson{}
|
|
endpoint.Hooks = apimiddleware.HookCollection{
|
|
OnPreSerializeMiddlewareResponseIntoJson: prepareForkChoiceResponse,
|
|
}
|
|
case "/eth/v1/config/fork_schedule":
|
|
endpoint.GetResponse = &ForkScheduleResponseJson{}
|
|
case "/eth/v1/config/spec":
|
|
endpoint.GetResponse = &SpecResponseJson{}
|
|
case "/eth/v1/events":
|
|
endpoint.CustomHandlers = []apimiddleware.CustomHandler{handleEvents}
|
|
case "/eth/v1/validator/blocks/{slot}":
|
|
endpoint.GetResponse = &ProduceBlockResponseJson{}
|
|
endpoint.RequestURLLiterals = []string{"slot"}
|
|
endpoint.RequestQueryParams = []apimiddleware.QueryParam{{Name: "randao_reveal", Hex: true}, {Name: "graffiti", Hex: true}}
|
|
case "/eth/v2/validator/blocks/{slot}":
|
|
endpoint.GetResponse = &ProduceBlockResponseV2Json{}
|
|
endpoint.RequestURLLiterals = []string{"slot"}
|
|
endpoint.RequestQueryParams = []apimiddleware.QueryParam{{Name: "randao_reveal", Hex: true}, {Name: "graffiti", Hex: true}}
|
|
endpoint.Hooks = apimiddleware.HookCollection{
|
|
OnPreSerializeMiddlewareResponseIntoJson: serializeProducedV2Block,
|
|
}
|
|
endpoint.CustomHandlers = []apimiddleware.CustomHandler{handleProduceBlockSSZ}
|
|
case "/eth/v1/validator/blinded_blocks/{slot}":
|
|
endpoint.GetResponse = &ProduceBlindedBlockResponseJson{}
|
|
endpoint.RequestURLLiterals = []string{"slot"}
|
|
endpoint.RequestQueryParams = []apimiddleware.QueryParam{{Name: "randao_reveal", Hex: true}, {Name: "graffiti", Hex: true}}
|
|
endpoint.Hooks = apimiddleware.HookCollection{
|
|
OnPreSerializeMiddlewareResponseIntoJson: serializeProducedBlindedBlock,
|
|
}
|
|
endpoint.CustomHandlers = []apimiddleware.CustomHandler{handleProduceBlindedBlockSSZ}
|
|
default:
|
|
return nil, errors.New("invalid path")
|
|
}
|
|
|
|
endpoint.Path = path
|
|
return &endpoint, nil
|
|
}
|