nimbus-eth2/beacon_chain/networking
Jacek Sieka c7abc97545
harden and speed up block sync (#3358)
* harden and speed up block sync

The `GetBlockBy*` server implementation currently reads SSZ bytes from
database, deserializes them into a Nim object then serializes them right
back to SSZ - here, we eliminate the deser/ser steps and send the bytes
straight to the network. Unfortunately, the snappy recoding must still
be done because of differences in framing.

Also, the quota system makes one giant request for quota right before
sending all blocks - this means that a 1024 block request will be
"paused" for a long time, then all blocks will be sent at once causing a
spike in database reads which potentially will see the reading client
time out before any block is sent.

Finally, on the reading side we make several copies of blocks as they
travel through various queues - this was not noticeable before but
becomes a problem in two cases: bellatrix blocks are up to 10mb (instead
of .. 30-40kb) and when backfilling, we process a lot more of them a lot
faster.

* fix status comparisons for nodes syncing from genesis (#3327 was a bit
too hard)
* don't hit database at all for post-altair slots in GetBlock v1
requests
2022-02-07 19:20:10 +02:00
..
README.md
eth2_discovery.nim log doppelganger attestation signature; rm withState.HashedBeaconState uses (#2608) 2021-05-28 15:51:15 +03:00
eth2_network.nim harden and speed up block sync (#3358) 2022-02-07 19:20:10 +02:00
faststreams_backend.nim add copyright header to streams backends (#3177) 2021-12-10 02:28:09 +00:00
libp2p_json_serialization.nim EH cleanup (#2455) 2021-03-26 07:52:01 +01:00
libp2p_streams_backend.nim add copyright header to streams backends (#3177) 2021-12-10 02:28:09 +00:00
network_metadata.nim fix typo (`snapshop` -> `snapshot`) (#3192) 2021-12-14 15:44:34 +00:00
peer_pool.nim EH cleanup (#2455) 2021-03-26 07:52:01 +01:00
peer_scores.nim Harden handling of unviable forks (#3312) 2022-01-26 13:20:08 +01:00

README.md

Networking

This folders hold a collection of modules to:

  • configure the Eth2 P2P network
  • discover, connect, and maintain quality Eth2 peers

Data received is handed other to the ../gossip_processing modules for validation.

Security concerns

  • Collusion: part of the peer selection must be kept random. This avoids peers bringing all their friends and colluding against a beacon node.
  • Denial-of-service: The beacon node must provide ways to handle burst of data that may come:
    • from malicious nodes trying to DOS us
    • from long periods of non-finality, creating lots of forks, attestations, forks