prysm-pulse/beacon-chain/blockchain/chain_info.go
terence tsao 2e352cf5ff Add getter for GenesisTime (#3274)
* Add getter for gensis time

* Lint

* Lint
2019-08-22 11:41:05 -05:00

67 lines
1.8 KiB
Go

package blockchain
import (
"time"
ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
)
// ChainInfoRetriever defines a common interface for methods in blockchain service which
// directly retrieves chain info related data.
type ChainInfoRetriever interface {
HeadRetriever
CanonicalRetriever
FinalizationRetriever
GenesisTime() time.Time
}
// HeadRetriever defines a common interface for methods in blockchain service which
// directly retrieves head related data.
type HeadRetriever interface {
HeadSlot() uint64
HeadRoot() []byte
}
// CanonicalRetriever defines a common interface for methods in blockchain service which
// directly retrieves canonical roots related data.
type CanonicalRetriever interface {
CanonicalRoot(slot uint64) []byte
}
// FinalizationRetriever defines a common interface for methods in blockchain service which
// directly retrieves finalization related data.
type FinalizationRetriever interface {
FinalizedCheckpt() *ethpb.Checkpoint
}
// FinalizedCheckpt returns the latest finalized checkpoint tracked in fork choice service.
func (c *ChainService) FinalizedCheckpt() *ethpb.Checkpoint {
return c.forkChoiceStore.FinalizedCheckpt()
}
// HeadSlot returns the slot of the head of the chain.
func (c *ChainService) HeadSlot() uint64 {
return c.headSlot
}
// HeadRoot returns the root of the head of the chain.
func (c *ChainService) HeadRoot() []byte {
c.canonicalRootsLock.RLock()
defer c.canonicalRootsLock.RUnlock()
return c.canonicalRoots[c.headSlot]
}
// CanonicalRoot returns the canonical root of a given slot.
func (c *ChainService) CanonicalRoot(slot uint64) []byte {
c.canonicalRootsLock.RLock()
defer c.canonicalRootsLock.RUnlock()
return c.canonicalRoots[slot]
}
// GenesisTime returns the genesis time of beacon chain.
func (c *ChainService) GenesisTime() time.Time {
return c.genesisTime
}