Home / Input Output / cardano-ledger-specs
May 13, 3-4 AM (0)
May 13, 4-5 AM (0)
May 13, 5-6 AM (0)
May 13, 6-7 AM (0)
May 13, 7-8 AM (10)
May 13, 8-9 AM (1)
May 13, 9-10 AM (0)
May 13, 10-11 AM (1)
May 13, 11-12 PM (7)
May 13, 12-1 PM (5)
May 13, 1-2 PM (0)
May 13, 2-3 PM (0)
May 13, 3-4 PM (0)
May 13, 4-5 PM (0)
May 13, 5-6 PM (0)
May 13, 6-7 PM (0)
May 13, 7-8 PM (0)
May 13, 8-9 PM (0)
May 13, 9-10 PM (8)
May 13, 10-11 PM (0)
May 13, 11-12 AM (0)
May 14, 12-1 AM (0)
May 14, 1-2 AM (0)
May 14, 2-3 AM (0)
May 14, 3-4 AM (0)
May 14, 4-5 AM (0)
May 14, 5-6 AM (0)
May 14, 6-7 AM (0)
May 14, 7-8 AM (0)
May 14, 8-9 AM (0)
May 14, 9-10 AM (0)
May 14, 10-11 AM (0)
May 14, 11-12 PM (0)
May 14, 12-1 PM (0)
May 14, 1-2 PM (0)
May 14, 2-3 PM (0)
May 14, 3-4 PM (0)
May 14, 4-5 PM (0)
May 14, 5-6 PM (6)
May 14, 6-7 PM (2)
May 14, 7-8 PM (0)
May 14, 8-9 PM (0)
May 14, 9-10 PM (0)
May 14, 10-11 PM (0)
May 14, 11-12 AM (0)
May 15, 12-1 AM (0)
May 15, 1-2 AM (0)
May 15, 2-3 AM (0)
May 15, 3-4 AM (0)
May 15, 4-5 AM (0)
May 15, 5-6 AM (0)
May 15, 6-7 AM (0)
May 15, 7-8 AM (0)
May 15, 8-9 AM (0)
May 15, 9-10 AM (0)
May 15, 10-11 AM (0)
May 15, 11-12 PM (0)
May 15, 12-1 PM (1)
May 15, 1-2 PM (0)
May 15, 2-3 PM (0)
May 15, 3-4 PM (0)
May 15, 4-5 PM (0)
May 15, 5-6 PM (0)
May 15, 6-7 PM (0)
May 15, 7-8 PM (0)
May 15, 8-9 PM (0)
May 15, 9-10 PM (0)
May 15, 10-11 PM (0)
May 15, 11-12 AM (0)
May 16, 12-1 AM (0)
May 16, 1-2 AM (0)
May 16, 2-3 AM (0)
May 16, 3-4 AM (0)
May 16, 4-5 AM (0)
May 16, 5-6 AM (0)
May 16, 6-7 AM (0)
May 16, 7-8 AM (0)
May 16, 8-9 AM (0)
May 16, 9-10 AM (0)
May 16, 10-11 AM (0)
May 16, 11-12 PM (0)
May 16, 12-1 PM (0)
May 16, 1-2 PM (0)
May 16, 2-3 PM (0)
May 16, 3-4 PM (1)
May 16, 4-5 PM (0)
May 16, 5-6 PM (0)
May 16, 6-7 PM (0)
May 16, 7-8 PM (0)
May 16, 8-9 PM (0)
May 16, 9-10 PM (0)
May 16, 10-11 PM (0)
May 16, 11-12 AM (0)
May 17, 12-1 AM (0)
May 17, 1-2 AM (0)
May 17, 2-3 AM (0)
May 17, 3-4 AM (0)
May 17, 4-5 AM (0)
May 17, 5-6 AM (0)
May 17, 6-7 AM (1)
May 17, 7-8 AM (0)
May 17, 8-9 AM (0)
May 17, 9-10 AM (0)
May 17, 10-11 AM (0)
May 17, 11-12 PM (0)
May 17, 12-1 PM (1)
May 17, 1-2 PM (0)
May 17, 2-3 PM (0)
May 17, 3-4 PM (0)
May 17, 4-5 PM (0)
May 17, 5-6 PM (0)
May 17, 6-7 PM (1)
May 17, 7-8 PM (0)
May 17, 8-9 PM (0)
May 17, 9-10 PM (0)
May 17, 10-11 PM (0)
May 17, 11-12 AM (0)
May 18, 12-1 AM (0)
May 18, 1-2 AM (0)
May 18, 2-3 AM (0)
May 18, 3-4 AM (0)
May 18, 4-5 AM (0)
May 18, 5-6 AM (0)
May 18, 6-7 AM (0)
May 18, 7-8 AM (11)
May 18, 8-9 AM (0)
May 18, 9-10 AM (0)
May 18, 10-11 AM (0)
May 18, 11-12 PM (0)
May 18, 12-1 PM (1)
May 18, 1-2 PM (0)
May 18, 2-3 PM (8)
May 18, 3-4 PM (0)
May 18, 4-5 PM (0)
May 18, 5-6 PM (0)
May 18, 6-7 PM (0)
May 18, 7-8 PM (0)
May 18, 8-9 PM (0)
May 18, 9-10 PM (0)
May 18, 10-11 PM (0)
May 18, 11-12 AM (0)
May 19, 12-1 AM (0)
May 19, 1-2 AM (0)
May 19, 2-3 AM (0)
May 19, 3-4 AM (0)
May 19, 4-5 AM (0)
May 19, 5-6 AM (0)
May 19, 6-7 AM (0)
May 19, 7-8 AM (0)
May 19, 8-9 AM (1)
May 19, 9-10 AM (0)
May 19, 10-11 AM (0)
May 19, 11-12 PM (0)
May 19, 12-1 PM (0)
May 19, 1-2 PM (0)
May 19, 2-3 PM (0)
May 19, 3-4 PM (0)
May 19, 4-5 PM (0)
May 19, 5-6 PM (0)
May 19, 6-7 PM (1)
May 19, 7-8 PM (0)
May 19, 8-9 PM (0)
May 19, 9-10 PM (0)
May 19, 10-11 PM (0)
May 19, 11-12 AM (0)
May 20, 12-1 AM (0)
May 20, 1-2 AM (0)
May 20, 2-3 AM (0)
May 20, 3-4 AM (0)
67 commits this week May 13, 2026 - May 20, 2026
Leios: hash Dijkstra cert blocks over the cert(s) only
When a 'DijkstraBlockBody' carries a 'LeiosCert' (i.e. it is a cert
block), 'hashDijkstraSegWits' now hashes only the optional Leios /
Peras certificates and ignores the four transaction segwit chunks.
This mirrors the leios-prototype's @hashBody (BodyCertificate cert _) =
hashCert cert@: the header commits to the cert, the EB closure is
resolved into 'dbbTxs' locally (by chain-sel's 'resolveLeiosBlock'
before handing the block to BBODY), and the locally-inlined txs must
not invalidate the header-committed body hash.

For regular blocks (no LeiosCert) the hash still covers the segwit
chunks plus the optional Peras certificate, unchanged.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios: encode Leios cert before Peras cert in DijkstraBlockBody
The BBODY rule validates the Peras certificate when present, and that
validation requires the Praos header to carry a 'PrevEpochNonce'. The
consensus header builder currently defaults that to 'Nothing', so a
Dijkstra block that happens to carry a Peras certificate (placeholder
or otherwise) fails BBODY with 'PrevEpochNonceNotPresent' and gets
rejected from the chain.

The pre-fix wire format dispatched on the body's inner list length
positionally with Peras-first: @5@ ⇒ Peras only, @6@ ⇒ Peras + Leios.
That made "Leios only" unrepresentable, forcing the consensus layer to
attach a placeholder Peras cert alongside every Leios cert and
tripping the validation failure above.

Swap the order on the wire so Leios comes first:

  4 ⇒ no cert
  5 ⇒ Leios only
  6 ⇒ Leios + Peras

"Peras only without Leios" is no longer representable; if support for
that combination is needed later the wire format should move to
explicit @StrictMaybe@ markers per cert. The hash function already
takes Leios before Peras, so the body hash is unchanged.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios: fix DijkstraBlockBody CBOR encoding
The body encoder previously emitted four mandatory segwit chunks plus
optional Peras/Leios certificate bytes inline, with a constant
'listLen = 5' and 'numSegComponents = 5'. The 'DecCBOR' instance reads
an inner list length and dispatches on it (4 / 5 / 6), but the encoder
never wrote that list length and the constant 'listLen = 5' didn't
match the actual cert-presence cases. As a result, basic blocks (both
certs SNothing) failed to deserialise on the network — the outer
'Block' decoder expected 'numSegComponents + 1 = 6' elements but the
encoder produced only 5.

Wrap the body in its own CBOR list at encoding time, with the inner
length (4, 5, or 6) discriminating between (no cert) / (Peras only) /
(Peras + Leios). The matching 'DecCBOR' already reads this exact
length, so the existing decode path works unchanged. The outer 'Block'
record is now 2 elements (header + body-list), so
'numSegComponents = 1'.

A Leios certificate without a Peras certificate is not representable on
the wire (the decoder reads certificates positionally); the encoder
'error's in that case.

Co-Authored-By: Claude Opus 4.7 <[email protected]>