// Copyright 2020 Prysmatic Labs. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package ethereum.eth.v1; import "google/protobuf/descriptor.proto"; import "proto/eth/ext/options.proto"; import "proto/eth/v1/attestation.proto"; import "proto/eth/v1/beacon_block.proto"; import "proto/eth/v1/validator.proto"; option csharp_namespace = "Ethereum.Eth.V1"; option go_package = "github.com/prysmaticlabs/prysm/proto/eth/v1"; option java_multiple_files = true; option java_outer_classname = "BeaconStateProto"; option java_package = "org.ethereum.eth.v1"; option php_namespace = "Ethereum\\Eth\\v1"; message BeaconState { // Versioning [1001-2000] uint64 genesis_time = 1001; bytes genesis_validators_root = 1002 [(ethereum.eth.ext.ssz_size) = "32"]; uint64 slot = 1003 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"]; Fork fork = 1004; // History [2001-3000] BeaconBlockHeader latest_block_header = 2001; repeated bytes block_roots = 2002 [(ethereum.eth.ext.ssz_size) = "block_roots.size"]; repeated bytes state_roots = 2003 [(ethereum.eth.ext.ssz_size) = "state_roots.size"]; repeated bytes historical_roots = 2004 [(ethereum.eth.ext.ssz_size) = "?,32", (ethereum.eth.ext.ssz_max) = "16777216"]; // Eth1 [3001-4000] Eth1Data eth1_data = 3001; repeated Eth1Data eth1_data_votes = 3002 [(ethereum.eth.ext.ssz_max) = "eth1_data_votes.size"]; uint64 eth1_deposit_index = 3003; // Registry [4001-5000] repeated Validator validators = 4001 [(ethereum.eth.ext.ssz_max) = "1099511627776"]; repeated uint64 balances = 4002 [(ethereum.eth.ext.ssz_max) = "1099511627776"]; // Randomness [5001-6000] repeated bytes randao_mixes = 5001 [(ethereum.eth.ext.ssz_size) = "randao_mixes.size"]; // Slashings [6001-7000] repeated uint64 slashings = 6001 [(ethereum.eth.ext.ssz_size) = "slashings.size"]; // Attestations [7001-8000] repeated PendingAttestation previous_epoch_attestations = 7001 [(ethereum.eth.ext.ssz_max) = "previous_epoch_attestations.max"]; repeated PendingAttestation current_epoch_attestations = 7002 [(ethereum.eth.ext.ssz_max) = "current_epoch_attestations.max"]; // Finality [8001-9000] // Spec type [4]Bitvector which means this would be a fixed size of 4 bits. bytes justification_bits = 8001 [(ethereum.eth.ext.ssz_size) = "1", (ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/go-bitfield.Bitvector4"]; Checkpoint previous_justified_checkpoint = 8002; Checkpoint current_justified_checkpoint = 8003; Checkpoint finalized_checkpoint = 8004; } message PendingAttestation { // Bitfield representation of validator indices that have voted exactly // the same vote and have been aggregated into this attestation. bytes aggregation_bits = 1 [(ethereum.eth.ext.ssz_max) = "2048", (ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/go-bitfield.Bitlist"]; AttestationData data = 2; // The difference of when attestation gets created and get included on chain. uint64 inclusion_delay = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"]; // The proposer who included the attestation in the block. uint64 proposer_index = 4 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"]; } message Committee { uint64 index = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.CommitteeIndex"]; uint64 slot = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"]; repeated uint64 validators = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"]; } // Fork structure used for indicating beacon chain versioning and forks. message Fork { bytes previous_version = 1 [(ethereum.eth.ext.ssz_size) = "4"]; bytes current_version = 2 [(ethereum.eth.ext.ssz_size) = "4"]; uint64 epoch = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"]; } message ForkChoiceHeadsResponse { repeated ForkChoiceHead data = 1; } message ForkChoiceHead { bytes root = 1 [(ethereum.eth.ext.ssz_size) = "32"]; uint64 slot = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"]; } message BeaconStateResponse { BeaconState data = 1; } message BeaconStateSSZResponse { bytes data = 1; }