Home / Input Output / ouroboros-consensus
Mar 29, 12-1 PM (0)
Mar 29, 1-2 PM (0)
Mar 29, 2-3 PM (0)
Mar 29, 3-4 PM (0)
Mar 29, 4-5 PM (0)
Mar 29, 5-6 PM (0)
Mar 29, 6-7 PM (0)
Mar 29, 7-8 PM (0)
Mar 29, 8-9 PM (0)
Mar 29, 9-10 PM (0)
Mar 29, 10-11 PM (0)
Mar 29, 11-12 AM (0)
Mar 30, 12-1 AM (0)
Mar 30, 1-2 AM (0)
Mar 30, 2-3 AM (0)
Mar 30, 3-4 AM (0)
Mar 30, 4-5 AM (0)
Mar 30, 5-6 AM (0)
Mar 30, 6-7 AM (0)
Mar 30, 7-8 AM (0)
Mar 30, 8-9 AM (3)
Mar 30, 9-10 AM (0)
Mar 30, 10-11 AM (0)
Mar 30, 11-12 PM (0)
Mar 30, 12-1 PM (1)
Mar 30, 1-2 PM (0)
Mar 30, 2-3 PM (1)
Mar 30, 3-4 PM (1)
Mar 30, 4-5 PM (1)
Mar 30, 5-6 PM (0)
Mar 30, 6-7 PM (1)
Mar 30, 7-8 PM (0)
Mar 30, 8-9 PM (0)
Mar 30, 9-10 PM (0)
Mar 30, 10-11 PM (0)
Mar 30, 11-12 AM (0)
Mar 31, 12-1 AM (0)
Mar 31, 1-2 AM (0)
Mar 31, 2-3 AM (0)
Mar 31, 3-4 AM (0)
Mar 31, 4-5 AM (0)
Mar 31, 5-6 AM (0)
Mar 31, 6-7 AM (2)
Mar 31, 7-8 AM (4)
Mar 31, 8-9 AM (0)
Mar 31, 9-10 AM (4)
Mar 31, 10-11 AM (3)
Mar 31, 11-12 PM (0)
Mar 31, 12-1 PM (1)
Mar 31, 1-2 PM (2)
Mar 31, 2-3 PM (4)
Mar 31, 3-4 PM (1)
Mar 31, 4-5 PM (0)
Mar 31, 5-6 PM (3)
Mar 31, 6-7 PM (0)
Mar 31, 7-8 PM (0)
Mar 31, 8-9 PM (0)
Mar 31, 9-10 PM (1)
Mar 31, 10-11 PM (0)
Mar 31, 11-12 AM (0)
Apr 01, 12-1 AM (0)
Apr 01, 1-2 AM (0)
Apr 01, 2-3 AM (0)
Apr 01, 3-4 AM (0)
Apr 01, 4-5 AM (0)
Apr 01, 5-6 AM (1)
Apr 01, 6-7 AM (1)
Apr 01, 7-8 AM (3)
Apr 01, 8-9 AM (8)
Apr 01, 9-10 AM (0)
Apr 01, 10-11 AM (1)
Apr 01, 11-12 PM (0)
Apr 01, 12-1 PM (5)
Apr 01, 1-2 PM (3)
Apr 01, 2-3 PM (0)
Apr 01, 3-4 PM (1)
Apr 01, 4-5 PM (0)
Apr 01, 5-6 PM (0)
Apr 01, 6-7 PM (0)
Apr 01, 7-8 PM (1)
Apr 01, 8-9 PM (2)
Apr 01, 9-10 PM (0)
Apr 01, 10-11 PM (0)
Apr 01, 11-12 AM (0)
Apr 02, 12-1 AM (0)
Apr 02, 1-2 AM (0)
Apr 02, 2-3 AM (0)
Apr 02, 3-4 AM (0)
Apr 02, 4-5 AM (0)
Apr 02, 5-6 AM (0)
Apr 02, 6-7 AM (8)
Apr 02, 7-8 AM (0)
Apr 02, 8-9 AM (8)
Apr 02, 9-10 AM (1)
Apr 02, 10-11 AM (1)
Apr 02, 11-12 PM (0)
Apr 02, 12-1 PM (3)
Apr 02, 1-2 PM (1)
Apr 02, 2-3 PM (1)
Apr 02, 3-4 PM (2)
Apr 02, 4-5 PM (1)
Apr 02, 5-6 PM (13)
Apr 02, 6-7 PM (0)
Apr 02, 7-8 PM (0)
Apr 02, 8-9 PM (0)
Apr 02, 9-10 PM (2)
Apr 02, 10-11 PM (1)
Apr 02, 11-12 AM (0)
Apr 03, 12-1 AM (0)
Apr 03, 1-2 AM (0)
Apr 03, 2-3 AM (0)
Apr 03, 3-4 AM (0)
Apr 03, 4-5 AM (0)
Apr 03, 5-6 AM (0)
Apr 03, 6-7 AM (0)
Apr 03, 7-8 AM (0)
Apr 03, 8-9 AM (0)
Apr 03, 9-10 AM (0)
Apr 03, 10-11 AM (0)
Apr 03, 11-12 PM (0)
Apr 03, 12-1 PM (8)
Apr 03, 1-2 PM (8)
Apr 03, 2-3 PM (0)
Apr 03, 3-4 PM (1)
Apr 03, 4-5 PM (0)
Apr 03, 5-6 PM (0)
Apr 03, 6-7 PM (0)
Apr 03, 7-8 PM (0)
Apr 03, 8-9 PM (0)
Apr 03, 9-10 PM (0)
Apr 03, 10-11 PM (0)
Apr 03, 11-12 AM (0)
Apr 04, 12-1 AM (0)
Apr 04, 1-2 AM (0)
Apr 04, 2-3 AM (0)
Apr 04, 3-4 AM (0)
Apr 04, 4-5 AM (0)
Apr 04, 5-6 AM (0)
Apr 04, 6-7 AM (0)
Apr 04, 7-8 AM (0)
Apr 04, 8-9 AM (0)
Apr 04, 9-10 AM (0)
Apr 04, 10-11 AM (0)
Apr 04, 11-12 PM (0)
Apr 04, 12-1 PM (0)
Apr 04, 1-2 PM (0)
Apr 04, 2-3 PM (0)
Apr 04, 3-4 PM (0)
Apr 04, 4-5 PM (0)
Apr 04, 5-6 PM (0)
Apr 04, 6-7 PM (0)
Apr 04, 7-8 PM (0)
Apr 04, 8-9 PM (0)
Apr 04, 9-10 PM (0)
Apr 04, 10-11 PM (0)
Apr 04, 11-12 AM (0)
Apr 05, 12-1 AM (0)
Apr 05, 1-2 AM (0)
Apr 05, 2-3 AM (0)
Apr 05, 3-4 AM (0)
Apr 05, 4-5 AM (0)
Apr 05, 5-6 AM (0)
Apr 05, 6-7 AM (0)
Apr 05, 7-8 AM (0)
Apr 05, 8-9 AM (0)
Apr 05, 9-10 AM (0)
Apr 05, 10-11 AM (0)
Apr 05, 11-12 PM (0)
Apr 05, 12-1 PM (0)
118 commits this week Mar 29, 2026 - Apr 05, 2026
Port `GenesisTest`s into new `TestSuite` data structure
The new `ConformanceTest` record contains fields for all data formerly used
to run a test via `forAllGenesisTest` helper, plus other fields that pertain
to its evaluation as a test property on a`TestTree`.
A value of this type is defined for each point-schedule/genesis test.

All such `ConformanceTest`s are arranged in a `TestSuite`s, a data
structure introduced with the goal of eventually exporting them as
part of a new sublibrary for the Conformance Testing of Consensus harness
(see https://github.com/tweag/cardano-conformance-testing-of-consensus).
This data structure is designed to optimize single test lookups,
while retaining the necessary structure to be compiled back to a `TestTree`,
so that the introduced changes preserve the semantics of the
`ouroboros-consensus:test:consensus-diffusion-test` test suite.

To accomplish this, a new data type is introduced in each module as a `key`
for the locally defined `TestSuite`, such that each test in the module
corresponds to a unique value (nullary constructor) of this type. This means
that including a new test in a `TestSuite` requires the extension of such key
type by introducing a new data constructor. These `key` types are aggregated
into higher level key types to reify the nested grouping of the original
tasty `TestTree`s. It is by means of `mkTestSuite` and `at` that a higher
level `TestSuite` can be defined. The `SmallKey key` constraint is needed for
their exhaustive construction, via `newTestSuite` and `mkTestSuite`; as
implemented, a `TestSuite` is a total map.

Co-authored-by: Sandy Maguire <[email protected]>
Register and wire-in Peras{Cert,Vote}Diffusion in the network layer
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Add definitions and codec for `Peras{Cert,Vote}` diffusion through ObjectDiffusion
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Implement general ObjectDiffusion protocol, and related `ObjectPool{Reader,Writer}` API
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Overhaul of PerasCertDB and wiring of Peras{Cert,Vote}DB in ChainDB
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Integrate `NodeToNodeV_16` and use defaultMiniProtocolParameters instead of hardcoded value in unstable-diffusion-testlib
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Add definitions and codec for `PerasCert` diffusion through ObjectDiffusion
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Register and wire-in PerasCertDiffusion in the network layer
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Implement general ObjectDiffusion protocol, and related `ObjectPool{Reader,Writer}` API
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Integrate `NodeToNodeV_16` and use defaultMiniProtocolParameters instead of hardcoded value in unstable-diffusion-testlib
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Replace Introduction page with System Overview (#1950)
The previous Introduction page listed the three components (Consensus,
Storage, Mempool) as separate entities, but this was misleading — in the
code, "Consensus Protocol" does not exist as a distinct component.
Blocks flow directly from the network to ChainDB, and chain selection
lives inside ChainDB, not in a separate protocol layer.

The new System Overview:
- Opens with the consensus problem and why this layer exists
- Adds a C4 Context diagram showing consensus in relation to
cardano-node, the network layer, and the ledger layer
- Names ChainDB (storage + chain selection) and mempool as the main
internal components without implying a separate protocol layer
- Covers era evolution (Byron through Conway) with glossary links
- Describes the code organization: polymorphic core in
ouroboros-consensus vs Cardano instantiations in
ouroboros-consensus-cardano
- Links to existing deeper pages (Design Goals, Data Flow, Ledger
Interaction, Queries, Node Tasks)
Replace Introduction page with System Overview
The previous Introduction page listed the three components (Consensus,
Storage, Mempool) as separate entities, but this was misleading — in the
code, "Consensus Protocol" does not exist as a distinct component.
Blocks flow directly from the network to ChainDB, and chain selection
lives inside ChainDB, not in a separate protocol layer.

The new System Overview:
- Opens with the consensus problem and why this layer exists
- Adds a C4 Context diagram showing consensus in relation to
  cardano-node, the network layer, and the ledger layer
- Names ChainDB (storage + chain selection) and mempool as the
  main internal components without implying a separate protocol layer
- Covers era evolution (Byron through Conway) with glossary links
- Describes the code organization: polymorphic core in
  ouroboros-consensus vs Cardano instantiations in
  ouroboros-consensus-cardano
- Links to existing deeper pages (Design Goals, Data Flow,
  Ledger Interaction, Queries, Node Tasks)
Add Consensus Protocol explanation (first iteration)
First-elaboration explanation of the consensus protocol abstraction,
covering chain selection, header validation, the security parameter k,
and the ConsensusProtocol class with its associated types and methods.

This is a first iteration — future work includes:
- Concrete protocols section (PBFT, TPraos, Praos characterizations)
- Block forging section (leadership check, self-adoption)
- Chain order details (PraosChainSelectView, RestrictedVRFTiebreaker)
- Formal invariants (prefer extension, never shrink)
- Blueprint references and Haddock reverse links
- "Go deeper" section once deeper pages exist
- Cross-era forecasting details

Also adds glossary entries for "extended ledger state" and
"immutable tip".