syntax = "proto3"; package ethereum.prysm.v2; import "proto/prysm/v1alpha1/beacon_block.proto"; import "proto/prysm/v2/state/beacon_state.proto"; option csharp_namespace = "Ethereum.Prysm.V2"; option go_package = "github.com/prysmaticlabs/prysm/proto/prysm/v2;v2"; option java_multiple_files = true; option java_outer_classname = "PowchainProto"; option java_package = "org.ethereum.prysm.v2"; option php_namespace = "Ethereum\\Prysm\\v2"; // ETH1ChainData is a container which holds all the relevant eth1 // information message ETH1ChainData { LatestETH1Data current_eth1_data = 1 ; ChainStartData chainstart_data = 2; ethereum.prysm.v2.state.BeaconState beacon_state = 3; SparseMerkleTrie trie = 4; repeated DepositContainer deposit_containers = 5; } // LatestETH1Data contains the current state of the eth1 chain. message LatestETH1Data { uint64 block_height = 2; uint64 block_time = 3; bytes block_hash = 4; uint64 last_requested_block = 5; } // ChainStartData contains all the information related to chainstart. message ChainStartData { bool chainstarted = 1; uint64 genesis_time = 2; uint64 genesis_block = 3; ethereum.eth.v1alpha1.Eth1Data eth1_data = 4; repeated ethereum.eth.v1alpha1.Deposit chainstart_deposits = 5; } // SparseMerkleTrie is used to describe the model of our deposit trie. message SparseMerkleTrie { uint64 depth = 1; repeated TrieLayer layers = 2; repeated bytes original_items = 3; } // TrieLayer is used to represent each layer in the deposit tree due to // the lack of protobuf support for multi-dimensional arrays.(Ex: 3d,4d,...) message TrieLayer { repeated bytes layer = 1; } // DepositContainer defines a container that can be used to store // deposit related information for a particular deposit. message DepositContainer { int64 index = 1; uint64 eth1_block_height = 2; ethereum.eth.v1alpha1.Deposit deposit = 3; bytes deposit_root = 4; }