syntax = "proto3";

package ethereum.eth.v1alpha1;

import "google/protobuf/descriptor.proto";
import "proto/eth/ext/options.proto";

option csharp_namespace = "Ethereum.Eth.V1alpha1";
option go_package = "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1;eth";
option java_multiple_files = true;
option java_outer_classname = "P2PMessagesProto";
option java_package = "org.ethereum.eth.v1alpha1";
option php_namespace = "Ethereum\\Eth\\v1alpha1";

message Status {
  bytes fork_digest = 1 [(ethereum.eth.ext.ssz_size) = "4"];
  bytes finalized_root = 2 [(ethereum.eth.ext.ssz_size) = "32"];
  uint64 finalized_epoch = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
  bytes head_root = 4 [(ethereum.eth.ext.ssz_size) = "32"];
  uint64 head_slot = 5 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
}

message BeaconBlocksByRangeRequest {
  uint64 start_slot = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
  uint64 count = 2;
  uint64 step = 3;
}

message ENRForkID {
  bytes current_fork_digest = 1 [(ethereum.eth.ext.ssz_size) = "4"];
  bytes next_fork_version = 2 [(ethereum.eth.ext.ssz_size) = "4"];
  uint64 next_fork_epoch = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
}
/*
 Spec Definition:
 MetaData
 (
  seq_number: uint64
  attnets: Bitvector[ATTESTATION_SUBNET_COUNT]
 )
*/
message MetaDataV0 {
  uint64 seq_number = 1;
  bytes attnets = 2 [(ethereum.eth.ext.ssz_size) = "8", (ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/go-bitfield.Bitvector64"];
}

/*
 Spec Definition:
 MetaData
 (
 seq_number: uint64
 attnets: Bitvector[ATTESTATION_SUBNET_COUNT]
 )
*/
message MetaDataV1 {
  uint64 seq_number = 1;
  bytes attnets = 2 [(ethereum.eth.ext.ssz_size) = "8", (ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/go-bitfield.Bitvector64"];
  bytes syncnets = 3 [(ethereum.eth.ext.ssz_size) = "1", (ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/go-bitfield.Bitvector4"];
}