sync

package
v5.1.1 Latest Latest
Warning

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

Go to latest
Published: Oct 8, 2024 License: GPL-3.0 Imports: 96 Imported by: 1

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 is used to signal that an error occurred which should result in peer downscoring.
	ErrInvalidFetchedData = errors.New("invalid data returned from peer")
)

Any error from the following declaration block should result in peer downscoring.

View Source
var ErrNoValidDigest = errors.New("no valid digest matched")
View Source
var (
	ErrOptimisticParent = errors.New("parent of the block is optimistic")
)
View Source
var ErrUnrecognizedVersion = errors.New("cannot determine context bytes for unrecognized object")

Functions

func BlobRPCMinValidSlot added in v5.0.2

func BlobRPCMinValidSlot(current primitives.Slot) (primitives.Slot, error)

BlobRPCMinValidSlot returns the lowest slot that we should expect peers to respect as the start slot in a BlobSidecarsByRange request. This can be used to validate incoming requests and to avoid pestering peers with requests for blobs that are outside the retention window.

func ReadChunkedBlock

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, tor blockchain.TemporalOracle, p2pProvider p2p.SenderEncoder, pid peer.ID,
	req *pb.BeaconBlocksByRangeRequest, blockProcessor BeaconBlockProcessor,
) ([]interfaces.ReadOnlySignedBeaconBlock, error)

SendBeaconBlocksByRangeRequest sends BeaconBlocksByRange and returns fetched blocks, if any.

func SendBeaconBlocksByRootRequest

func SendBeaconBlocksByRootRequest(
	ctx context.Context, clock blockchain.TemporalOracle, p2pProvider p2p.P2P, pid peer.ID,
	req *p2ptypes.BeaconBlockByRootsReq, blockProcessor BeaconBlockProcessor,
) ([]interfaces.ReadOnlySignedBeaconBlock, error)

SendBeaconBlocksByRootRequest sends BeaconBlocksByRoot and returns fetched blocks, if any.

func SendBlobSidecarByRoot

func SendBlobSidecarByRoot(
	ctx context.Context, tor blockchain.TemporalOracle, p2pApi p2p.P2P, pid peer.ID,
	ctxMap ContextByteVersions, req *p2ptypes.BlobSidecarsByRootReq,
) ([]blocks.ROBlob, error)

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 WriteBlobSidecarChunk

func WriteBlobSidecarChunk(stream libp2pcore.Stream, tor blockchain.TemporalOracle, encoding encoder.NetworkEncoding, sidecar blocks.VerifiedROBlob) error

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

func WriteBlockChunk

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

Types

type BeaconBlockProcessor

type BeaconBlockProcessor func(block interfaces.ReadOnlySignedBeaconBlock) error

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

type BlobResponseValidation

type BlobResponseValidation func(blocks.ROBlob) error

BlobResponseValidation represents a function that can validate aspects of a single unmarshaled blob that was received from a peer in response to an rpc request.

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 ContextByteVersions

type ContextByteVersions map[[4]byte]int

ContextByteVersions is a mapping between expected values for context bytes and the runtime/version identifier they correspond to. This can be used to look up the type needed to unmarshal a wire-encoded value.

func ContextByteVersionsForValRoot

func ContextByteVersionsForValRoot(valRoot [32]byte) (ContextByteVersions, error)

ContextByteVersionsForValRoot computes a mapping between all possible context bytes values and the runtime/version identifier for the corresponding fork.

type Option

type Option func(s *Service) error

func WithAttestationNotifier

func WithAttestationNotifier(notifier operation.Notifier) Option

func WithAttestationPool

func WithAttestationPool(attPool attestations.Pool) Option

func WithAvailableBlocker

func WithAvailableBlocker(avb coverage.AvailableBlocker) Option

WithAvailableBlocker allows the sync package to access the current status of backfill.

func WithBlobStorage

func WithBlobStorage(b *filesystem.BlobStorage) Option

WithBlobStorage gives the sync package direct access to BlobStorage.

func WithBlockNotifier

func WithBlockNotifier(blockNotifier blockfeed.Notifier) Option

func WithBlsToExecPool

func WithBlsToExecPool(blsToExecPool blstoexec.PoolManager) Option

func WithChainService

func WithChainService(chain blockchainService) Option

func WithClockWaiter

func WithClockWaiter(cw startup.ClockWaiter) Option

func WithDatabase

func WithDatabase(db db.NoHeadAccessDatabase) Option

func WithExitPool

func WithExitPool(exitPool voluntaryexits.PoolManager) Option

func WithInitialSync

func WithInitialSync(initialSync Checker) Option

func WithInitialSyncComplete

func WithInitialSyncComplete(c chan struct{}) Option

func WithOperationNotifier

func WithOperationNotifier(operationNotifier operation.Notifier) Option

func WithP2P

func WithP2P(p2p p2p.P2P) Option

func WithPayloadReconstructor

func WithPayloadReconstructor(r execution.PayloadReconstructor) Option

func WithSlasherAttestationsFeed

func WithSlasherAttestationsFeed(slasherAttestationsFeed *event.Feed) Option

func WithSlasherBlockHeadersFeed

func WithSlasherBlockHeadersFeed(slasherBlockHeadersFeed *event.Feed) Option

func WithSlashingPool

func WithSlashingPool(slashingPool slashings.PoolManager) Option

func WithStateGen

func WithStateGen(stateGen *stategen.State) Option

func WithStateNotifier

func WithStateNotifier(n statefeed.Notifier) Option

WithStateNotifier to notify an event feed of state processing.

func WithSyncCommsPool

func WithSyncCommsPool(syncCommsPool synccommittee.Pool) Option

func WithVerifierWaiter

func WithVerifierWaiter(v *verification.InitializerWaiter) Option

WithVerifierWaiter gives the sync package direct access to the verifier waiter.

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, opts ...Option) *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