syntax = "proto3"; package ethereum.beacon.rpc.v1; import "proto/beacon/p2p/v1/types.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; service BeaconService { rpc WaitForChainStart(google.protobuf.Empty) returns (stream ChainStartResponse); // CanonicalHead can be called on demand to fetch the current, head block of a beacon node. rpc CanonicalHead(google.protobuf.Empty) returns (ethereum.beacon.p2p.v1.BeaconBlock); // LatestAttestation streams the latest aggregated attestation to connected validator clients. rpc LatestAttestation(google.protobuf.Empty) returns (stream ethereum.beacon.p2p.v1.Attestation); rpc PendingDeposits(google.protobuf.Empty) returns (PendingDepositsResponse); rpc Eth1Data(google.protobuf.Empty) returns (Eth1DataResponse); rpc ForkData(google.protobuf.Empty) returns (ethereum.beacon.p2p.v1.Fork); } service AttesterService { rpc AttestHead(ethereum.beacon.p2p.v1.Attestation) returns (AttestResponse); rpc AttestationDataAtSlot(AttestationDataRequest) returns (AttestationDataResponse); } service ProposerService { rpc ProposerIndex(ProposerIndexRequest) returns (ProposerIndexResponse); rpc PendingAttestations(PendingAttestationsRequest) returns (PendingAttestationsResponse); rpc ProposeBlock(ethereum.beacon.p2p.v1.BeaconBlock) returns (ProposeResponse); rpc ComputeStateRoot(ethereum.beacon.p2p.v1.BeaconBlock) returns (StateRootResponse); } service ValidatorService { rpc WaitForActivation(ValidatorActivationRequest) returns (stream ValidatorActivationResponse); rpc ValidatorIndex(ValidatorIndexRequest) returns (ValidatorIndexResponse); rpc CommitteeAssignment(CommitteeAssignmentsRequest) returns (CommitteeAssignmentResponse); rpc ValidatorStatus(ValidatorIndexRequest) returns (ValidatorStatusResponse); rpc ValidatorPerformance(ValidatorPerformanceRequest) returns (ValidatorPerformanceResponse); } message ValidatorPerformanceRequest { uint64 slot = 1; bytes public_key = 2; } message ValidatorPerformanceResponse { uint64 balance = 1; uint64 total_validators = 2; uint64 total_active_validators = 3; float average_validator_balance = 4; } message ValidatorActivationRequest { bytes pubkey = 1; } message ValidatorActivationResponse { ethereum.beacon.p2p.v1.Validator validator = 1; } message AttestationDataRequest { uint64 shard = 1; uint64 slot = 2; } message AttestationDataResponse { bytes beacon_block_root_hash32 = 1; bytes epoch_boundary_root_hash32 = 2; uint64 justified_epoch = 3; bytes justified_block_root_hash32 = 4; ethereum.beacon.p2p.v1.Crosslink latest_crosslink = 5; uint64 head_slot = 6; } message PendingAttestationsRequest { bool filter_ready_for_inclusion = 1; uint64 proposal_block_slot = 2; } message PendingAttestationsResponse { repeated ethereum.beacon.p2p.v1.Attestation pending_attestations = 1; } message ChainStartResponse { bool started = 1; uint64 genesis_time = 2; } message ProposeRequest { bytes parent_hash = 1; uint64 slot_number = 2; bytes randao_reveal = 3; bytes attestation_bitmask = 4; repeated uint64 attestation_aggregate_sig = 5; google.protobuf.Timestamp timestamp = 6; } message ProposeResponse { bytes block_root_hash32 = 1; } message ProposerIndexRequest { uint64 slot_number = 1; } message ProposerIndexResponse { uint64 index = 1; } message StateRootResponse { bytes state_root = 1; } message AttestResponse { bytes attestation_hash = 1; } enum ValidatorRole { UNKNOWN = 0; ATTESTER = 1; PROPOSER = 2; } message ValidatorIndexRequest { bytes public_key = 1; } message ValidatorIndexResponse { uint64 index = 1; } message CommitteeAssignmentsRequest { uint64 epoch_start = 1; repeated bytes public_keys = 2; } message PendingDepositsResponse { repeated ethereum.beacon.p2p.v1.Deposit pending_deposits = 1; } message CommitteeAssignmentResponse { repeated CommitteeAssignment assignment = 1; message CommitteeAssignment { repeated uint64 committee = 1; uint64 shard = 2; uint64 slot = 3; bool is_proposer = 4; bytes public_key = 5; ValidatorStatus status = 6; } } message ValidatorStatusResponse { ValidatorStatus status = 1; } message Eth1DataResponse { ethereum.beacon.p2p.v1.Eth1Data eth1_data = 1; } enum ValidatorStatus { UNKNOWN_STATUS = 0; PENDING_ACTIVE = 1; ACTIVE = 2; INITIATED_EXIT = 3; WITHDRAWABLE = 4; EXITED = 5; EXITED_SLASHED = 6; }