syntax = "proto3"; package ethereum.eth.v1alpha1; import "proto/prysm/v1alpha1/beacon_block.proto"; import "proto/prysm/v1alpha1/beacon_state.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 = "PowchainProto"; option java_package = "org.ethereum.eth.v1alpha1"; option php_namespace = "Ethereum\\Eth\\v1alpha1"; // ETH1ChainData is a container which holds all the relevant eth1 // information message ETH1ChainData { LatestETH1Data current_eth1_data = 1 ; ChainStartData chainstart_data = 2; 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; Eth1Data eth1_data = 4; repeated 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; Deposit deposit = 3; bytes deposit_root = 4; }