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 ¶
- Variables
- func ReadChunkedBlock(stream libp2pcore.Stream, p2p p2p.P2P, isFirstChunk bool) (*eth.SignedBeaconBlock, error)
- func ReadStatusCode(stream network.Stream, encoding encoder.NetworkEncoding) (uint8, string, error)
- func SendBeaconBlocksByRangeRequest(ctx context.Context, p2pProvider p2p.P2P, pid peer.ID, ...) ([]*ethpb.SignedBeaconBlock, error)
- func SendBeaconBlocksByRootRequest(ctx context.Context, p2pProvider p2p.P2P, pid peer.ID, ...) ([]*ethpb.SignedBeaconBlock, error)
- func SetRPCStreamDeadlines(stream network.Stream)
- func SetStreamReadDeadline(stream network.Stream, duration time.Duration)
- func SetStreamWriteDeadline(stream network.Stream, duration time.Duration)
- func WriteChunk(stream libp2pcore.Stream, encoding encoder.NetworkEncoding, msg interface{}) error
- type BeaconBlockProcessor
- type Checker
- type Config
- type Service
Constants ¶
This section is empty.
Variables ¶
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, p2p p2p.P2P, isFirstChunk bool) (*eth.SignedBeaconBlock, error)
ReadChunkedBlock handles each response chunk that is sent by the peer and converts it into a beacon block.
func ReadStatusCode ¶
ReadStatusCode response from a RPC stream.
func SendBeaconBlocksByRangeRequest ¶ added in v1.0.0
func SendBeaconBlocksByRangeRequest( ctx context.Context, p2pProvider p2p.P2P, pid peer.ID, req *pb.BeaconBlocksByRangeRequest, blockProcessor BeaconBlockProcessor, ) ([]*ethpb.SignedBeaconBlock, error)
SendBeaconBlocksByRangeRequest sends BeaconBlocksByRange and returns fetched blocks, if any.
func SendBeaconBlocksByRootRequest ¶ added in v1.0.0
func SendBeaconBlocksByRootRequest( ctx context.Context, p2pProvider p2p.P2P, pid peer.ID, req *p2ptypes.BeaconBlockByRootsReq, blockProcessor BeaconBlockProcessor, ) ([]*ethpb.SignedBeaconBlock, error)
SendBeaconBlocksByRootRequest sends BeaconBlocksByRoot and returns fetched blocks, if any.
func SetRPCStreamDeadlines ¶ added in v1.0.0
SetRPCStreamDeadlines sets read and write deadlines for libp2p-based connection streams.
func SetStreamReadDeadline ¶ added in v1.0.0
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 ¶ added in v1.0.0
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 WriteChunk ¶
func WriteChunk(stream libp2pcore.Stream, encoding encoder.NetworkEncoding, msg interface{}) error
WriteChunk object to stream. response_chunk ::= | <result> | <encoding-dependent-header> | <encoded-payload>
Types ¶
type BeaconBlockProcessor ¶ added in v1.0.0
type BeaconBlockProcessor func(block *ethpb.SignedBeaconBlock) error
BeaconBlockProcessor defines a block processing function, which allows to start utilizing blocks even before all blocks are ready.
type Checker ¶
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 { P2P p2p.P2P DB db.NoHeadAccessDatabase AttPool attestations.Pool ExitPool voluntaryexits.PoolManager SlashingPool slashings.PoolManager Chain blockchainService InitialSync Checker StateNotifier statefeed.Notifier BlockNotifier blockfeed.Notifier AttestationNotifier operation.Notifier StateGen *stategen.State }
Config to set up the regular sync service.
type Service ¶ added in v0.3.0
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 ¶ added in v1.0.0
NewService initializes new regular sync service.
Source Files ¶
- deadlines.go
- decode_pubsub.go
- doc.go
- error.go
- log.go
- metrics.go
- pending_attestations_queue.go
- pending_blocks_queue.go
- rate_limiter.go
- rpc.go
- rpc_beacon_blocks_by_range.go
- rpc_beacon_blocks_by_root.go
- rpc_chunked_response.go
- rpc_goodbye.go
- rpc_metadata.go
- rpc_ping.go
- rpc_send_request.go
- rpc_status.go
- service.go
- subscriber.go
- subscriber_beacon_aggregate_proof.go
- subscriber_beacon_attestation.go
- subscriber_beacon_blocks.go
- subscriber_handlers.go
- utils.go
- validate_aggregate_proof.go
- validate_attester_slashing.go
- validate_beacon_attestation.go
- validate_beacon_blocks.go
- validate_proposer_slashing.go
- validate_voluntary_exit.go
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. |