package helpers import ( "errors" "github.com/prysmaticlabs/prysm/beacon-chain/rpc/statefetcher" "github.com/prysmaticlabs/prysm/beacon-chain/state/stategen" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) // PrepareStateFetchGRPCError returns an appropriate gRPC error based on the supplied argument. // The argument error should be a result of fetching state. func PrepareStateFetchGRPCError(err error) error { if errors.Is(err, stategen.ErrSlotBeforeOrigin) { return status.Errorf(codes.NotFound, "lacking historical data needed to fulfill request") } if stateNotFoundErr, ok := err.(*statefetcher.StateNotFoundError); ok { return status.Errorf(codes.NotFound, "State not found: %v", stateNotFoundErr) } if parseErr, ok := err.(*statefetcher.StateIdParseError); ok { return status.Errorf(codes.InvalidArgument, "Invalid state ID: %v", parseErr) } return status.Errorf(codes.Internal, "Invalid state ID: %v", err) } // IndexedVerificationFailure represents a collection of verification failures. type IndexedVerificationFailure struct { Failures []*SingleIndexedVerificationFailure `json:"failures"` } // SingleIndexedVerificationFailure represents an issue when verifying a single indexed object e.g. an item in an array. type SingleIndexedVerificationFailure struct { Index int `json:"index"` Message string `json:"message"` } // SyncDetails contain details about sync status. type SyncDetails struct { HeadSlot string `json:"head_slot"` SyncDistance string `json:"sync_distance"` IsSyncing bool `json:"is_syncing"` } // SyncDetailsContainer is a wrapper for SyncDetails. type SyncDetailsContainer struct { SyncDetails *SyncDetails `json:"sync_details"` }