Home / Input Output / ouroboros-consensus
Jun 08, 10-11 AM (0)
Jun 08, 11-12 PM (0)
Jun 08, 12-1 PM (4)
Jun 08, 1-2 PM (2)
Jun 08, 2-3 PM (0)
Jun 08, 3-4 PM (1)
Jun 08, 4-5 PM (0)
Jun 08, 5-6 PM (1)
Jun 08, 6-7 PM (0)
Jun 08, 7-8 PM (0)
Jun 08, 8-9 PM (0)
Jun 08, 9-10 PM (0)
Jun 08, 10-11 PM (0)
Jun 08, 11-12 AM (0)
Jun 09, 12-1 AM (0)
Jun 09, 1-2 AM (0)
Jun 09, 2-3 AM (0)
Jun 09, 3-4 AM (0)
Jun 09, 4-5 AM (26)
Jun 09, 5-6 AM (0)
Jun 09, 6-7 AM (1)
Jun 09, 7-8 AM (0)
Jun 09, 8-9 AM (0)
Jun 09, 9-10 AM (4)
Jun 09, 10-11 AM (8)
Jun 09, 11-12 PM (5)
Jun 09, 12-1 PM (0)
Jun 09, 1-2 PM (71)
Jun 09, 2-3 PM (0)
Jun 09, 3-4 PM (1)
Jun 09, 4-5 PM (0)
Jun 09, 5-6 PM (1)
Jun 09, 6-7 PM (0)
Jun 09, 7-8 PM (0)
Jun 09, 8-9 PM (0)
Jun 09, 9-10 PM (0)
Jun 09, 10-11 PM (0)
Jun 09, 11-12 AM (0)
Jun 10, 12-1 AM (0)
Jun 10, 1-2 AM (0)
Jun 10, 2-3 AM (0)
Jun 10, 3-4 AM (0)
Jun 10, 4-5 AM (0)
Jun 10, 5-6 AM (0)
Jun 10, 6-7 AM (3)
Jun 10, 7-8 AM (11)
Jun 10, 8-9 AM (3)
Jun 10, 9-10 AM (5)
Jun 10, 10-11 AM (4)
Jun 10, 11-12 PM (45)
Jun 10, 12-1 PM (21)
Jun 10, 1-2 PM (3)
Jun 10, 2-3 PM (2)
Jun 10, 3-4 PM (1)
Jun 10, 4-5 PM (0)
Jun 10, 5-6 PM (0)
Jun 10, 6-7 PM (0)
Jun 10, 7-8 PM (0)
Jun 10, 8-9 PM (0)
Jun 10, 9-10 PM (0)
Jun 10, 10-11 PM (0)
Jun 10, 11-12 AM (0)
Jun 11, 12-1 AM (0)
Jun 11, 1-2 AM (0)
Jun 11, 2-3 AM (0)
Jun 11, 3-4 AM (0)
Jun 11, 4-5 AM (6)
Jun 11, 5-6 AM (1)
Jun 11, 6-7 AM (3)
Jun 11, 7-8 AM (1)
Jun 11, 8-9 AM (2)
Jun 11, 9-10 AM (7)
Jun 11, 10-11 AM (35)
Jun 11, 11-12 PM (1)
Jun 11, 12-1 PM (5)
Jun 11, 1-2 PM (1)
Jun 11, 2-3 PM (2)
Jun 11, 3-4 PM (0)
Jun 11, 4-5 PM (0)
Jun 11, 5-6 PM (0)
Jun 11, 6-7 PM (8)
Jun 11, 7-8 PM (1)
Jun 11, 8-9 PM (1)
Jun 11, 9-10 PM (0)
Jun 11, 10-11 PM (0)
Jun 11, 11-12 AM (0)
Jun 12, 12-1 AM (0)
Jun 12, 1-2 AM (0)
Jun 12, 2-3 AM (0)
Jun 12, 3-4 AM (0)
Jun 12, 4-5 AM (0)
Jun 12, 5-6 AM (0)
Jun 12, 6-7 AM (0)
Jun 12, 7-8 AM (1)
Jun 12, 8-9 AM (4)
Jun 12, 9-10 AM (1)
Jun 12, 10-11 AM (0)
Jun 12, 11-12 PM (0)
Jun 12, 12-1 PM (0)
Jun 12, 1-2 PM (0)
Jun 12, 2-3 PM (0)
Jun 12, 3-4 PM (1)
Jun 12, 4-5 PM (0)
Jun 12, 5-6 PM (1)
Jun 12, 6-7 PM (0)
Jun 12, 7-8 PM (0)
Jun 12, 8-9 PM (0)
Jun 12, 9-10 PM (0)
Jun 12, 10-11 PM (0)
Jun 12, 11-12 AM (0)
Jun 13, 12-1 AM (0)
Jun 13, 1-2 AM (0)
Jun 13, 2-3 AM (0)
Jun 13, 3-4 AM (0)
Jun 13, 4-5 AM (0)
Jun 13, 5-6 AM (0)
Jun 13, 6-7 AM (0)
Jun 13, 7-8 AM (0)
Jun 13, 8-9 AM (0)
Jun 13, 9-10 AM (0)
Jun 13, 10-11 AM (0)
Jun 13, 11-12 PM (0)
Jun 13, 12-1 PM (0)
Jun 13, 1-2 PM (0)
Jun 13, 2-3 PM (0)
Jun 13, 3-4 PM (0)
Jun 13, 4-5 PM (0)
Jun 13, 5-6 PM (0)
Jun 13, 6-7 PM (0)
Jun 13, 7-8 PM (0)
Jun 13, 8-9 PM (0)
Jun 13, 9-10 PM (0)
Jun 13, 10-11 PM (0)
Jun 13, 11-12 AM (0)
Jun 14, 12-1 AM (0)
Jun 14, 1-2 AM (0)
Jun 14, 2-3 AM (0)
Jun 14, 3-4 AM (0)
Jun 14, 4-5 AM (0)
Jun 14, 5-6 AM (0)
Jun 14, 6-7 AM (0)
Jun 14, 7-8 AM (0)
Jun 14, 8-9 AM (0)
Jun 14, 9-10 AM (0)
Jun 14, 10-11 AM (0)
Jun 14, 11-12 PM (0)
Jun 14, 12-1 PM (0)
Jun 14, 1-2 PM (0)
Jun 14, 2-3 PM (0)
Jun 14, 3-4 PM (0)
Jun 14, 4-5 PM (0)
Jun 14, 5-6 PM (0)
Jun 14, 6-7 PM (0)
Jun 14, 7-8 PM (0)
Jun 14, 8-9 PM (0)
Jun 14, 9-10 PM (0)
Jun 14, 10-11 PM (0)
Jun 14, 11-12 AM (0)
Jun 15, 12-1 AM (0)
Jun 15, 1-2 AM (0)
Jun 15, 2-3 AM (0)
Jun 15, 3-4 AM (0)
Jun 15, 4-5 AM (0)
Jun 15, 5-6 AM (0)
Jun 15, 6-7 AM (0)
Jun 15, 7-8 AM (0)
Jun 15, 8-9 AM (0)
Jun 15, 9-10 AM (0)
Jun 15, 10-11 AM (0)
305 commits this week Jun 08, 2026 - Jun 15, 2026
Leios: share late-join boot wiring between node and threadnet
Extract two helpers in LeiosLateJoinState so the production node boot and
the threadnet harness set up late-join the same way and cannot drift.

setLateJoinHooks sets the three late-join ChainDbArgs fields (the
ignore-set plus the seed and register hooks). forkLateJoinWorkers forks
the three background loops (trigger worker, AcquiredEbTxs subscriber, GC
pruner) on the node registry after the ChainDB is open.

Node.hs runWith now builds the LeiosKernel late-join state and routes
through both helpers; it did not wire late-join before. Network.hs
replaces its inline ChainDbArgs field-setting and loop forking with the
same two calls.
Discard snapshots if at same slot as the immutable db and is EBB (#2070)
This tackles a weird corner case in a test run, checkout the commit
before this one and run `ChainDB q-s-m.sequential` with
`--quickcheck-replay="(SMGen 15718721082101496336
1793087168948606521,99)"` to observe it.

In short, in the tests we don't copy blocks when we snapshot (which we
do on production, see TODO(geo2a) in ChainDB.StateMachine). Normally we
would be guarded by the fact that the snapshot would have a higher slot
than the immutable db tip but when the tip is exactly at an EBB this is
not the case and we reach the exception case.

With this fix, we instead discard the snapshot in this extremely rare
situation.

# Description

Please include a meaningful description of the PR and link the relevant
issues
this PR might resolve.

Also note that:

- New code should be properly tested (even if it does not add new
features).
- The fix for a regression should include a test that reproduces said
regression.

# WARNING

To update your feature branch if it's stale, please rebase it manually
on top of `main`. Don't update your feature branch by merging `main`
into it. Your pull request will not pass CI if you do.
Discard snapshots if at same slot as the immutable db and is EBB
This tackles a weird corner case in a test run, checkout the commit before this
one and run `ChainDB q-s-m.sequential` with `--quickcheck-replay="(SMGen
15718721082101496336 1793087168948606521,99)"` to observe it.

In short, in the tests we don't copy blocks when we snapshot (which we do on
production, see TODO(geo2a) in ChainDB.StateMachine). Normally we would be
guarded by the fact that the snapshot would have a higher slot than the
immutable db tip but when the tip is exactly at an EBB this is not the case and
we reach the exception case.

With this fix, we instead discard the snapshot in this extremely rare situation.
Leios: Vote signing and committee selection (#2039)
Refs https://github.com/input-output-hk/ouroboros-leios/issues/790.

Builds on the initial Leios voting prototype (#1963) by adding committee
selection and real signature creation/validation, replacing the
placeholder voting from #1963. This is also built on the Leios prototype
remake (still in flight as #2041).

- **Committee selection (per EB) from the stake distribution.** A
`HasLeiosVoting` decides whether (and as which `VoterId`) the local node
votes on an EB, derived from the Shelley `PoolDistr`. For now, this only
runs in the latest era and uses a basic selection scheme.
- **Real BLS signatures.** Switched from placeholder/fake signing to
actual BLS signatures, using a more recent `cardano-crypto-class` (now
available after the remake #2041)
- **Voting key material.** BLS keys are still derived, but from the cold
verification key hash (pool id) instead. This allows us to skip the key
registration, but is obviously still unsafe.
- **Tests.** `LeiosVoteState` unit tests cover the new validation API;
ThreadNet expectations remain green.

TODO

- [x] ThreadNet property tests pass (votes diffuse and are validated)
- [x] `LeiosVoteState` unit tests pass
- [x] Integrate golden `LeiosVote` test into existing machinery