nimbus-eth2/beacon_chain/gossip_processing
Jacek Sieka 0d9fd54857
cache shuffling separately from other EpochRef data (fixes #2677) (#3990)
In order to avoid full replays when validating attestations hailing from
untaken forks, it's better to keep shufflings separate from `EpochRef`
and perform a lookahead on the shuffling when processing the block that
determines them.

This also helps performance in the case where REST clients are trying to
perform lookahead on attestation duties and decreases memory usage by
sharing shufflings between EpochRef instances of the same dependent
root.
2022-08-18 21:07:01 +03:00
..
README.md update spec ref URLs (#3979) 2022-08-17 11:33:19 +00:00
batch_validation.nim cache shuffling separately from other EpochRef data (fixes #2677) (#3990) 2022-08-18 21:07:01 +03:00
block_processor.nim make newPayload/forkchoiceUpdated failures errors (#3989) 2022-08-18 12:57:32 +00:00
eth2_processor.nim update LC spec references for v1.2.0-rc.2 (#3982) 2022-08-17 19:47:06 +00:00
gossip_validation.nim cache shuffling separately from other EpochRef data (fixes #2677) (#3990) 2022-08-18 21:07:01 +03:00
light_client_processor.nim update LC spec references for v1.2.0-rc.2 (#3982) 2022-08-17 19:47:06 +00:00

README.md

Gossip Processing

This folder holds a collection of modules to:

  • validate raw gossip data before
    • rebroadcasting it (potentially aggregated)
    • sending it to one of the consensus object pools

Validation

Gossip validation is different from consensus verification in particular for blocks.

There are multiple consumers of validated consensus objects:

  • a ValidationResult.Accept output triggers rebroadcasting in libp2p
    • We jump into method validate(PubSub, Message) in libp2p/protocols/pubsub/pubsub.nim
    • which was called by rpcHandler(GossipSub, PubSubPeer, RPCMsg)
  • a blockValidator message enqueues the validated object to the processing queue in block_processor
    • blockQueue: AsyncQueue[BlockEntry] (shared with request_manager and sync_manager)
    • This queue is then regularly processed to be made available to the consensus object pools.
  • a xyzValidator message adds the validated object to a pool in eth2_processor
    • Attestations (unaggregated and aggregated) get collected into batches.
    • Once a threshold is exceeded or after a timeout, they get validated together using BatchCrypto.

Security concerns

As the first line of defense in Nimbus, modules must be able to handle bursts of data that may come:

  • from malicious nodes trying to DOS us
  • from long periods of non-finality, creating lots of forks, attestations