Files
serai/coordinator
Luke Parker 2240a50a0c Rebroadcast cosigns for the currently evaluated session, not the latest intended
If Substrate has a block 500 with a key gen, and a block 600 with a key gen,
and the session starting on 500 never cosigns everything, everyone up-to-date
will want the cosigns for the session starting on block 500. Everyone
up-to-date will also be rebroadcasting the non-existent cosigns for the session
which has yet to start. This wouldn't cause a stall as eventually, each
individual set would cosign the latest notable block, and then that would be
explicitly synced, but it's still not the intended behavior.

We also won't even intake the cosigns for the latest intended session if it
exceeds the session we're currently evaluating. This does mean those behind on
the cosigning protocol wouldn't have rebroadcasted their historical cosigns,
and now will, but that's valuable as we don't actually know if we're behind or
up-to-date (per above posited issue).
2024-12-31 17:17:12 -05:00
..
2024-12-08 21:55:37 -05:00

Coordinator

  • tendermint is an implementation of the Tendermint BFT algorithm.

  • tributary is a micro-blockchain framework. Instead of a producing a blockchain daemon like the Polkadot SDK or Cosmos SDK intend to, tributary is solely intended to be an embedded asynchronous task within an application.

    The Serai coordinator spawns a tributary for each validator set it's coordinating. This allows the participating validators to communicate in a byzantine-fault-tolerant manner (relying on Tendermint for consensus).

  • cosign contains a library to decide which Substrate blocks should be cosigned and to evaluate cosigns.

  • substrate contains a library to index the Substrate blockchain and handle its events.

  • src contains the source code for the Coordinator binary itself.