2021-03-05 13:12:00 +00:00
|
|
|
# Gossip Processing
|
|
|
|
|
|
|
|
This folders hold a collection of modules to:
|
|
|
|
- validate raw gossip data before
|
|
|
|
- rebroadcasting them (potentially aggregated)
|
|
|
|
- sending it to one of the consensus object pool
|
|
|
|
|
|
|
|
## Validation
|
|
|
|
|
|
|
|
Gossip Validation is different from consensus verification in particular for blocks.
|
|
|
|
|
2021-08-26 08:21:52 +00:00
|
|
|
- Blocks: https://github.com/ethereum/consensus-specs/blob/v1.0.1/specs/phase0/p2p-interface.md#beacon_block
|
|
|
|
- Attestations (aggregate): https://github.com/ethereum/consensus-specs/blob/v1.0.1/specs/phase0/p2p-interface.md#beacon_aggregate_and_proof
|
|
|
|
- Attestations (single): https://github.com/ethereum/consensus-specs/blob/v1.0.1/specs/phase0/p2p-interface.md#attestation-subnets
|
|
|
|
- Exits: https://github.com/ethereum/consensus-specs/blob/v1.0.1/specs/phase0/p2p-interface.md#voluntary_exit
|
|
|
|
- Proposer slashings: https://github.com/ethereum/consensus-specs/blob/v1.0.1/specs/phase0/p2p-interface.md#proposer_slashing
|
|
|
|
- Attester slashing: https://github.com/ethereum/consensus-specs/blob/v1.0.1/specs/phase0/p2p-interface.md#attester_slashing
|
2021-03-05 13:12:00 +00:00
|
|
|
|
|
|
|
There are 2 consumers of validated consensus objects:
|
|
|
|
- a `ValidationResult.Accept` output triggers rebroadcasting in libp2p
|
|
|
|
- method `validate(PubSub, message)` in libp2p/protocols/pubsub/pubsub.nim in the
|
|
|
|
- which was called by `rpcHandler(GossipSub, PubSubPeer, RPCMsg)`
|
|
|
|
- a `xyzValidator` message enqueues the validated object in one of the processing queue in eth2_processor
|
|
|
|
- `blocksQueue: AsyncQueue[BlockEntry]`, (shared with request_manager and sync_manager)
|
|
|
|
- `attestationsQueue: AsyncQueue[AttestationEntry]`
|
|
|
|
- `aggregatesQueue: AsyncQueue[AggregateEntry]`
|
|
|
|
|
|
|
|
Those queues are then regularly processed to be made available to the consensus object pools.
|
|
|
|
|
|
|
|
## Security concerns
|
|
|
|
|
|
|
|
As the first line of defense in Nimbus, modules must be able 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
|