syntax = "proto3"; package prysm.beacon.db; import "eth/v1alpha1/beacon_block.proto"; import "proto/beacon/p2p/v1/types.proto"; option go_package = "github.com/prysmaticlabs/prysm/proto/beacon/db"; // ETH1ChainData is a container which holds all the relevant eth1 // information message ETH1ChainData { LatestETH1Data current_eth1_data = 1 ; ChainStartData chainstart_data = 2; ethereum.beacon.p2p.v1.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; }