sync

package
v2.0.1 Latest Latest
Warning

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

Go to latest
Published: Oct 5, 2021 License: GPL-3.0 Imports: 80 Imported by: 0

Documentation

Overview

Package sync TODO(3147): Add details on how sync works.

Package sync includes all chain-synchronization logic for the beacon node, including gossip-sub validators for blocks, attestations, and other p2p messages, as well as ability to process and respond to block requests by peers.

Index

Constants

This section is empty.

Variables

View Source
var ErrInvalidFetchedData = errors.New("invalid data returned from peer")

ErrInvalidFetchedData is thrown if stream fails to provide requested blocks.

Functions

func ReadChunkedBlock

func ReadChunkedBlock(stream libp2pcore.Stream, chain blockchain.ChainInfoFetcher, p2p p2p.P2P, isFirstChunk bool) (block.SignedBeaconBlock, error)

ReadChunkedBlock handles each response chunk that is sent by the peer and converts it into a beacon block.

func ReadStatusCode

func ReadStatusCode(stream network.Stream, encoding encoder.NetworkEncoding) (uint8, string, error)

ReadStatusCode response from a RPC stream.

func SendBeaconBlocksByRangeRequest

func SendBeaconBlocksByRangeRequest(
	ctx context.Context, chain blockchain.ChainInfoFetcher, p2pProvider p2p.P2P, pid peer.ID,
	req *pb.BeaconBlocksByRangeRequest, blockProcessor BeaconBlockProcessor,
) ([]block.SignedBeaconBlock, error)

SendBeaconBlocksByRangeRequest sends BeaconBlocksByRange and returns fetched blocks, if any.

func SendBeaconBlocksByRootRequest

func SendBeaconBlocksByRootRequest(
	ctx context.Context, chain blockchain.ChainInfoFetcher, p2pProvider p2p.P2P, pid peer.ID,
	req *p2ptypes.BeaconBlockByRootsReq, blockProcessor BeaconBlockProcessor,
) ([]block.SignedBeaconBlock, error)

SendBeaconBlocksByRootRequest sends BeaconBlocksByRoot and returns fetched blocks, if any.

func SetRPCStreamDeadlines

func SetRPCStreamDeadlines(stream network.Stream)

SetRPCStreamDeadlines sets read and write deadlines for libp2p-based connection streams.

func SetStreamReadDeadline

func SetStreamReadDeadline(stream network.Stream, duration time.Duration)

SetStreamReadDeadline for reading from libp2p connection streams, deciding when to close a connection based on a particular duration.

NOTE: libp2p uses the system clock time for determining the deadline so we use time.Now() instead of the synchronized roughtime.Now(). If the system time is corrupted (i.e. time does not advance), the node will experience issues being able to properly close streams, leading to unexpected failures and possible memory leaks.

func SetStreamWriteDeadline

func SetStreamWriteDeadline(stream network.Stream, duration time.Duration)

SetStreamWriteDeadline for writing to libp2p connection streams, deciding when to close a connection based on a particular duration.

NOTE: libp2p uses the system clock time for determining the deadline so we use time.Now() instead of the synchronized roughtime.Now(). If the system time is corrupted (i.e. time does not advance), the node will experience issues being able to properly close streams, leading to unexpected failures and possible memory leaks.

func WriteBlockChunk

func WriteBlockChunk(stream libp2pcore.Stream, chain blockchain.ChainInfoFetcher, encoding encoder.NetworkEncoding, blk block.SignedBeaconBlock) error

WriteBlockChunk writes block chunk object to stream. response_chunk ::= <result> | <context-bytes> | <encoding-dependent-header> | <encoded-payload>

Types

type BeaconBlockProcessor

type BeaconBlockProcessor func(block block.SignedBeaconBlock) error

BeaconBlockProcessor defines a block processing function, which allows to start utilizing blocks even before all blocks are ready.

type Checker

type Checker interface {
	Initialized() bool
	Syncing() bool
	Synced() bool
	Status() error
	Resync() error
}

Checker defines a struct which can verify whether a node is currently synchronizing a chain with the rest of peers in the network.

type Config

type Config struct {
	AttestationNotifier     operation.Notifier
	P2P                     p2p.P2P
	DB                      db.NoHeadAccessDatabase
	AttPool                 attestations.Pool
	ExitPool                voluntaryexits.PoolManager
	SlashingPool            slashings.PoolManager
	SyncCommsPool           synccommittee.Pool
	Chain                   blockchainService
	InitialSync             Checker
	StateNotifier           statefeed.Notifier
	BlockNotifier           blockfeed.Notifier
	OperationNotifier       operation.Notifier
	StateGen                *stategen.State
	SlasherAttestationsFeed *event.Feed
	SlasherBlockHeadersFeed *event.Feed
}

Config to set up the regular sync service.

type Service

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

Service is responsible for handling all run time p2p related operations as the main entry point for network messages.

func NewService

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

NewService initializes new regular sync service.

func (*Service) Start

func (s *Service) Start()

Start the regular sync service.

func (*Service) Status

func (s *Service) Status() error

Status of the currently running regular sync service.

func (*Service) Stop

func (s *Service) Stop() error

Stop the regular sync service.

Directories

Path Synopsis
Package initialsync includes all initial block download and processing logic for the beacon node, using a round robin strategy and a finite-state-machine to handle edge-cases in a beacon node's sync status.
Package initialsync includes all initial block download and processing logic for the beacon node, using a round robin strategy and a finite-state-machine to handle edge-cases in a beacon node's sync status.
testing
Package testing includes useful mocks for testing initial sync status in unit tests.
Package testing includes useful mocks for testing initial sync status in unit tests.

Jump to

Keyboard shortcuts

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