blockchain

package
v0.2.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 21, 2019 License: GPL-3.0 Imports: 34 Imported by: 0

Documentation

Overview

Package blockchain defines the life-cycle and status of the beacon chain as well as the Ethereum Serenity beacon chain fork-choice rule based on Casper Proof of Stake finality.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AttestationReceiver

type AttestationReceiver interface {
	ReceiveAttestationNoPubsub(ctx context.Context, att *ethpb.Attestation) error
}

AttestationReceiver interface defines the methods of chain service receive and processing new attestations.

type BlockReceiver

type BlockReceiver interface {
	ReceiveBlock(ctx context.Context, block *ethpb.BeaconBlock) error
	ReceiveBlockNoPubsub(ctx context.Context, block *ethpb.BeaconBlock) error
	ReceiveBlockNoPubsubForkchoice(ctx context.Context, block *ethpb.BeaconBlock) error
	ReceiveBlockNoVerify(ctx context.Context, block *ethpb.BeaconBlock) error
}

BlockReceiver interface defines the methods of chain service receive and processing new blocks.

type CanonicalRootFetcher

type CanonicalRootFetcher interface {
	CanonicalRoot(slot uint64) []byte
}

CanonicalRootFetcher defines a common interface for methods in blockchain service which directly retrieves canonical roots related data.

type ChainFeeds

type ChainFeeds interface {
	StateInitializedFeed() *event.Feed
}

ChainFeeds interface defines the methods of the Service which provide state related information feeds to consumers.

type ChainInfoFetcher

type ChainInfoFetcher interface {
	HeadFetcher
	CanonicalRootFetcher
	FinalizationFetcher
}

ChainInfoFetcher defines a common interface for methods in blockchain service which directly retrieves chain info related data.

type Config

type Config struct {
	BeaconBlockBuf    int
	ChainStartFetcher powchain.ChainStartFetcher
	BeaconDB          db.Database
	DepositCache      *depositcache.DepositCache
	OpsPoolService    operations.OperationFeeds
	P2p               p2p.Broadcaster
	MaxRoutines       int64
	StateNotifier     statefeed.Notifier
}

Config options for the service.

type FinalizationFetcher

type FinalizationFetcher interface {
	FinalizedCheckpt() *ethpb.Checkpoint
}

FinalizationFetcher defines a common interface for methods in blockchain service which directly retrieves finalization related data.

type ForkFetcher

type ForkFetcher interface {
	CurrentFork() *pb.Fork
}

ForkFetcher retrieves the current fork information of the Ethereum beacon chain.

type GenesisTimeFetcher

type GenesisTimeFetcher interface {
	GenesisTime() time.Time
}

GenesisTimeFetcher retrieves the Eth2 genesis timestamp.

type HeadFetcher

type HeadFetcher interface {
	HeadSlot() uint64
	HeadRoot() []byte
	HeadBlock() *ethpb.BeaconBlock
	HeadState(ctx context.Context) (*pb.BeaconState, error)
}

HeadFetcher defines a common interface for methods in blockchain service which directly retrieves head related data.

type Service

type Service struct {
	// contains filtered or unexported fields
}

Service represents a service that handles the internal logic of managing the full PoS beacon chain.

func NewService

func NewService(ctx context.Context, cfg *Config) (*Service, error)

NewService instantiates a new block service instance that will be registered into a running beacon node.

func (*Service) CanonicalRoot

func (s *Service) CanonicalRoot(slot uint64) []byte

CanonicalRoot returns the canonical root of a given slot.

func (*Service) CurrentFork

func (s *Service) CurrentFork() *pb.Fork

CurrentFork retrieves the latest fork information of the beacon chain.

func (*Service) FinalizedCheckpt

func (s *Service) FinalizedCheckpt() *ethpb.Checkpoint

FinalizedCheckpt returns the latest finalized checkpoint tracked in fork choice service.

func (*Service) GenesisTime

func (s *Service) GenesisTime() time.Time

GenesisTime returns the genesis time of beacon chain.

func (*Service) HeadBlock

func (s *Service) HeadBlock() *ethpb.BeaconBlock

HeadBlock returns the head block of the chain.

func (*Service) HeadRoot

func (s *Service) HeadRoot() []byte

HeadRoot returns the root of the head of the chain.

func (*Service) HeadSlot

func (s *Service) HeadSlot() uint64

HeadSlot returns the slot of the head of the chain.

func (*Service) HeadState

func (s *Service) HeadState(ctx context.Context) (*pb.BeaconState, error)

HeadState returns the head state of the chain. If the head state is nil from service struct, it will attempt to get from DB and error if nil again.

func (*Service) HeadsHandler

func (s *Service) HeadsHandler(w http.ResponseWriter, _ *http.Request)

HeadsHandler is a handler to serve /heads page in metrics.

func (*Service) ReceiveAttestationNoPubsub

func (s *Service) ReceiveAttestationNoPubsub(ctx context.Context, att *ethpb.Attestation) error

ReceiveAttestationNoPubsub is a function that defines the operations that are preformed on attestation that is received from regular sync. The operations consist of:

  1. Validate attestation, update validator's latest vote
  2. Apply fork choice to the processed attestation
  3. Save latest head info

func (*Service) ReceiveBlock

func (s *Service) ReceiveBlock(ctx context.Context, block *ethpb.BeaconBlock) error

ReceiveBlock is a function that defines the operations that are preformed on blocks that is received from rpc service. The operations consists of:

  1. Gossip block to other peers
  2. Validate block, apply state transition and update check points
  3. Apply fork choice to the processed block
  4. Save latest head info

func (*Service) ReceiveBlockNoPubsub

func (s *Service) ReceiveBlockNoPubsub(ctx context.Context, block *ethpb.BeaconBlock) error

ReceiveBlockNoPubsub is a function that defines the the operations (minus pubsub) that are preformed on blocks that is received from regular sync service. The operations consists of:

  1. Validate block, apply state transition and update check points
  2. Apply fork choice to the processed block
  3. Save latest head info

func (*Service) ReceiveBlockNoPubsubForkchoice

func (s *Service) ReceiveBlockNoPubsubForkchoice(ctx context.Context, block *ethpb.BeaconBlock) error

ReceiveBlockNoPubsubForkchoice is a function that defines the all operations (minus pubsub and forkchoice) that are preformed blocks that is received from initial sync service. The operations consists of:

  1. Validate block, apply state transition and update check points
  2. Save latest head info

func (*Service) ReceiveBlockNoVerify

func (s *Service) ReceiveBlockNoVerify(ctx context.Context, block *ethpb.BeaconBlock) error

ReceiveBlockNoVerify runs state transition on a input block without verifying the block's BLS contents. Depends on the security model, this is the "minimal" work a node can do to sync the chain. It simulates light client behavior and assumes 100% trust with the syncing peer.

func (*Service) Start

func (s *Service) Start()

Start a blockchain service's main event loop.

func (*Service) StateInitializedFeed

func (s *Service) StateInitializedFeed() *event.Feed

StateInitializedFeed returns a feed that is written to when the beacon state is first initialized.

func (*Service) Status

func (s *Service) Status() error

Status always returns nil unless there is an error condition that causes this service to be unhealthy.

func (*Service) Stop

func (s *Service) Stop() error

Stop the blockchain service's main event loop and associated goroutines.

Directories

Path Synopsis
Package forkchoice implements the Latest Message Driven GHOST (Greediest Heaviest Observed Sub-Tree) algorithm as the Ethereum Serenity beacon chain fork choice rule.
Package forkchoice implements the Latest Message Driven GHOST (Greediest Heaviest Observed Sub-Tree) algorithm as the Ethereum Serenity beacon chain fork choice rule.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL