-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Eth2 API: Add outline for beacon endpoints (#7408)
* Start Beacon API outline * Rename to v1 * Add impl * Change to outline * Add comments * Remove unneeded items * Fix linting * tidy * Fix visibility * go.sum * Fix deps * Tidy * Add check for interface type and fix pointers * Fix pointer name Co-authored-by: Preston Van Loon <preston@prysmaticlabs.com>
- Loading branch information
1 parent
3e0b205
commit cf1c346
Showing
11 changed files
with
285 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
load("@io_bazel_rules_go//go:def.bzl", "go_test") | ||
load("@prysm//tools/go:def.bzl", "go_library") | ||
|
||
go_library( | ||
name = "go_default_library", | ||
srcs = [ | ||
"blocks.go", | ||
"config.go", | ||
"pool.go", | ||
"server.go", | ||
"state.go", | ||
"validator.go", | ||
], | ||
importpath = "github.com/prysmaticlabs/prysm/beacon-chain/rpc/beaconv1", | ||
visibility = ["//beacon-chain:__subpackages__"], | ||
deps = [ | ||
"//beacon-chain/blockchain:go_default_library", | ||
"//beacon-chain/cache/depositcache:go_default_library", | ||
"//beacon-chain/core/feed/block:go_default_library", | ||
"//beacon-chain/core/feed/operation:go_default_library", | ||
"//beacon-chain/core/feed/state:go_default_library", | ||
"//beacon-chain/db:go_default_library", | ||
"//beacon-chain/operations/attestations:go_default_library", | ||
"//beacon-chain/operations/slashings:go_default_library", | ||
"//beacon-chain/p2p:go_default_library", | ||
"//beacon-chain/powchain:go_default_library", | ||
"//beacon-chain/state/stategen:go_default_library", | ||
"//beacon-chain/sync:go_default_library", | ||
"//proto/beacon/p2p/v1:go_default_library", | ||
"@com_github_gogo_protobuf//types:go_default_library", | ||
"@com_github_prysmaticlabs_ethereumapis//eth/v1:go_default_library", | ||
], | ||
) | ||
|
||
go_test( | ||
name = "go_default_test", | ||
srcs = ["server_test.go"], | ||
embed = [":go_default_library"], | ||
deps = ["@com_github_prysmaticlabs_ethereumapis//eth/v1:go_default_library"], | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package beaconv1 | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
|
||
ptypes "github.com/gogo/protobuf/types" | ||
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1" | ||
) | ||
|
||
// GetBlockHeader retrieves block header for given block id. | ||
func (bs *Server) GetBlockHeader(ctx context.Context, req *ethpb.BlockRequest) (*ethpb.BlockHeaderResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// ListBlockHeaders retrieves block headers matching given query. By default it will fetch current head slot blocks. | ||
func (bs *Server) ListBlockHeaders(ctx context.Context, req *ethpb.BlockHeadersRequest) (*ethpb.BlockHeadersResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// SubmitBlock instructs the beacon node to broadcast a newly signed beacon block to the beacon network, to be | ||
// included in the beacon chain. The beacon node is not required to validate the signed BeaconBlock, and a successful | ||
// response (20X) only indicates that the broadcast has been successful. The beacon node is expected to integrate the | ||
// new block into its state, and therefore validate the block internally, however blocks which fail the validation are | ||
// still broadcast but a different status code is returned (202). | ||
func (bs *Server) SubmitBlock(ctx context.Context, req *ethpb.BeaconBlockContainer) (*ptypes.Empty, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// GetBlock retrieves block details for given block id. | ||
func (bs *Server) GetBlock(ctx context.Context, req *ethpb.BlockRequest) (*ethpb.BlockResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// GetBlockRoot retrieves hashTreeRoot of BeaconBlock/BeaconBlockHeader. | ||
func (bs *Server) GetBlockRoot(ctx context.Context, req *ethpb.BlockRequest) (*ethpb.BlockRootResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// ListBlockAttestations retrieves attestation included in requested block. | ||
func (bs *Server) ListBlockAttestations(ctx context.Context, req *ethpb.BlockRequest) (*ethpb.BlockAttestationsResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package beaconv1 | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
|
||
ptypes "github.com/gogo/protobuf/types" | ||
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1" | ||
) | ||
|
||
// GetForkSchedule retrieve all scheduled upcoming forks this node is aware of. | ||
func (bs *Server) GetForkSchedule(ctx context.Context, req *ptypes.Empty) (*ethpb.ForkScheduleResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// GetSpec retrieves specification configuration (without Phase 1 params) used on this node. Specification params list | ||
// Values are returned with following format: | ||
// - any value starting with 0x in the spec is returned as a hex string. | ||
// - all other values are returned as number. | ||
func (bs *Server) GetSpec(ctx context.Context, req *ptypes.Empty) (*ethpb.SpecResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// GetDepositContract retrieves deposit contract address and genesis fork version. | ||
func (bs *Server) GetDepositContract(ctx context.Context, req *ptypes.Empty) (*ethpb.DepositContractResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package beaconv1 | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
|
||
ptypes "github.com/gogo/protobuf/types" | ||
|
||
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1" | ||
) | ||
|
||
// ListPoolAttestations retrieves attestations known by the node but | ||
// not necessarily incorporated into any block. | ||
func (bs *Server) ListPoolAttestations(ctx context.Context, req *ethpb.AttestationsPoolRequest) (*ethpb.AttestationsPoolResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// SubmitAttestation submits Attestation object to node. If attestation passes all validation | ||
// constraints, node MUST publish attestation on appropriate subnet. | ||
func (bs *Server) SubmitAttestation(ctx context.Context, req *ethpb.Attestation) (*ptypes.Empty, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// ListPoolAttesterSlashings retrieves attester slashings known by the node but | ||
// not necessarily incorporated into any block. | ||
func (bs *Server) ListPoolAttesterSlashings(ctx context.Context, req *ptypes.Empty) (*ethpb.AttesterSlashingsPoolResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// SubmitAttesterSlashing submits AttesterSlashing object to node's pool and | ||
// if passes validation node MUST broadcast it to network. | ||
func (bs *Server) SubmitAttesterSlashing(ctx context.Context, req *ethpb.AttesterSlashing) (*ptypes.Empty, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// ListPoolProposerSlashings retrieves proposer slashings known by the node | ||
// but not necessarily incorporated into any block. | ||
func (bs *Server) ListPoolProposerSlashings(ctx context.Context, req *ptypes.Empty) (*ethpb.ProposerSlashingPoolResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// SubmitProposerSlashing submits AttesterSlashing object to node's pool and if | ||
// passes validation node MUST broadcast it to network. | ||
func (bs *Server) SubmitProposerSlashing(ctx context.Context, req *ethpb.ProposerSlashing) (*ptypes.Empty, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// ListPoolVoluntaryExits retrieves voluntary exits known by the node but | ||
// not necessarily incorporated into any block. | ||
func (bs *Server) ListPoolVoluntaryExits(ctx context.Context, req *ptypes.Empty) (*ethpb.VoluntaryExitsPoolResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// SubmitVoluntaryExit submits SignedVoluntaryExit object to node's pool | ||
// and if passes validation node MUST broadcast it to network. | ||
func (bs *Server) SubmitVoluntaryExit(ctx context.Context, req *ethpb.SignedVoluntaryExit) (*ptypes.Empty, error) { | ||
return nil, errors.New("unimplemented") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
// Package beaconv1 defines a gRPC beacon service implementation, | ||
// following the official API standards https://ethereum.github.io/eth2.0-APIs/#/. | ||
// This package includes the beacon and config endpoints. | ||
package beaconv1 | ||
|
||
import ( | ||
"context" | ||
"time" | ||
|
||
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain" | ||
"github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache" | ||
blockfeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/block" | ||
"github.com/prysmaticlabs/prysm/beacon-chain/core/feed/operation" | ||
statefeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/state" | ||
"github.com/prysmaticlabs/prysm/beacon-chain/db" | ||
"github.com/prysmaticlabs/prysm/beacon-chain/operations/attestations" | ||
"github.com/prysmaticlabs/prysm/beacon-chain/operations/slashings" | ||
"github.com/prysmaticlabs/prysm/beacon-chain/p2p" | ||
"github.com/prysmaticlabs/prysm/beacon-chain/powchain" | ||
"github.com/prysmaticlabs/prysm/beacon-chain/state/stategen" | ||
"github.com/prysmaticlabs/prysm/beacon-chain/sync" | ||
pbp2p "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" | ||
) | ||
|
||
// Server defines a server implementation of the gRPC Beacon Chain service, | ||
// providing RPC endpoints to access data relevant to the Ethereum 2.0 phase 0 | ||
// beacon chain. | ||
type Server struct { | ||
BeaconDB db.ReadOnlyDatabase | ||
Ctx context.Context | ||
ChainStartFetcher powchain.ChainStartFetcher | ||
HeadFetcher blockchain.HeadFetcher | ||
FinalizationFetcher blockchain.FinalizationFetcher | ||
DepositFetcher depositcache.DepositFetcher | ||
BlockFetcher powchain.POWBlockFetcher | ||
GenesisTimeFetcher blockchain.TimeFetcher | ||
GenesisFetcher blockchain.GenesisFetcher | ||
BlockReceiver blockchain.BlockReceiver | ||
StateNotifier statefeed.Notifier | ||
BlockNotifier blockfeed.Notifier | ||
AttestationNotifier operation.Notifier | ||
Broadcaster p2p.Broadcaster | ||
AttestationsPool attestations.Pool | ||
SlashingsPool *slashings.Pool | ||
CanonicalStateChan chan *pbp2p.BeaconState | ||
ChainStartChan chan time.Time | ||
StateGen *stategen.State | ||
SyncChecker sync.Checker | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package beaconv1 | ||
|
||
import ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1" | ||
|
||
var _ = ethpb.BeaconChainServer(&Server{}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package beaconv1 | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
|
||
ptypes "github.com/gogo/protobuf/types" | ||
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1" | ||
) | ||
|
||
// GetGenesis retrieves details of the chain's genesis which can be used to identify chain. | ||
func (bs *Server) GetGenesis(ctx context.Context, _ *ptypes.Empty) (*ethpb.GenesisResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// GetStateRoot calculates HashTreeRoot for state with given 'stateId'. If stateId is root, same value will be returned. | ||
func (bs *Server) GetStateRoot(ctx context.Context, req *ethpb.StateRequest) (*ethpb.StateRootResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// GetStateFork returns Fork object for state with given 'stateId'. | ||
func (bs *Server) GetStateFork(ctx context.Context, req *ethpb.StateRequest) (*ethpb.StateForkResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// GetFinalityCheckpoints returns finality checkpoints for state with given 'stateId'. In case finality is | ||
// not yet achieved, checkpoint should return epoch 0 and ZERO_HASH as root. | ||
func (bs *Server) GetFinalityCheckpoints(ctx context.Context, req *ethpb.StateRequest) (*ethpb.StateFinalityCheckpointResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package beaconv1 | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
|
||
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1" | ||
) | ||
|
||
// GetValidator returns a validator specified by state and id or public key along with status and balance. | ||
func (bs *Server) GetValidator(ctx context.Context, req *ethpb.StateValidatorRequest) (*ethpb.StateValidatorResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// ListValidators returns filterable list of validators with their balance, status and index. | ||
func (bs *Server) ListValidators(ctx context.Context, req *ethpb.StateValidatorsRequest) (*ethpb.StateValidatorsResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// ListValidatorBalances returns a filterable list of validator balances. | ||
func (bs *Server) ListValidatorBalances(ctx context.Context, req *ethpb.StateValidatorsRequest) (*ethpb.ValidatorBalancesResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} | ||
|
||
// ListCommittees retrieves the committees for the given state at the given epoch. | ||
func (bs *Server) ListCommittees(ctx context.Context, req *ethpb.StateCommitteesRequest) (*ethpb.StateCommitteesResponse, error) { | ||
return nil, errors.New("unimplemented") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters