Module ordered_broadcast

Source
Expand description

Ordered, reliable broadcast across reconfigurable participants.

§Concepts

The system has two types of network participants: sequencers and validators. Their sets may overlap and are defined by the current epoch, a monotonically increasing integer. This module can handle reconfiguration of these sets across different epochs.

Sequencers broadcast data. The smallest unit of data is a chunk. Sequencers broadcast nodes that contain a chunk and a threshold signature over the previous chunk, forming a linked chain of nodes from each sequencer.

Validators verify and sign chunks using partial signatures. These can be combined to recover a threshold signature, ensuring a quorum verifies each chunk. The threshold signature allows external parties to confirm that the chunk was reliably broadcast.

Network participants persist any new nodes to a journal. This enables recovery from crashes and ensures that sequencers do not broadcast conflicting chunks and that validators do not sign them. “Conflicting” chunks are chunks from the same sequencer at the same height with different payloads.

§Design

The core of the module is the Engine. It is responsible for:

  • Broadcasting nodes (if a sequencer)
  • Signing chunks (if a validator)
  • Tracking the latest chunk in each sequencer’s chain
  • Recovering threshold signatures from partial signatures for each chunk
  • Notifying other actors of new chunks and threshold signatures

§Acknowledgements

Autobahn provided the insight that a succinct proof-of-availability could be produced by linking sequencer broadcasts.

Structs§

Config
Configuration for the Engine.
Context
Used as the Automaton::Context type.
Engine
Instance of the engine.
Prover
Encode and decode proofs of broadcast.

Type Aliases§

Epoch
Used as the Index type. Defines the current set of sequencers and validators.